Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # 8 mebibytes expressed in bits. 512 bytes leeway for request.
- MAX_SIZE=$(( (1024 * 1024 * 8 - 512) * 8 ))
- file_name="${1%.*}"
- audio_bitrate="$(ffprobe -v error -select_streams a:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 "$1" | awk '{sum+=$1} END {print sum}')"
- if [ -z "$2" ]
- then
- seek=""
- duration="$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$1")"
- else
- seek="-sseof -$2"
- duration=$(echo $2 | sed -E 's/(.*):(.+):(.+)/\1*3600+\2*60+\3/;s/(.+):(.+)/\1*60+\2/' | bc -l)
- fi
- video_bitrate=$(echo "(($MAX_SIZE + $duration - 1) / $duration - $audio_bitrate) * 0.98" | bc) # Ceiling division, 2% overhead
- bufsize=$(echo "$video_bitrate / 2" | bc)
- ffmpeg \
- -hide_banner -loglevel 32 -y \
- $seek \
- -i "$1" \
- -c:v libx264 \
- -x264-params "nal-hrd=cbr" \
- -b:v $video_bitrate \
- -minrate $video_bitrate \
- -maxrate $video_bitrate \
- -bufsize $bufsize \
- -r 30 \
- -vf scale=-1:720 \
- -pass 1 \
- -passlogfile "${file_name}_2pass" \
- -an \
- -f mp4 /dev/null \
- && ffmpeg \
- -hide_banner -loglevel 32 \
- $seek \
- -i "$1" \
- -c:v libx264 \
- -x264-params "nal-hrd=cbr" \
- -b:v $video_bitrate \
- -minrate $video_bitrate \
- -maxrate $video_bitrate \
- -bufsize $bufsize \
- -r 30 \
- -vf scale=-1:720 \
- -pass 2 \
- -passlogfile "${file_name}_2pass" \
- -c:a copy \
- -map 0:v -map 0:a \
- "${file_name}_8mb.mp4"
- find . -name "${file_name}_2pass*.log*" -type f -delete
Add Comment
Please, Sign In to add comment