test -n "$month" || exec "$0" "$user"/"$year"/src/*/
pushd "$user/$year" >/dev/null
test -d src/"$month" || { popd; continue; }
- (cd src; find -L "$month" -type f -size +200M -printf '%f %p\n') | sort -t/ -k1.5 | cut -f2 -d ' ' |
+ (cd src; find -L "$month" -type f -size +180M -printf '%f %p\n') | sort -t/ -k1.5 | cut -f2 -d ' ' |
while read -r src; do
echo >&2 "$dir: processing $year/src/$src"
base=${src%.*}
name=${base#*/}
id=${name%%.*}
mkdir -p {{tmp,wip}/reencode,old}/"${base%/*}"
+ need_psize () {
+ # Slow, but needed to make wide videos span two columns of the CSS grid
+ IFS=' ' read -r width height <<<"$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0:s='\ ' src/"$src")"
+ if [ "$width" -gt "$height" ]
+ then psize=$height
+ else psize=$width
+ fi
+ }
case "$src" in
*.mp4)
- # Slow, but needed to make wide videos span two columns of the CSS grid
- orient=$(ffprobe -v 0 -select_streams v:0 -show_entries stream_side_data=rotation -of default=nw=1:nk=1 src/"$src")
- psize=720
- crf=40
+ need_psize
+ case $psize in
+ 480) crf=30;;
+ 720) crf=40;;
+ *) exit 3;;
+ esac
preset=6
- ext="preset=$preset.crf=$crf.${psize}p.av1.webm"
- if [ -z "$orient" ]; then scale="-2:${psize}"; else scale="${psize}:-2"; fi
+ ext="preset=$preset.crf=$crf.av1.webm"
need_opus () {
test tmp/reencode/"$base".opus -nt src/"$src" || {
ffmpeg_ -i src/"$src" \
need_opus
ffmpeg_ -i src/"$src" -i tmp/reencode/"$base".opus \
-map 0:v \
- -filter:v format=yuv420p,scale="$scale" \
+ -filter:v format=yuv420p \
-c:v libsvtav1 -preset "$preset" -crf "$crf" \
-svtav1-params input-depth=8:keyint=10s:enable-overlays=1:enable-tf=0:scd=1:scm=0:tune=0:fast-decode=1 \
-map 1:a -c:a copy \