Warum erhöht ffmpeg die Dateigröße?

661
karpo518

Ich versuche, das Video in derselben Qualität im gleichen Format zu kodieren, aber die Ausgabedatei ist um ein Vielfaches größer als die Eingabedatei. Warum passiert es? Ich möchte die Kodierungsfehler beheben, aber ich kann es nicht tun, ohne an Qualität zu verlieren oder die Dateigröße zu erhöhen. Wie kodiere ich mp4-Video, ohne an Qualität zu verlieren und die Größe des Linux-Terminals zu erhöhen?

Ich möchte das Video für die Online-Anzeige auf meiner Website verwenden. Ich benutze den Aufruf von ffmpeg unten

ffmpeg input.mp4 -c:v libx264 -preset placebo -crf 0 -c:a aac -movflags faststart output.mp4 

PS Ich werde hier ein Beispiel für Fehler hinzufügen. Auch wenn ich hier bin, möchte ich verstehen, warum ffmpeg meine Dateien erhöht. Ich begegne dem regelmäßig. Das ist die Hauptfrage.

[h264 @ 0x56524c25dea0] Invalid NAL unit 0, skipping. [h264 @ 0x56524c25dea0] error while decoding MB 32 2, bytestream -7 [h264 @ 0x56524c216260] Invalid NAL unit 0, skipping. [h264 @ 0x56524c216260] error while decoding MB 46 16, bytestream -5 [h264 @ 0x56524c25dea0] Invalid NAL unit 8, skipping. [h264 @ 0x56524c25dea0] error while decoding MB 36 1, bytestream -13 [aac @ 0x56524c1e6ea0] Number of bands (57) exceeds limit (44). Error while decoding stream #0:1: Invalid data found when processing input [aac @ 0x56524c1e6ea0] channel element 3.10 is not allocated Error while decoding stream #0:1: Invalid data found when processing input ... [aac @ 0x56524c1e6ea0] Number of bands (48) exceeds limit (44). Error while decoding stream #0:1: Invalid data found when processing input [aac @ 0x56524c1e6ea0] Error decoding AAC frame header. Error while decoding stream #0:1: Error number -50531338 occurred [aac @ 0x56524c1e6ea0] Input buffer exhausted before END element found Error while decoding stream #0:1: Invalid data found when processing input [aac @ 0x56524c1e6ea0] decode_pce: Input buffer exhausted before END element found Error while decoding stream #0:1: Invalid data found when processing input [null @ 0x56524c1e7d20] Application provided invalid, non monotonically increasing dts to muxer in stream 1: 12351488 >= 12350464 [null @ 0x56524c1e7d20] Application provided invalid, non monotonically increasing dts to muxer in stream 1: 12351488 >= 12351488 
0
Was sind die "Codierungsfehler", die Sie beheben möchten? Wenn die Größe am wichtigsten ist, warum nicht einfach so belassen oder die Qualität verringern oder verkleinern? Xen2050 vor 6 Jahren 1
Ich habe es hinzugefügt. Dann habe ich zwei Fragen: 1. Warum erhöht ffmpeg die Dateigröße für alle Fälle mit gleicher Qualität? 2. Wie kann ich Fehler in meinem Fall beheben? Wenn ich eine Datei von einem Format in ein anderes codiere, bekomme ich einen Nebeneffekt in Form von Qualitätsverlust oder Vergrößerung. Ich kann diese Tatsache akzeptieren. Aber! Wenn ich eine Datei im gleichen Format in ihrer ursprünglichen Qualität codiere, erhöht sich die Größe. Was ist das für ein Trick? ffmpeg sagt, hier ist die gleiche Datei, aber größer, da man nichts zu besetzen hat. Das ist nicht normal! karpo518 vor 6 Jahren 0
Fügen Sie Ihrer Frage nicht Ihre eigentliche Frage in Kommentaren hinzu. Wenn Sie das Format ändern, wird erwartet, dass sich etwas ändert, da Sie wahrscheinlich eine Datei neu codieren müssen. Überprüfen Sie die Eigenschaften beider Dateien, um zu überprüfen, wann sie tatsächlich gleich sind. Seth vor 6 Jahren 0

1 Antwort auf die Frage

2
adenzila

Warum ist das neu codierte Video um ein Vielfaches größer als die Eingabedatei?

Sie erzwingen, dass der Encoder eine verlustfreie Videoqualität mit verwendet -crf 0. Dies führt dazu, dass Ihr Ausgangsvideo viel größer ist als der Eingang (vorausgesetzt, Ihr Eingangsvideo ist mit einer verlustbehafteten Einstellung codiert).

Die verlustfreie Einstellung begrenzt die Kompressionsfähigkeit des Encoders stark. Einfach ausgedrückt: Die hohe Kompressionsleistung, die von den meisten Videocodecs wie x264 erzielt wird, ist die verlustbehaftete Videocodierung, bei der versucht wird, die "Wahrnehmungsqualität" beizubehalten und gleichzeitig unwahrscheinliche Daten zu beseitigen.

Wie kodiere ich mp4-Videos, ohne an Qualität zu verlieren und die Dateigröße zu erhöhen?

Aufgrund der verlustbehafteten Kodierung ist es buchstäblich unmöglich, ein zuvor verlustbehaftetes kodiertes Video ohne Qualitätsverlust neu zu kodieren, es sei denn, Sie verwenden eine verlustfreie Einstellung, durch die die Dateigröße zunimmt.

Sie können stattdessen mit verschiedenen -crfWerten experimentieren, um zu sehen, welche Qualität / Dateigröße Sie für Ihr Ausgabevideo erhalten. Bei verlustbehafteter Kodierung ist es immer ein Kompromiss zwischen Qualität und Dateigröße. Sie können bis zu kodieren Bitratensteuerung lesen Sie hier .