Guest User

soundpostmerge.sh

a guest
Apr 16th, 2025
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.68 KB | None | 0 0
  1. #!/bin/bash
  2. #use by running it. no options
  3.  
  4. shopt -s globstar
  5. shopt -s nullglob
  6.  
  7. targetdir="./soundpostsmerged/"
  8. mkdir -p "$targetdir"
  9.  
  10. function merge {
  11.     catbox=$(printf '%b' "${1//%/\\x}" | sed 's/.*\[sound=\(.*\)\].*/\1/')
  12.     audio=$(basename $catbox)
  13.     audiotype=${audio##*.}
  14.     video=$(basename "$1" | sed 's/\(.*\)\[sound=.*\]\(.*\)/\1\2/')
  15.     videoname=${video%.*}
  16.     videotype=${video##*.}
  17.  
  18.  
  19.     if [[ $videoname == "" ]]; then
  20.         echo "no video name, assigning soundpost link as name"
  21.         noname=1
  22.         videoname=$(basename "${1%.*}")
  23.         video="${videoname}.${videotype}"
  24.     fi
  25.  
  26.     if [ -f "${videoname}.webm" ]; then
  27.         echo "file $video already exists. Skipping..."
  28.         return
  29.     fi
  30.  
  31.     if [[ $videotype == "gif" ]]; then
  32.         echo "skipped: $1"
  33.         gifskip="$gifskip\nskipped: $1"
  34.         return
  35.     fi
  36.  
  37.     if [[ $videotype == "mp4" ]]; then
  38.         echo "skipped: $1"
  39.         gifskip="$gifskip\nskipped: $1"
  40.         return
  41.     fi
  42.  
  43.     echo
  44.     echo ===[$2 out of $3]====================
  45.     if [[ $noname -eq 1 ]]; then echo "no video name, assigning soundpost link as name"; fi
  46.     echo -e "input:\t$1"
  47.     echo -e "catbox:\t$catbox"
  48.     echo -e "audio:\t$audio"
  49.     echo -e "audiotype:\t$audiotype"
  50.     echo -e "video:\t$video"
  51.     echo -e "videotype:\t$videotype"
  52.     echo =======================================
  53.     echo
  54.  
  55.     audiotemp="$(mktemp --suffix=".$audiotype")"
  56.  
  57.     wget -q $catbox -O "$audiotemp" &> /dev/null
  58.  
  59.     if [[ $videotype == "webm" ]]; then
  60.         compatibletypes=("opus" "ogg")
  61.         if [[ ${compatibletypes[@]} =~ $audiotype ]]; then
  62.             ffmpeg -loglevel error -i "$1" -i "$audiotemp" -c:v copy -c:a copy "$video"
  63.         else
  64.             ffmpeg -loglevel error -i "$1" -i "$audiotemp" -c:v copy -c:a libvorbis "$video"
  65.         fi
  66.     fi
  67.  
  68.     imagetypes=("jpeg" "jpg" "png")
  69.     if [[ ${imagetypes[@]} =~ $videotype ]]; then
  70.         compatibletypes=("opus" "ogg")
  71.         if [[ ${compatibletypes[@]} =~ $audiotype ]]; then
  72.             ffmpeg -loglevel error -r 1 -loop 1 -i "$1" -i "$audiotemp" -c:a copy -r 1 -shortest "${videoname}.webm"
  73.         else
  74.             ffmpeg -loglevel error -r 1 -loop 1 -i "$1" -i "$audiotemp" -c:a libvorbis -r 1 -shortest "${videoname}.webm"
  75.         fi
  76.     fi
  77.  
  78.     #if [[ $videotype == "gif" ]]; then
  79.         #compatibletypes=("opus" "ogg")
  80.         #if [[ ${compatibletypes[@]} =~ $audiotype ]]; then
  81.         #   ffmpeg -ignore_loop 0 -i "$1" -i "$audio" -c:a copy "${video%.*}.webm"
  82.         #else
  83.         #   ffmpeg -ignore_loop 0 -i "$1" -i "$audio" -c:a libvorbis "${video%.*}.webm"
  84.         #fi
  85.     #fi
  86.  
  87.     rm "$audiotemp"
  88. }
  89.  
  90. soundposts=(**/*\[sound=*)
  91. soundpostslen="${#soundposts[@]}"
  92. i=1
  93.  
  94. originalworkingdir="$(pwd)"
  95.  
  96. cd "$targetdir"
  97.  
  98. for p in "${soundposts[@]}" ; do
  99.     #echo "[$i out of $soundpostslen]"
  100.     merge "${originalworkingdir}/$p" $i $soundpostslen &
  101.     ((i++))
  102. done
  103.  
  104. wait
  105.  
  106. echo -e "$gifskip"
  107.  
Advertisement
Add Comment
Please, Sign In to add comment