reencode: preserve the size
authorJulien Moutinho <julm@sourcephile.fr>
Tue, 7 Nov 2023 20:34:03 +0000 (21:34 +0100)
committerJulien Moutinho <julm@sourcephile.fr>
Tue, 7 Nov 2023 20:34:03 +0000 (21:34 +0100)
reencode.sh

index b46cc16f0c5480aec43b03681f9b7747776495f1..affd79650f76156a938a241dd194fb456475fb19 100755 (executable)
@@ -16,22 +16,31 @@ for dir in "$@"; do
   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" \
@@ -44,7 +53,7 @@ for dir in "$@"; do
           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 \