]>
Git — Sourcephile - julm/camera.git/blob - reencode.sh
2 # Copyright: Julien Moutinho <julm+camera@sourcephile.fr>
3 # License: AGPL-3.0-or-later
10 ffmpeg_
() { local -; set -x; nice
-19 time ffmpeg
</dev
/null
-hide_banner -loglevel warning
-stats -y "$@"; }
11 mv_
() { local -; mv -i >&2 "$@"; }
14 IFS
=/ read -r user year x month x
<<<"$dir"
15 test -n "$year" || exec "$0" "$user"/2*/src
/*/
16 test -n "$month" || exec "$0" "$user"/"$year"/src
/*/
17 pushd "$user/$year" >/dev
/null
18 test -d src
/"$month" || { popd; continue; }
19 (cd src
; find -L "$month" -type f
-size +200M
-printf '%f %p\n') | sort -t/ -k1.5
| cut
-f2 -d ' ' |
21 echo >&2 "$dir: processing $year/src/$src"
25 mkdir -p {tmp
,wip
,old
}/reencode
/"${base%/*}"
28 # Slow, but needed to make wide videos span two columns of the CSS grid
29 orient
=$(ffprobe -v 0 -select_streams v:0 -show_entries stream_side_data=rotation -of default=nw=1:nk=1 src/"$src")
33 ext
="preset=$preset.crf=$crf.${psize}p.av1.webm"
34 if [ -z "$orient" ]; then scale
="-2:${psize}"; else scale
="${psize}:-2"; fi
36 test tmp
/reencode
/"$base".opus
-nt src
/"$src" || {
37 ffmpeg_
-i src
/"$src" \
38 -map 0:a
-c:a libopus
-b:a
64k
-application voip \
39 wip
/reencode
/"$base".opus
40 mv_
{wip
,tmp
}/reencode
/"$base".opus
43 test src
/"$base.$ext" -nt src
/"$src" || {
45 ffmpeg_
-i src
/"$src" -i tmp
/reencode
/"$base".opus \
47 -filter:v format
=yuv420p
,scale
="$scale" \
48 -c:v libsvtav1
-preset "$preset" -crf "$crf" \
49 -svtav1-params input
-depth=8:keyint
=10s
:enable-overlays=1:enable-tf=0:scd
=1:scm
=0:tune
=0:fast
-decode=1 \
51 wip
/reencode
/"$base.$ext"
52 mv_
{wip
/reencode
,src
}/"$base.$ext"
53 mv_
{src
,old
/reencode
}/"$src"
58 rm -vrf {tmp
,wip
}/reencode