Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env bash
- #Usage: webm [INPUT] [start time in ss.fff] [duration in s.fff] [filename] [OPTIONAL additional settings placed in quotes e.g "-vf scale:-1:360 -threads 8"]
- #requires: bc, gdate, youtube-dl, ffmpeg
- LENGTH=$(bc <<< "scale=3; $3-$2")
- BITRATE=$(bc <<< "scale=3; 24/$LENGTH")
- MAXSIZE=3145728
- MINSIZE=3093299
- IDEAL=3133440
- sizeNOW=0
- sizeOLD=0
- ATTEMPTS=0
- oldBR=0
- TIMESTAMP=$2
- if (( $(bc <<< "$TIMESTAMP < 4") )) #to prevent negative timestamps
- then
- UNIT=0
- BACKSTEP=0
- NEWTIME=$2
- else
- UNIT=4
- BACKSTEP=4 #backstep in seconds since epoch
- NEWTIME=$(bc <<< "$TIMESTAMP - $BACKSTEP") #timestamp shifted 4 or 0 seconds back
- fi
- while ([ $sizeNOW -lt $MINSIZE ] || [ $sizeNOW -gt $MAXSIZE ]) && [ $ATTEMPTS -lt 5 ]; do
- if [[ $1 == *"http"* ]]
- then
- INPUT="$(youtube-dl -f bestvideo/best -g "$1")"
- else
- INPUT="${1//\\\ /\ }"
- fi
- sizeOLD=$sizeNOW
- safetyBR=$oldBR
- oldBR=$BITRATE
- echo "ffmpeg -ss "$NEWTIME" -i "$INPUT" -ss "$UNIT" -c:v libvpx -an -sn -t "$LENGTH" -b:v "$BITRATE"M -y -v fatal -stats ~/Desktop/"$4".webm"
- ffmpeg -ss "$NEWTIME" -i "$INPUT" -ss "$UNIT" -c:v libvpx -an -sn -t "$LENGTH" -b:v "$BITRATE"M -y -v fatal -stats ~/Desktop/"$4".webm
- sizeNOW=$(wc -c <~/Desktop/"$4".webm)
- BITRATE=$(bc <<< "scale=3;($IDEAL/$sizeNOW)*$BITRATE")
- if (( $(bc <<< "$oldBR > $safetyBR") ))
- then
- INCREASING=1
- else
- INCREASING=0
- fi
- ((ATTEMPTS++))
- if (( $sizeNOW < $sizeOLD )) && (( $INCREASING == 1 )) #to avoid errors caused by bitrate being set too high
- then
- echo
- echo "#"$ATTEMPTS" $(($sizeNOW / 1024))kB @"$oldBR"Mb/s"
- echo "Maximum bitrate exceeded. Next @"$safetyBR"Mb/s"
- ffmpeg -ss "$NEWTIME" -i "$INPUT" -ss "$UNIT" -c:v libvpx -an -sn -t "$LENGTH" -b:v "$safetyBR"M -y -v fatal -stats ~/Desktop/"$4".webm
- sizeNOW=$(wc -c <~/Desktop/"$4".webm)
- ((ATTEMPTS++))
- echo
- echo "#"$ATTEMPTS" $(($sizeNOW / 1024))kB @"$safetyBR"Mb/s"
- echo "$4.webm $(($sizeNOW / 1024))kB"
- exit
- fi
- echo
- echo "#"$ATTEMPTS" $(($sizeNOW / 1024))kB @"$oldBR"Mb/s"
- echo "Next @"$BITRATE"Mb/s"
- done
- echo
- echo "$4.webm $(($sizeNOW / 1024))kB"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement