Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
AV1
siehe auch AV1 mit HDR
Encoder
Encoder-Vergleich
# optimale Balance zwischen Qualität, Kompilierzeit und Dateigröße # 588 MB # 308,5 Minuten Kompilierzeit ffmpeg ... -c:v libsvtav1 -crf 29 -preset 5 -svtav1-params enable-overlays=1:enable-tf=0:film-grain=0:film-grain-denoise=0:keyint=5s:scd=1:tune=0:fast-decode=0
# optimiert, um Platz zusparen # 417 MB (ca. 30% Platzersparnis gegenüber dem SVT-AV1) # 3707 Minuten Kompilierzeit (mehr als 12-mal so lange, wie der SVT-AV1) ffmpeg ... -c:v libaom-av1 -cpu-used 3 -crf 28 -aom-params fp-mt=1 -row-mt 1 -aq-mode 1 -tune 1 -threads 6
Encoder: libaom-av1
> ffmpeg -help encoder=libaom-av1
libaom-av1 ist seit dem 23. Sep. 2020 nicht mehr experimentell
ffmpeg -h encoder=libaom-av1 ffmpeg -i input.mp4 -c:v libaom-av1 -crf 20 -b:v 0 -cpu-used 5 -row-mt 1 -tile-columns 1 -tile-rows 0 -f matroska ausgabe.mkv
Lossless encoding
-crf 0 -aom-params lossless=1
Kodiergeschwindigkeit
- für die Transkodiergeschwindigkeit sind hauptsächlich die folgenden Option verantwortlich
-crfverschiebt das Verhältnis zwischen Dateigröße und Kodiergeschwindigkeit-crf 32dürfte sich (von der Dateigröße her) ungefähr im Bereich von VP9 bewegen, wie ich es nutze
-cpu-usedmacht eine Menge aus- damit soll das Verhältnis zwischen Qualität und Kodiergeschwindigkeit verschoben werden können;
0ist am langsamsten1ist Standard8ist am schnellsten
-usageschaltet die Prio entweder auf Qualität (Standard) oder auf Kodiergeschwindigkeit, besser streamen zu können-usage 0- gute Qualität aber sehr langsam-usage 1- für streaming/realtime, ist fast so schnell wie VP9
-aq-mode 3bremst den Kodec sehr stark ein- setzt man da einen Werte zwischen "0" und "2", dann macht das fast nix in der Geschwindigkeit
Geschwindigkeits- und Qualitätsbeeinflussung
Standard-Aufrufe
langsam mit hoher Qualität (-crf 20 -usage 0 -cpu-used 0):
> ffmpeg -i film.avi -probesize 9223372036854M -analyzeduration 9223372036854M -fflags +genpts -i film.avi -c:v libaom-av1 -crf 20 -usage 0 -cpu-used 0 -map 0:v -c:a libvorbis -q:a 6 -map 0:a:0 -c:s copy -f matroska -y film.mkv
schnell mit geringer Qualität (-crf 50 -usage 1 -cpu-used 8 -threads 0 -tile-columns 1 -tile-rows 0 -row-mt true):
> ffmpeg -i film.avi -probesize 9223372036854M -analyzeduration 9223372036854M -fflags +genpts -i film.avi -c:v libaom-av1 -crf 35 -usage 1 -cpu-used 8 -threads 0 -tile-columns 1 -tile-rows 0 -row-mt true -map 0:v -c:a libvorbis -q:a 6 -map 0:a:0 -sn -f webm -y film.webm
-cpu-usedsets how efficient the compression will be. Default is 1. Lower values mean slower encoding with better quality, and vice-versa.⇒ 0…8-row-mt 1enables row-based multi-threading which maximizes CPU usage. To enable fast decoding performance, also add tiles (i.e.-tiles 4x1or-tiles 2x2for 4 tiles). Enablingrow-mtis only faster when the CPU has more threads than the number of encoded tiles.-usage realtimefür Video-Konferenzen
HDR - Farbinformationen
- When encoding in HDR it's necessary to pass through color information;
-colorspace,-color_trcand-color_primaries. - For example, Youtube HDR uses:
-colorspace bt2020nc -color_trc smpte2084 -color_primaries bt2020
> ffmpeg -h encoder=libaom-av1 > ffmpeg -i input.mp4 -c:v libaom-av1 -crf 20 -b:v 0 -cpu-used 4 -threads 4 -row-mt 1 -tile-columns 1 -tile-rows 0 -colorspace bt2020nc -color_trc smpte2084 -color_primaries bt2020 -c:a libopus -vbr on -compression_level 10 -ac 2 -b:a 200k -f matroska -y av1_test.mkv
Good News: AV1 Encoding Times Drop to Near-Reasonable Levels
During the recent project, I asked Google if there were any other ways to accelerate encoding speed. One engineer advised: If you can use multiple threads while running the encoder, it would help with the encoder speed. For HD and above resolutions, we suggest using tiles. Using tiles causes quality loss, and my old testing showed ~0.6% loss while using 2 tiles and ~1.3% loss while using 4 tiles. I didn't test 4k clips myself, so here I just give some suggestions. For 1080p, use 2 tiles and 8 threads: "--tile-columns=1 --tile-rows=0 --threads=8 For 4k, use 4 tiles and 16 threads: "--tile-columns=1 --tile-rows=1 --threads=16" (or even try: 8 tiles/32 threads: "--tile-columns=2 --tile-rows=1 --threads=32")"
um eine hohe Qualität und eine hohe Kompatibilität zu erhalten, behalte ich diese Werte wie folgt immer bei:
für gleichbleibende Qualität: -b:v 0 -row-mt 1 -tile-columns 1 -tile-rows 0 für HDR wie YouTube es einsetzt (hohe Kompatibilität): -colorspace bt2020nc -color_trc smpte2084 -color_primaries bt2020
um die Qualität und Kodiergeschwindigkeit steuern zu können, werden diese Werte individuell angepasst
soviel Qualität wie nötig (meine höchste Qualität: ~"16" / meine höchste Geschwindigkeit: ~"36"): -crf 20
für maximale Kodiergeschwindigkeit, hier die Anzahl der "echten" Kerne ("4" für 4 Kerne bzw. 8 HyperThreading): -cpu-used 4 -threads 4
Anzahl der "echten" CPU-Kerne mit FreeBSD ermitteln:
# sysctl -n hw.ncpu 4 # sysctl -n kern.smp.cpus 4
Anzahl der "echten" CPU-Kerne mit Linux ermitteln:
# egrep '^core id' /proc/cpuinfo | sort -u | wc -l 4
Encoder: librav1e
ffmpeg -h encoder=librav1e ffmpeg -i input.mp4 -c:v librav1e -qp 80 -tile-columns 1 -tile-rows 0 -rav1e-params speed=5:low_latency=true -f matroska ausgabe.mkv
Encoder: libsvt_av1
> ffmpeg -help encoder=libsvtav1 > ffmpeg -i input.mp4 -c:v libsvtav1 -crf 35 svtav1_test.mp4
> ffmpeg -h encoder=libsvt_av1 > ffmpeg -i input.mp4 -c:v libsvt_av1 -qp 32 -preset 8 -profile 0 -level 0 -rc 0 -f matroska ausgabe.mkv
Für den Codec "SVT-AV1" sind die Optionen -crf 25 -preset 7 recht praktisch. Sinnvolle Werte für -preset liegen zwischen "3" und "8".
# -preset "-1 bis 13" (default 10) Kompromiss zwischen Codierungsgeschwindigkeit und Komprimierungseffizienz
Niedrigere Werte führen bei einer gegebenen Dateigröße zu einer Ausgabe mit besserer Qualität,
die Codierung dauert jedoch länger.
# -crf "0 bis 63" (default 50) Constant Rate Factor: Niedrigere Werte entsprechen einer höheren Qualität und einer größeren Dateigröße.
Encoder: av1 (ffmpeg intern)
ffmpeg -i input.mp4 -c:v av1 -crf 32 -f matroska ausgabe.mkv
Player
Stand: 25. März 2023
