#!/usr/bin/env bash # set output directory OUTPUT_DIR=$HOME/vids # get filename without extension filename=$(basename -- "$1") filename="${filename%.*}" # set target file size in bits (8192kB * N, in this case 8MB) # might refactor this into a variable max_size=$((8388608*6)) # get video duration duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$1" | cut -d'.' -f1) # calculate target bitrate # using default audio bitrate for vorbis (96kb/s) audio_rate=96000 bitrate=$(((max_size / duration) - audio_rate)) ffmpeg -y -i "$1" -pass 1 -s 1280x720 -c:v libvpx-vp9 -crf 1 -maxrate:v "$bitrate" -b:v "$bitrate" -an -g 128 -f null /dev/null && \ ffmpeg -y -i "$1" -pass 2 -s 640x480 -c:v libvpx-vp9 -crf 1 -maxrate:v "$bitrate" -b:v "$bitrate" -c:a libvorbis -b:a "$audio_rate" -g 128 "${OUTPUT_DIR}/$filename.webm" rm ffmpeg2pass-0.log