summaryrefslogtreecommitdiff
path: root/convert-to-webm
diff options
context:
space:
mode:
authoryuzu-eva <cafebabe@disroot.org>2025-05-08 14:01:37 +0200
committeryuzu-eva <cafebabe@disroot.org>2025-05-08 14:01:37 +0200
commitef7c1605a027b52bbff1b01ea693b60f53fa3a71 (patch)
tree1089334258aefbd459d18cf6968e78f1194739b0 /convert-to-webm
initial commit
Diffstat (limited to 'convert-to-webm')
-rwxr-xr-xconvert-to-webm25
1 files changed, 25 insertions, 0 deletions
diff --git a/convert-to-webm b/convert-to-webm
new file mode 100755
index 0000000..bb913c5
--- /dev/null
+++ b/convert-to-webm
@@ -0,0 +1,25 @@
+#!/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