Prores ffmpeg-Fragen

Ich versuche zu verstehen, wie man Prores Kostya mit FFmpeg verwendet, und habe dazu ein paar Fragen:

  1. Ich habe eine Panasonic G85 und eine Gopro Hero 7 schwarz, mit der ich 4k aufgenommen habe. Für 4k-Material nimmt die Panasonic mit 4:2:0 8-Bit bei 100 Mbit/s und die Gopro 8-Bit 4:2:0 mit 78 auf Mbps. Macht es vor diesem Hintergrund Sinn, ein anderes Prores-Profil als ProRes 422 LT auszuwählen? Der Grund, warum ich das sage, ist, dass das LT-Profil 102 Mb/s hat, was das Quellmaterial beider Kameras übersteigt.

  2. Ich habe gelesen, dass der Befehl qscale nicht benötigt wird und ein Benutzer einfach ein Profil auswählen kann, das eine Standardbitrate definiert (für LT sind dies 102 Mb / s). Ich habe Leute gesehen, die sagten, dass ProRes ein profilbasierter Codec ist, was bedeutet, dass, wenn Sie eines der Profile auswählen, es eine feste Komprimierungsmenge ausführt, die in der Spezifikation definiert ist. Wenn Sie eine andere Komprimierungsstufe wünschen, sollten Sie ein anderes Profil wählen, anstatt eine Qualitätseinstellung mit dem Befehl qscale zu ändern, da dies zu einer Verletzung des Standards führen und möglicherweise Wiedergabeprobleme verursachen kann (insbesondere mit Hardware-Decodern). Ist es in diesem Sinne also besser, den Befehl qscale auszulassen?

  3. Warum ist es notwendig, die anzugeben -pix_fmt, da ich dachte, dass alle 422-Profile standardmäßig auf yuv422p10le und alle 4444-Profile standardmäßig auf yuv4444p10le eingestellt sind. Warum muss dieser Wert angegeben werden?

Antworten (1)

1) Ihr Panasonic-Material ist H.264; GoPro kann H.264 oder H.265 sein. Dies sind Inter-Frame-Codecs, während ProRes ein Intra-Frame-Codec ist (jeder Frame wird eigenständig codiert und ist für die Decodierung nicht von anderen Frames abhängig). Sie sollten also eine höhere Bitrate in Betracht ziehen, um die Quellqualität aufrechtzuerhalten.

2) FFmpeg ermöglicht es Ihnen, einen benutzerdefinierten Quantisierer festzulegen, aber standardmäßig verwendet es eine feste Qualitätseinstellung pro Profil. Verwenden Sie für benutzerdefinierte Quants -global_quality N.

3) FFmpeg muss in das angegebene Pixelformat konvertieren, was die Ausgabe -pix_fmt tun wird. Der Encoder codiert nur , dh er nimmt rohe, unkomprimierte Eingangsframes auf und liefert codierte Daten.

Danke für deine Antwort. Ich möchte nur ein paar Dinge klarstellen: 1) Sie sagen, ich sollte eine höhere Bitrate in Betracht ziehen, um die Quellqualität aufrechtzuerhalten. Aber was ist ein gutes Profil, um Qualität und Dateigröße in Einklang zu bringen? Meine Aufnahmen von Panasonic und GoPro beginnen erst bei respektablen 100 Mbit/s und 78 Mbit/s. Es ist also nicht sehr hoch, um damit zu beginnen. 2) Ich verstehe den benutzerdefinierten Quantisierer, aber macht es Sinn, ihn zu verwenden? Warum verlassen Sie sich zur Vergleichbarkeit nicht einfach auf die Standardeinstellung für dieses Profil und wählen Sie ein anderes Profil, wenn Sie mehr möchten?
1) Standard verwenden. 2) Nein, Profilstandard ist in Ordnung.
Vielen Dank für die Klarstellung der Punkte 1 und 2. In Bezug auf Punkt 3, warum muss -pix_fmt angegeben werden, wenn ein ProRes 422-Profil (422 HQ, ProRess 422, ProRes 422 LT, ProRes 422 Proxy) verwendet wird, indem einfach ein 422-Profil ausgewählt wird , ist es offensichtlich, dass das Filmmaterial als 422 codiert werden soll. Daher sollte es nicht notwendig sein, ihm mitzuteilen, dass Sie einen 422-Farbraum wünschen. Genauso wie bei der Auswahl eines ProRes 444-Profils verstehe ich nicht, warum es dann notwendig ist, dem Encoder mitzuteilen, dass das Filmmaterial als 444 codiert werden soll. Dies sollte anhand des von Ihnen ausgewählten Profils offensichtlich sein. Übersehe ich etwas?
FFmpeg ist modular - pix_fmt ist für die Scaler-Bibliothek gedacht, das Profil ist eine private Anweisung an den Encoder. Der Grund dafür, dass es keine automatische Verwaltung über die Pipeline gibt, liegt darin, dass es Hunderte von Encodern und Dutzende von Scaler-Konfigurationen gibt, ganz zu schweigen von Parametern für andere Module, sodass es keinen unkomplizierten Weg gibt, dies durch „Magie“ zu erreichen.
Vielen Dank, Sie haben alle meine Fragen beantwortet. Nur eine andere Sache, da Sie sehr sachkundig zu sein scheinen - Wissen Sie, was die maximal unterstützten Bildraten sind, wenn Sie in Prores und DNxHR codieren? Ich habe gelesen, DNxHD geht nur bis 60fps. Aber was ist das Limit für Prores und DNxHR? Ist es 120fps?
@tommydog35 Avid High-Resolution Workflows Guide (p 111) zeigt nur bis zu 60 fps, ffmpegwird aber wahrscheinlich jede beliebige Rate codieren. Weitere Informationen finden Sie unter Wie konvertiere ich ein Video mit ffmpeg in das DNxHD / DNxHR-Format?
Das ist, was ich vermutete, dass ffmpeg für alle fps funktionieren würde, obwohl es nicht Teil der offiziellen Spezifikation ist. Ich weiß, dass dies bei Prores der Fall ist, würde dies also auch für DNxHR annehmen.
Eine letzte Sache - Wenn ich keine qscale für Prores einstelle und nur die Profilvorgabe verwende, wird ffmpeg dann immer noch ein Video mit einer variablen Bitrate erzeugen? Oder produziert es ein Video mit einer konstanten Bitrate?
Variable Bitrate. Es wird eine Standard-Quantisierungsmatrix verwendet, sodass die codierte Framegröße vom visuellen Inhalt abhängt.