So geben Sie CRF-Qualitätseinstellungen für verschiedene Codierungssoftware an

Gibt es eine Möglichkeit, eine Qualitätseinstellung für h.264 festzulegen, die nicht softwareabhängig ist?

Ich versuche, einem Kollegen dabei zu helfen, eine Spezifikation für externe Auftragnehmer zu erstellen, wenn sie uns Videos zur Verwendung auf unserer Website als h.264-komprimierte mp4-Dateien liefern. Wir können eine Bitrate angeben, aber das funktioniert nicht so gut, wenn wir eine Komprimierung mit variabler Bitrate / konstanter Qualität (CRF) wollen.

Wenn ich wüsste, dass sie libx264 verwenden würden, um die Komprimierung durchzuführen, könnte ich ihnen einen Bereich für die -crfEinstellung geben, aber sie werden alle Arten von Software verwenden, um die Komprimierung durchzuführen. Wie kann ich also Qualität angeben, außer indem ich etwas Vages wie "visuell verlustfrei" oder "gute Qualität" sage?

Können Sie für VBR nicht sowohl die durchschnittliche Bitrate als auch die Qualitätsstufe (im Wesentlichen die minimale Bitrate) angeben? Wenn Sie ein bestimmtes Ziel erreichen müssen, müssen Sie möglicherweise CBR verwenden.
Das wird eine Herausforderung, da nicht alle Encoder gleich sind und selbst "Videoprofis" nicht immer wissen, was sie tun, sodass Ihre Ergebnisse wahrscheinlich stark variieren werden. Können Sie ein verlustfreies (oder verlustbehaftetes) Zwischenformat in akzeptabler Qualität verlangen und nach Ihren Vorgaben neu codieren?
Das habe ich vorgeschlagen. Ich musste noch nie einen Auftragnehmer kontaktieren, um ihn dazu zu bringen, mir eine mp4-Datei zu liefern, weil ich nur ein ProRes-Master habe, aber das Gegenteil ist ziemlich üblich.
Aber würde die Angabe eines Profils + Niveaus als akademische Übung ausreichen? Normalerweise codiere ich das Hauptprofil aus Kompatibilitätsgründen, könnte ich Level 3 oder höher angeben?
Es hängt von den Geräten ab, die Sie unterstützen möchten, ob das Video direkt vom Auftragnehmer zum Kunden gesendet wird, und je nach gewähltem Pegel und Ausgabeparametern können Pegelgrenzen auftreten (Beispiel. Siehe die Warnungen in: ffmpeg -f lavfi -i testsrc=s=hd720:d=5,format=yuv420p -c:v libx264 -level 3 output.mp4)
Profil und Level verwende ich explizit nur, wenn das Wiedergabegerät es erfordert. Ansonsten lasse ich einfach x264wählen.
Profil und Level wären die gleichen wie bei der Angabe einer Bitrate, mit zusätzlichen Einschränkungen für Rez/fps und Ref-Frames. Bringen Sie die Leute aus Liebe zur Wissenschaft dazu, High Profile zu verwenden, es sei denn, Sie möchten tatsächlich, dass die Videos auf beschissenen alten Telefonen oder anderen Hardware-Playern abgespielt werden. 8x8dct hilft sehr, insb. bei HD rez. (Bei sehr hohen Bitraten hilft es wahrscheinlich weniger, also verliert es bei Mastern mit sehr, sehr hoher Bitrate vielleicht nicht so viel Qualität.)
Außerdem ist Level nur eine Obergrenze für die Bitrate. Das Festlegen eines Level-Limits für x264 stellt nur sicher, dass es nicht überschritten wird; Es sagt ihm nicht, dass Sie die Bitrate innerhalb dieses Levels so weit wie möglich maximieren möchten. Ich gehe davon aus, dass andere Encoder eine von Qualitäts-/Bitratenzielen getrennte Pegeleinstellung haben würden.

Antworten (1)

Jeder anständige Encoder kann eine Zielbitrate erreichen (mit 2pass), aber die Bits trotzdem intelligent ausgeben, um eine ähnliche Qualität in der gesamten Datei zu erreichen. x264 2pass ermittelt, welche CRF die gewünschte Bitrate ergibt (pass1) und verwendet sie dann (pass2). (Quelle: Dark Shikari. Siehe die Links, die ich für meine Antwort auf diese Frage zum VBR-Streaming ausgegraben habe ).

Sie erhalten CBR nur mit x264 if vbv-maxrate= bitrate, und selbst dann kann es innerhalb der Puffergröße VBR sein. (h.264 wird niemals streng CBR wie mp3 oder so sein, es sei denn, Ihre I-Frames sehen SCHRECKLICH aus: P)

Sie meinten jedoch wahrscheinlich Variable-über-Clips und nicht die übliche Bedeutung innerhalb einer Datei, da CFR als Qualitätsziel eindeutig viel besser ist, als blind eine Zielbitrate für viele verschiedene Quellen festzulegen.

(Gibt es dafür ein Wort? Flexible Bitrate? Anders als Zielqualität im Gegensatz zu Zielbitrate. CRF zielt auf eine Heuristik für Qualität ab, nicht unbedingt auf ein Qualitätsziel.)

Wie auch immer, in diesem Fall habe ich keine Ahnung, was andere Encoder unterstützen. Lossless h.264 ist wahrscheinlich das beste Format zum Versenden von Dateien. Es ist deutlich kleiner als huffyuv oder utvideo und kann bis zu 10 Bit unterstützen. (Eigentlich denke ich, dass FFmpeg höhere Bittiefen decodieren kann, aber x264 kann nur Dateien bis zu 10 Bit produzieren.) Oder ich denke, Sie könnten sie dazu bringen, Ihnen leicht verlustbehaftete Pro-Res-Dateien zu senden, wenn dies für Ihre Arbeitsabläufe viel einfacher ist.

LordNeckBeard wirft die Frage auf, ob Sie diese Dateien direkt an Kunden liefern. Wenn das der Fall ist, sollten Sie wahrscheinlich verlangen, dass sie mit x264 mit mindestens preset=slower codieren, sodass Sie ihnen einfach einen crf-Wert geben können, wenn Sie bereits x264 benötigen. Der Kompromiss zwischen Rate und Verzerrung ist wichtig für endgültige Dateien, die Sie viele Male streamen werden.

Oh, ein Encoder-unabhängiger Proxy für Qualität ist ein durchschnittlicher Quantisierer. Wenn sie x264 verwenden, könnten sie einfach einen CRF verwenden, der unter Ihrem erforderlichen durchschnittlichen QP liegt. (psy / AQ erhöhen beide die Quantisierer, gewinnen aber an wahrnehmbarer visueller Qualität.) x264 mit sehr geringem Subme kann bei demselben durchschnittlichen QP schlechter aussehen (aber dies wirkt sich auch auf CRF aus). Wie auch immer, wenn Sie das verlangen und sie x264 NICHT verwenden, kann es für sie unpraktisch sein, es überhaupt herauszufinden. Der h.264-Decoder von ffmpeg speichert keine Statistiken zum Drucken des durchschnittlichen QP, exportiert jedoch möglicherweise QP pro Frame, sodass Sie -vf codecview.
Wenn sie x264 nicht verwenden, könnten sie einen Zielqualitätsmodus finden, falls es einen gibt, oder vielleicht einen festen QP-Modus (der wahrscheinlich schlechterer RD wäre, aber zumindest von bekannter Qualität). Stellen Sie sicher, dass Sie Ihre Argumentation zusammen mit einer solchen Anforderung angeben. dh "durchschnittlicher QP < 14. (Verwenden Sie eine Encoder-Einstellung, die weit über visuell transparent ist, da wir dies neu kodieren werden. Für x264 wäre crf = 12 ideal.)" Solange sie den Grund für Ihre Regel kennen , werden sie wissen, dass Ihnen nicht der eigentliche QP wichtig ist, sondern die visuelle Qualität.
außerdem dient nvm codecviewzur Visualisierung von Bewegungsvektoren und showinfodruckt keine durchschnittlichen QP pro Bild. Ich habe die gesamte Liste der Videofilter von ffmpeg durchgesehen, und keiner von ihnen druckt QP-Werte :/
Danke für deine Antwort. Ich denke, die Take-Home-Botschaft ist, dass wir, wenn wir eine Qualitätskontrolle für unser Webvideo haben wollen, Auftragnehmer bitten, Master zu liefern und die Kodierung selbst vorzunehmen.
Ja, wenn Speicherplatz zum Archivieren der Master auf Ihrer Seite kein Problem ist, ist es VIEL nützlicher, sie zu haben. In Zukunft können Sie zurückgehen und Codierungen mit anderen Bitraten oder mit VP9/HEVC oder für verschiedene Streaming-Szenarien oder was auch immer sonst machen. Oder ändern Sie einfach Ihre Einstellungen für neue Kodierungen, ohne Ihre Vertragspartner bitten zu müssen, ihre Einstellungen zu aktualisieren. Wenn Sie Ihre Vertragspartner die Codierung durchführen ließen, könnten Sie sich jederzeit die x264-Einstellungszeichenfolge ansehen, die in die h.264-Zeichenfolge eingebettet ist, um sicherzustellen, dass sie ausreichend hohe Subme- und andere Einstellungen verwendet haben.