2015-08-21 6 views
8

Ich habe eine Reihe von mov/H.264-Dateien, die ich in mov/MJPEG kodieren möchte. Ich bekomme jedoch eine sehr schlechte Qualität. Hier ist, was ich versucht:ffmpeg erzeugen qualitativ hochwertigere Bilder für MJPEG Encoding

ffmpeg -i a.mov -an -crf 11 -preset slower -pix_fmt yuv420p -vcodec mjpeg -f mov -y b.mov 

Für H.264 Codierung der -crf und -preset Flaggen höherer Qualität erzeugen. Aber das scheint bei MJPEG nicht zu funktionieren.

+1

mjpeg ist nur ein Intra-Frame-Komprimierungsschema. Es betrachtet einen Frame, komprimiert ihn mit JPEG-Spezifikationen und bewegt sich dann auf dem nächsten Frame. Es macht keinen Sinn, dass es -crf hat. -crf ist ein Protokoll für ein Inter-Frame-Komprimierungsschema, bei dem der Algorithmus versucht, Speicherplatz zu sparen, indem er nach Frames sucht, um die Datenrate zu komprimieren. Ich empfehle ffmpeg Fragen zu einem video.stackexchange.com gestellt werden, weder SO noch SU. – fredsbend

Antwort

17

Verwenden -q:v

standardmäßig für MJPEG ffmpeg wird wahrscheinlich die Standardeinstellung -b:v 200k verwenden. Das war in Ordnung, als es vor mehr als 10 Jahren als Standard eingestellt wurde (ich vermute das Alter), aber nicht mehr.

Sie können stattdessen verwenden. Für MJPEG ist der effektive Bereich eine lineare Skala von 2-31, und ein niedrigerer Wert führt zu einer höheren Ausgabequalität.

Wenn Sie die Huffman-Optimierung anwenden möchten, fügen Sie -huffman optimal hinzu. Dies kann zu einer etwas kleineren Ausgabedatei führen.

Beispiel

ffmpeg -i input.mov -c:v mjpeg -q:v 3 -huffman optimal -an output.mov 

Privat Optionen

Der MJPEG-Encoder nicht -crf und -preset verwendet; Diese sind "private" options für einige Encoder. Sie können private Optionen wie folgt sehen: ffmpeg -h encoder=mjpeg.