AV1 transcoding mit Alchimist; Encodingoptionen

bul

Cadet 4th Year
Registriert
Juni 2013
Beiträge
116
Hardwareinfos:
Ryzen 5950X
Asus TUF Gaming B450 WIFI (Bios 01/2025)
2x 16 GB PC4-28800 DDR4 SDRAM Team Group TEAMGROUP-UD4-3600; FSB 1800, Ram läuft auf 3600
Intel Arc A750, ReBar im Bios aktiviert
OS: Windows 11 (Linux schaffe ich nicht ffmpeg zu compilieren und die Inteltreiber richtig zu installieren)

Hallo Zusammen,

ich bin auf der Suche nach Optionen zum transcodieren von 30TB Aufnahmen.
Da CPU Encoding zu AV1 zu lange dauern würde, möchte ich unter Hinnahme von Qualitätsverlusten alles auf der Grafikkarte machen.
Die Qualitätsverluste möchte ich aber minimieren und stattdessen die Grafikkarte "quälen" und möglichst viele Optionen zur Qualitätsverbesserung aktivieren.
Und hier ist das Problem. ChatGPT, der Lügenbold, empfiehlt Optionen die es für AV1 nicht gibt, z.B. la-icq.
In Foren wurde ich auch nur bedingt fündig.
Ich weiß nicht mal ob ich besser ffmpeg oder rigayas qsvenc nutzen soll.
Derzeit ist meine Commandline:
ffmpeg ^
-extra_hw_frames 8 ^
-i "input.mkv" ^
-c:v av1_qsv ^
-preset veryslow ^
-extbrc 1 ^
-async_depth 4 ^
-look_ahead_depth 8 ^
-b:v 1M ^
-bufsize 8M ^
-rc_init_occupancy 1M ^
-low_power 0 ^
-adaptive_i 1 ^
-adaptive_b 1 ^
-b_strategy 1 -bf 7 ^
output.mkv

Statt der festen Bitrate von 1M werde ich als nächstes ICQ 20 oder so versuchen, bin aber total unschlüssig ob ich damit alle angebotenen Rechenoperationen der Graka ausnutze.
Encodingzeit und Stromverbrauch sind bei GPU-Nutzung prinzipiell egal. Ist immer noch zigfach schneller als CPU.

Hat jemand Tipps? Auch gerne Hinweise wenn ich mit der bisherigen Commandline völlig auf dem Holzweg bin...
 
Ich nutze Handbrake fürs encoding mit der Grafikkarte, da kann ich mir in der GUI auch passende presets auswählen und anpassen. Hast du es damit mal probiert. Vlt kommst du damit schneller zum Ziel.
 
  • Gefällt mir
Reaktionen: bul, Azghul0815, redfng und 2 andere
bul schrieb:
Statt der festen Bitrate von 1M
Soll das heißen, du möchtest 1Mbit/s Zieldatenrate haben? Von welcher Video-Auflösung/FPS reden wir eigentlich?
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: madmax2010
@qiller Nein die 1MBit/s war nur zum testen, welche Rechenoperationen/Funktionen mit AV1 gehen.
Wir reden von 1080p und mit der neuen Kamera über 4K.
 
bul schrieb:
ChatGPT, der Lügenbold, empfiehlt Optionen die es für AV1 nicht gibt, z.B. la-icq.
Welchen Prompt hast du denn genutzt? Für derartige Anwendungsfälle eignet sich ChatGPT meiner Erfahrung nach eigentlich recht gut. Man darf halt nicht mit der Erwartungshaltung heran gehen, dass nach der ersten Frage direkt ein perfektes Ergebnis heraus kommt. (Insbesondere wenn die Frage nicht optimal formuliert ist und nicht alle nötigen Infos enthält).

Lass ihn am besten Schritt für Schritt arbeiten:
1. Erstmal soll er verstehen was du willst, sag ihm was du erreichen willst und gib im möglichst viele Infos über die Rahmenbedingungen. (z.B. auch die Hardware.)
2. Dann lass dir dazu mehrere mögliche Lösungsansätze vorschlagen und wähle einen aus, der dir geeignet vorkommt. (Gegebenenfalls Rückfragen und erklären/bewerten lassen.)
3. Dann erst eine Lösung umsetzen lassen. (z.B. in deinem Fall ein kleines Script erstellen). Lass dir am besten seine Lösung von ihm erklären, das reduziert teilweise nochmal die Fehler.
4. Verbleibende Fehler schickst du ihm und lässt sie ihn nacheinander beheben.

Tipp: Die meisten KI-Chatbots können mittlerweile auch im Netz suchen. Das kann teilweise sehr hilfreich sein um genauere und aktuellere Infos mit einfließen zu lassen. Gerade bei allem was mit Code und Software zu tun hat, spucken die Chatbots teilweise gerne mal uralte, mittlerweile inkompatible Dinge aus, weil in ihren Trainingsdaten eben auch irgendwelche zig-Jahre alten Kommentare von Foren/Reddit/Stackoverflow usw. sind und er keinen zeitlichen Bezug dazu hat.
 
  • Gefällt mir
Reaktionen: col
Leider lügt ChatGPT wie gedruckt.
Die meisten Optionen die er empfiehlt hat er sich zusammenhalluziniert oder gelten nicht für qsv-av1 sondern qsv-hevc oder qsv-avc.
Dann empfiehlt er Optionen die es vielleicht bei rigayas qsvencc encoder gibt für ffmpeg.

Anders gesagt hätte ich es mit ChatGPT hinbekommen würde ich nicht bei menschlicher Schwarmintelligenz nachfragen sondern bei der künstlichen bleiben. :)
 
@ bul

Das Problem sind nicht ChatGPT & Co, die können letztlich nur wiedergeben, was sie im Inet finden.

Das Problem ist das Fehlen von vollständiger und fehlerfreier Dokumentation.

Für den av1_qsv kann man auch Optionen verwenden, die für h264_qsv gelten, aber in der FFmpeg Doku bei av1_qsv nicht aufgeführt sind.

Siehe Abschnitt
"9.29 QSV Encoders"
"The family of Intel QuickSync Video encoders (MPEG-2, H.264, HEVC, JPEG/MJPEG, VP9, AV1)"
in der FFmpeg Codecs Documentation:
https://www.ffmpeg.org/ffmpeg-codecs.html#QSV-Encoders

Aber das wirst du bestimmt schon gelesen haben.

Man muss leider selber viel herumexperimentieren, denn viele Optionen sind einfach nur aufgelistet, ohne genau zu erklären, wie sie jeweils zu verwenden sind und was sie bewirken.
 
Ja das ist leider so. Hatte zwischenzeitlich nochmal ChatGPT behelligt.
Diesmal wurden Optionen vom libaom av1 empfohlen....

Wie dem auch sei, meine aktuelle commandline ist
ffmpeg ^
-extra_hw_frames 192 ^
-hwaccel qsv ^
-i "input.mkv" ^
-map 0 ^
-c:a copy ^
-c:s copy ^
-c:t copy ^
-c:v av1_qsv ^
-preset veryslow ^
-extbrc 1 ^
-async_depth 12 ^
-look_ahead 1 ^
-look_ahead_depth 100 ^
-bufsize 256M ^
-rc_init_occupancy 128M ^
-low_power 0 ^
-adaptive_i 1 ^
-adaptive_b 1 ^
-b_strategy 1 -bf 7 ^
-global_quality 23 ^
-g 300 ^
-loglevel verbose ^
output.mkv

Damit bin ich soweit erstmal zufrieden, denn ich wüßte nicht wie ich da noch die Grafikkarte mehr quälen könnte um noch mehr rauszuholen.

Was ansonsten auch nahezu nirgendwo steht, ist dass man mittels -extra_hw_frames vram reservieren muss, damit der encoder bei look_ahead_depth mehr als 8 frames verarbeiten kann. ...
 
Zuletzt bearbeitet:
Ja danke. Da hatte ich mir bereits ein paar Einstellungen rausgeklaut....
Ich denke viel mehr wird nicht mehr drin sein. Die Werte die ich mit diesen Einstellungen erreiche sind schon echt gut. kommen einem Softwareencoder mit guten bis mittleren presets schon sehr nahe, aber halt zigfach schneller:
-global_quality 20 -> psnr 50.5219
-global_quality 22 -> psnr 49.9279
-global_quality 23 -> psnr 49.5626

und das bei einer Bitrate von um die 5.000-5500 kb/s
 
Ich habe deine FFmpeg Optionen mal mit drei Dateien ausprobiert. Diese Dateien sind 0,5 bis 4GB große 720p TV-Aufnahmen und haben eine Bitrate von etwa 12-13 MBit/s.

Dabei ist mir folgendes aufgefallen:

(1) Die resultierenden Bitraten können bei der Verwendung deiner Optionen recht unterschiedlich ausfallen: 1804, 4115 und 5244 kbits/s.

(2) Die Codierung dauert bei mir (Intel Ultra 7 265K iGPU) mit deinen Optionen fast doppelt (ca 1.8 mal) so lange, als wenn ich nur eine simple Bitraten Option verwende wie
.\ffmpeg -hwaccel_output_format qsv -i input.mp4 -c:v av1_qsv -b:v 4000k -c:a aac -b:a 128k -ac 2 -ar 48000 -y output.mp4

(3) Ich tue mich wirklich schwer deutliche visuelle Unterschiede zu erkennen zwischen deinen Optionen, die du dir mühsam erarbeitet hast, und der simplen Bitraten Option. Mag sein, dass sich das bei anderen Dateien oder einem anderen Environmant anders verhält.
 
  • Gefällt mir
Reaktionen: bul
Vielen Dank für den Test und deine Einschätzung.
Die Encodingdauer ist in meinem Fall egal, und Stromverbrauch auch, zumindest tagsüber wegen Solar.
Meine A750 mit 8GB vram schafft 74 Frames/Sekunde mit dieser commandline beim Transcoding von 4k. Das reicht mir.
Auch wenn es eher theoretischer Natur sein mag, ich wollte halt das Maximum aus der Graka herausholen und sie maximal "quälen", zwecks Archivierung.
Dies ist mir - glaube ich - gelungen, denn mit meinen Settings erreiche ich echt super Werte beim Resultat:
Unbenannt.PNG
Ich werde für die endgültige Conversion nochmal den async depth auf 24 hochgesetzen und dann wahrscheinlich global_quality 22 nutzen.

Zu 3)
Ja du hast recht, die berechneten PSNR, SSIM und VMAF Werte sind wie die (künstlichen) Benchmarks von PCs oder Grafikkarten. Am Ende zählt was hinten rauskommt. Wobei VMAF eigentlich die Wahrnehmung berücksichtigen soll.
Trotzdem würde es mich mal interessieren wie diese Werte bei denen Encodes aussehen? Ich habe hier ffmetrics benutzt um diese Werte berechnen zu lassen. Das ist Opensource und braucht nur ein aktuelles ffmpeg (z.B. von gyandev)

Vielleicht macht es bei extrem niedrigen Bitraten ja den großen visuellen Unterschied? Zumindest schreibt einer, der 1000kb/s Bitrate nutzt, folgendes:
Typically I run VBR, but this settings halved the encoding speed while giving a much better quality.
[...]
Forcing ExtBRC to use the new EncTools by setting -extbrc 1 -look_ahead_depth 40 (or any value above 1) seems to be what helps with quality on QSV AV1.
https://forum.level1techs.com/t/ffmpeg-av1-encoding-using-intel-arc-gpu-tips/205120/2
 
Zuletzt bearbeitet:
Ich habe die psnr-Werte (bul_Options vs Simple Bitrate Option) meiner 3 Test-TV-Aufnahmen mal verglichen mit -lavfi:

.\ffmpeg.exe -i input_transcoded.mp4 -i input_original.mp4 -lavfi psnr=stats_file=psnr_output_logfile.txt -f null -

Es zeigt sich, dass die durchschnittlichen psnr_avg Werte kaum voneinander abweichen.

================
mit bul_Optionen:

Datei_1: psnr_avg: 43,68
Datei_2: psnr_avg: 47,73
Datei_3: psnr_avg: 44,15

================
mit simpler Bitrate Option:

Datei_1: psnr_avg: 43,70
Datei_2: psnr_avg: 48,16
Datei_3: psnr_avg: 44,29

Bei den Einstellungen, die als Resultat Dateien erzeugen, die ursprünglich ca 12 MBit/s und nach der Recodierung ca 5 MBit/s haben, kann ich mit bloßem Auge praktisch keine Unterschiede erkennen. Auch die mit lavfi ermittelten psnr_avg sind so gut wie gleich.

Möglicherweise kommt der Aufwand zusätzlicher Optionen eher zum Tragen, wenn die recodierten Dateien deutlicher geringere Bitraten haben. Vielleicht kann man dann mit den zusätzlichen Optionen doch noch mehr "herausholen" als mit der simplen Bitraten Option.
 
col schrieb:
Vielleicht kann man dann mit den zusätzlichen Optionen doch noch mehr "herausholen" als mit der simplen Bitraten Option.
Ja das denke ich auch.
Die ganze Rechenleistung wird ja wohl hoffentlich nicht für die Katz sein. :D:D
 
Zurück
Oben