Benutzer-Werkzeuge

Webseiten-Werkzeuge


av1

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
av1 [2023-10-13 00:54:35] – [Encoder: libsvt_av1] manfredav1 [2024-11-23 00:34:25] (aktuell) – [AV1] manfred
Zeile 1: Zeile 1:
 +====== AV1 ======
 +
 +    * **[[https://trac.ffmpeg.org/wiki/Encode/AV1|AV1]]**
 +    * //[[https://nwgat.ninja/test-driving-aomedias-av1-codec/|Nwgat's AOMedia's AV1 Codec Overview]]//
 +    * [[https://www.singhkays.com/blog/its-time-replace-gifs-with-av1-video/|It's time to replace GIFs with AV1 video!]]
 +    * [[https://youtu.be/5IV36FMpLqY|AV1 Rendering 101: Why Grain is the Most Important Setting (Handbrake & FFmpeg)]]
 +
 +siehe auch //[[::HDR (High Dynamic Range / Dolby Vision)#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.//
 +
 +  * [[https://gist.github.com/BlueSwordM/86dfcb6ab38a93a524472a0cbe4c4100]]
 +  * [[https://academysoftwarefoundation.github.io/EncodingGuidelines/EncodeAv1.html#libsvtav1]]
 +  * [[https://gist.github.com/dvaupel/716598fc9e7c2d436b54ae00f7a34b95]]
 +
 +  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 ===
 +
 +  * ''-crf 0 -aom-params lossless=1''
 +
 +
 +=== Kodiergeschwindigkeit ===
 +
 +  * für die Transkodiergeschwindigkeit sind hauptsächlich die folgenden Option verantwortlich
 +    * ''-crf'' verschiebt das Verhältnis zwischen Dateigröße und Kodiergeschwindigkeit
 +      * ''-crf 32'' dürfte sich (von der Dateigröße her) ungefähr im Bereich von VP9 bewegen, wie ich es nutze
 +    * ''-cpu-used'' macht eine Menge aus
 +      * damit soll das Verhältnis zwischen Qualität und Kodiergeschwindigkeit verschoben werden können;
 +      * **''0''** ist am langsamsten
 +      * **''1''** ist Standard
 +      * **''8''** ist am schnellsten
 +    * ''-usage'' schaltet 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 **3**'' bremst 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-used'' sets how efficient the compression will be. Default is **1**. Lower values mean slower encoding with better quality, and vice-versa. ''=> 0...8''
 +  * ''-row-mt 1'' enables row-based multi-threading which maximizes CPU usage. To enable fast decoding performance, also add tiles (i.e. ''-tiles 4x1'' or ''-tiles 2x2'' for 4 tiles). Enabling ''row-mt'' is only faster when the CPU has more threads than the number of encoded tiles.
 +  * ''-usage realtime'' für Video-Konferenzen
 +
 +HDR - Farbinformationen
 +  * When encoding in HDR it's necessary to pass through color information; ''-colorspace'', ''-color_trc'' and ''-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
 +
 +[[https://www.streamingmedia.com/Articles/ReadArticle.aspx?ArticleID=130284&pageNum=2|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//
 +
 +  * [[https://github.com/nova-video-player/aos-AVP|Nova Video Player]]
 +    * [[https://play.google.com/store/apps/details?id=org.courville.nova|Android TV]]
 +    * [[https://www.amazon.de/dp/B07P1Q1DG9|Fire TV]]
 +  * [[https://emby.media/download.html|Emby]]
 +    * [[https://play.google.com/store/apps/details?id=tv.emby.embyatv|Android TV]]
 +    * [[https://www.amazon.de/dp/B00VVJKTW8|Fire TV]]