Was passiert, wenn Sie einen bestimmten CRF-Wert für ein bereits codiertes x264-Video verwenden?

Wenn es ein h.264-Video gibt und ich -crf 17 verwende, bekomme ich manchmal eine niedrigere Bitrate, aber das Seltsame ist - meistens bekomme ich eine höhere.

Ich versuche, diese Einstellung zu bekommen, weil ich denke, dass einige meiner Videos eine höhere als die benötigte Bitrate haben und ich keinen Weg gefunden habe (wenn es überhaupt möglich ist), zu bestimmen, was der am besten geeignete Weg ist, dies zu tun und vielleicht zu spielen mit CRF wird mir überhaupt nicht helfen, aber ich habe mich gefragt, was eigentlich passiert, wenn Sie zum Beispiel nicht mit libx264 codieren, sondern tatsächlich CRF-Werte für eine x264-Datei verwenden?

Die Bitrate hängt von der Komplexität des Videos ab. Bei zwei Videos mit derselben Auflösung und Framerate ergibt die Verwendung desselben CRF eine höhere Bitrate für das Video mit mehr Komplexität.
Aber was passiert eigentlich, wenn ich crf -17 gebe und das neue Video größer ist als das ältere?

Antworten (1)

Beim Decodieren einer Datei versucht der Decoder, das Quellmaterial mit den in der Datei bereitgestellten Informationen wiederherzustellen. Aber es kann keine 100-prozentig genaue Darstellung sein, also erstellt der Decoder neue Pixel, die Schätzungen dessen sind, was in der Quelle enthalten war

Wenn Sie zum zweiten Mal mit CRF 17 codieren, weiß der Encoder nicht, dass diese neuen Pixel vom Decoder generiert wurden und nicht unbedingt dem Originalmaterial entsprechen. Aber der Encoder tut immer noch seine Arbeit und versucht, diese neuen Werte genau zu codieren.

Es gibt also Bits für die Codierung von Pixeln aus, die weggeworfen und durch die erste Codierung neu erstellt wurden, wodurch die Datei größer wird.

Die Semantik Ihrer Antwort scheint seltsam. Es suggeriert, dass der Encoder eine perfekte Darstellung der Quelle speichert, aber der Decoder versucht und versagt, ein Duplikat dieser Darstellung wiederherzustellen. Stattdessen findet die Informationsbegrenzung in der Codierungsphase statt, basierend auf dem Codiererdesign und den Beschränkungen der Ratensteuerung. Von Decodern für moderne Codecs wird erwartet, dass sie eine bitgenaue Ausgabe erzeugen (Rundungsfehler können aufgrund von Architekturbeschränkungen sowie des Überspringens von Deblocking usw. immer noch möglich sein).
Ich verstehe Ihre Logik, aber in diesem Zusammenhang beziehe ich mich auf den Encoder-Ausgang als Decoder. Ich habe es vereinfacht, weil ich davon ausgegangen bin, dass das Poster die Nuancen nicht kennt und versucht hat, so genau wie möglich hilfreich zu sein. Die Decoderausgabe ist über Implementierungen hinweg bitgenau. Aber mein Beitrag ist im Grunde richtig, wenn zwischen räumlichen und zeitlichen Domänen hin- und hergefahren wird, und nach Quantisierung und Schleifenfiltern werden neue visuelle Informationen impliziert, die nicht Teil der Referenz waren.