Inhaltsverzeichnis

AV1

siehe auch AV1 mit HDR

> ffmpeg -i Quelle.avi -c:v libaom-av1 -crf 38 -cpu-used 8 -row-mt 1 -aq-mode 1 -tune 1 -g 300 -c:a aac -movflags faststart -f mp4 -y Ziel.mp4

Encoder

libsvtav1

Der Encoder svt-av1 ist zur Zeit der empfehlenswerteste AV1-Encoder.

CRF    => Qualität vs. Dateigröße
Preset => Qualität vs. Geschwindigkeit
CRF = 16-20-25 - Bereich, in dem der Kompromis zwischen Qualität und Dateigröße gut sind, die Encoder-Zeit schwankt, ändert sich aber nur wenig.

CRF=16 - gerade noch akzeptable Dateigröße
CRF=25 - in einigen Fällen (abhängig vom Videomaterial) ist die Qualität bei CRF>25 zu schlecht
Preset=4-6 - Bereich, in dem der Kompromis zwischen Qualität und Geschwindigkeit gut sind
Preset=3-4 - für Archivierung
Preset=5   - guter Kompromis zw. Qualität und Geschwindigkeit, wenn der Schwerpunkt eher Richtung Qualität geht
Preset=6   - für Geschwindigkeit
Preset>=8  - Echtzeit-Encoding

Preset=6 sollte ein guter Ausgangspunkt für Qualität/Geschwindigkeit sein. Wenn Sie mehr Wert auf Qualität legen möchten, können Sie 3-5 ausprobieren. Wenn Sie mehr Wert auf Geschwindigkeit legen möchten, können Sie 6-8 versuchen.
Wenn Sie auf Echtzeit und viel schneller als Echtzeit abzielen möchten, können Sie von 8 bis 12 gehen.

Encoder-Vergleich

# Dieser Verglich wurde auf FreeBSD 14.0, im Februar 2024, gefahren.

### AOM-AV1 (2024-02: FreeBSD 14.0)
# optimiert, um Platz zu sparen
# 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

### SVT-AV1 (2024-02: FreeBSD 14.0)
# 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
### SVT-AV1 (2023-12: FreeBSD 13.2)
ffmpeg ... -c:v libsvtav1 -crf 25 -preset 7 ...:  902 MB (96 %)

### SVT-AV1 (2024-02: FreeBSD 14.0)
ffmpeg ... -c:v libsvtav1 -crf 25 -preset 7 ...:  940 MB (100 %)
ffmpeg ... -c:v libsvtav1 -crf 20 -preset 5 ...: 1226 MB (130 %)
ffmpeg ... -c:v libsvtav1 -crf 21 -preset 5 ...: 1150 MB (122 %)
ffmpeg ... -c:v libsvtav1 -crf 22 -preset 5 ...: 1077 MB (115 %)
ffmpeg ... -c:v libsvtav1 -crf 23 -preset 5 ...: 1012 MB (108 %)
ffmpeg ... -c:v libsvtav1 -crf 24 -preset 5 ...:  939 MB (100 %)
ffmpeg ... -c:v libsvtav1 -crf 25 -preset 5 ...:  853 MB (91 %)
ffmpeg ... -c:v libsvtav1 -crf 26 -preset 5 ...:  771 MB (82 %)
ffmpeg ... -c:v libsvtav1 -crf 27 -preset 5 ...:  701 MB (75 %)
ffmpeg ... -c:v libsvtav1 -crf 28 -preset 5 ...:  640 MB (68 %)
ffmpeg ... -c:v libsvtav1 -crf 29 -preset 5 ...:  588 MB (63 %)
ffmpeg ... -c:v libsvtav1 -crf 30 -preset 5 ...:  545 MB (58 %)

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

Kodiergeschwindigkeit

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

HDR - Farbinformationen

> 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