Ist es möglich, den QP von H.264 zu erhöhen, ohne das Video vollständig neu zu codieren?

Ist es möglich, die H.264-Videoqualität und -Bitrate zu verringern, ohne sie vollständig zu decodieren und zu codieren?

Gibt es H.264-spezifische Algorithmen, die ein Video mit höherem QP basierend auf codiertem Video mit niedrigerem QP erstellen können?

Welche Konvertierungen sind allgemein für H.264-Inhalte verfügbar? Gibt es ein Tool für verlustfreie Konvertierungen wie jpegtranfür JPEG?

Antworten (1)

Eine ähnliche Frage kam schon einmal auf . Ich habe etwas Ähnliches in meiner Antwort dort gepostet.

Ist es möglich, die H.264-Videoqualität und -Bitrate zu verringern, ohne sie vollständig zu decodieren und zu codieren?

H.264 B- und P-Makroblock-Referenzframes, die bereits vom Deblocking-Filter verarbeitet wurden. Die Deblocking-Stärke ist adaptiv an den QP. Ich bin mir nicht sicher, aber ich denke, dies würde zu Problemen führen, wenn Sie nur die DCT-Koeffizienten neu quantisieren würden. Auf jeden Fall denke ich, dass es nur ein Speed-Hack wäre, der eine schlechtere Qualität liefert als die vollständige Decodierung + Codierung. Und mir sind keine Implementierungen bekannt.

Niemand hat auch nur einen Bitstream-Filter implementiert, um h.264 Baseline verlustfrei in CABAC umzuwandeln. :( Es wurde aber darüber gesprochen .

Dieses Dokument enthält jedoch eine Implementierung, die h.264 teilweise dekodiert, modifiziert (zum Ausblenden von Daten) und neu kodiert. IDK, mit welcher Software er für die Implementierung begonnen hat, aber sein Code, sofern verfügbar und entsprechend lizenziert, könnte ein guter Ausgangspunkt für andere Bitstream-Filter sein.

Welche Konvertierungen sind allgemein für H.264-Inhalte verfügbar? Gibt es ein Tool für verlustfreie Konvertierungen wie jpegtran für JPEG?

jpegtranfunktioniert nur, weil jeder DCT-Koeffizientenblock völlig unabhängig von allen anderen ist. Sogar h.264-I-Frames werden von anderen Blöcken innerhalb desselben Frames vorhergesagt. (Intra-Vorhersage im Gegensatz zu Inter-Vorhersage in P- und B-Makroblöcken). Verlustfreies Drehen oder Spiegeln ist wahrscheinlich nicht möglich.

(Obwohl Telefonkameras beispielsweise nur mit Metadaten angeben können, dass der Player das Video bei der Wiedergabe drehen soll, wenn sie während der Videoaufnahme vertikal gehalten werden.)

ffmpeg hat einen Bitstream-Filter für h.264, der etwas dazu beiträgt, wie der h.264-Stream gespeichert wird, oder vielleicht etwas über die Header? IDK, ich musste es nicht benutzen oder nachlesen. Aus den Dokumenten:
ffmpeg -i h264.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264

Das ist jedoch nicht das, was Sie fragen.

h264_mp4toannexbist ziemlich einfach, es konvertiert einfach Einheiten mit Längenpräfix in Einheiten mit 00 00 00 01-Präfix und speichert Header im Stream.