it-swarm.com.de

Wie erstelle ich mit FFMPEG eine MPEG2-Videodatei mit der höchstmöglichen Qualität?

Ich habe eine WMV-Datei (v9 (WMV3), 960 x 720, 30.000030 fps, planares 4: 2: 0 YUV, erstellt von PowerPoint 2010) und muss sie in MPEG2 konvertieren - das einzige Format, das mein Fernseher von einem USB-Flash-Laufwerk lesen kann (Ich habe auch versucht, MP4/h.264, AVI/XVID - nichts als MPEG2 funktioniert).

Ich habe es geschafft, den Job mit einfach zu machen

ffmpeg -i "in.wmv" -c:v mpeg2video "out.mpg"

die Qualität des Ergebnisses ist jedoch furchtbar (es treten deutlich sichtbare visuelle Verzerrungen auf) und die Wiedergabe ist nicht flüssig (manchmal zu langsam).

Ich habe es auch versucht

ffmpeg -i "in.wmv" -c:v mpeg2video -pix_fmt yuv420p -me_method epzs -threads 4 -r 30.000030 -g 45 -bf 2 -trellis 2 -cmp 2 -subcmp 2 -s 960x720 -b 2500k -bt 300k -async 1 -y "out.mpg"

(Ich habe dies irgendwo im Internet gefunden und ein wenig modifiziert - Auflösung, Bildwiederholfrequenz und Ausgabeformat (von VOB auf nacktes MPG) wurden erfolgreich geändert, aber die Qualität ist immer noch zu schlecht.

Welche Parameter muss ich verwenden, um so viel Qualität wie möglich zu sparen? Die Komprimierungsrate spielt keine Rolle, auch eine Vergrößerung der Datei ist akzeptabel.

Eine andere Sache, die ich tatsächlich brauche (ich habe mich entschieden, sie nicht in den Fragentitel aufzunehmen, um zu vermeiden, dass sie zu spezifisch wird, aber ich würde es begrüßen, wenn sie in den Antworten berücksichtigt wird), ist das Hinzufügen von purer Stille als Tonspur - es ist kein Ton in der Original aber der Fernseher beschwert sich darüber und ich möchte diese Beschwerde loswerden. Ich habe mit Audacity eine OGG Vorbis-Datei mit derselben Länge (sekundengenau) erstellt, kann sie jedoch nicht mit dem Video zusammenführen:

ffmpeg -i in.mpg -i silence.ogg -c:v copy -c:a libmp3lame out.mpg

und sogar nackt

ffmpeg -i in.mpg -c:v copy -out.mpg

gibt "Buffer Underflow" und "Packet too Large" Fehler. (in.mpg sind die Dateien, die von derselben FFMPEG-Binärdatei und derselben WMV-Quelldatei mit den ersten beiden Befehlen in der Frage erstellt wurden).

Ich verwende ein Zeranoe FFMPEG-Build unter Windows 7.

13
Ivan

Das Problem ist, dass die Standard-Bitrate für MPEG-2 eher niedrig ist (wie bei den meisten anderen Video-Encodern in ffmpeg, wobei H.264 eine Ausnahme darstellt). MPEG-2 ist heutzutage auch nicht die beste Wahl als Codec.

Bessere Qualität für MPEG-2

Sie haben ein paar Optionen, wenn Sie sich an MPEG-2 halten möchten:

  • Erhöhen Sie die Bitrate. Sie verwenden jetzt -b:v 2500k. Wenn es sich um HD-Video handelt, kommen Sie mit nur 2,5 MBit/s nicht weit. Sie brauchen mindestens das Doppelte oder noch mehr, damit das Ergebnis gut aussieht. Verwenden Sie beispielsweise -b:v 6000k -target pal-dvd.

    Für 720p denke ich, dass du noch eine höhere Bitrate verwenden solltest. Denken Sie daran, dass DVDs MPEG-2 verwenden und etwa 4,7 GB für 2 Stunden Film benötigen, sodass Sie am Ende etwa 5 bis 8 MBit/s erreichen. MPEG-2 ist wirklich nicht sehr kompressionseffizient und arbeitet besser bei höheren Bitraten.

  • Verwenden Sie eine bestimmte Qualitätseinstellung. Ändern Sie -b:v … in -qscale:v 2. Die Zahl reicht hier von 1 bis 31 und höher bedeutet geringere Qualität. Es gibt keinen Grund, über 4 oder 5 hinauszugehen. Wenn Sie sich nicht für die Bitrate interessieren, beginnen Sie mit 2 und prüfen Sie, ob dies für Sie funktioniert.

Wenn Sie mit der Anzahl der B-Frames, der Bewegungsschätzungsmethode oder der GOP-Größe experimentieren, kann dies zu einer geringfügigen Qualitätsverbesserung führen, die jedoch keine großen Änderungen zur Folge hat.

Stummer Ton

Verwenden Sie -f lavfi -i aevalsrc=0, um einen stillen Audiostream zu generieren. Zum Beispiel:

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v mpeg2video -qscale:v 2 -c:a libmp3lame "out.mpg"

Möglicherweise müssen Sie dem obigen Befehl -target pal-dvd hinzufügen, um eine bestimmte Puffergröße zu erzwingen.

Ich habe MP3 als Codec gewählt. MPEG-Dateien können kein anderes Audio als MPEG Layer I- und II-Audio sowie PCM-Streams enthalten. Daher funktioniert die Verwendung einer stillen Ogg Vorbis-Datei nur, wenn Sie auch den Audio-Stream konvertieren (was bei Verwendung von -c:a copy nicht der Fall ist). ).

Verwenden Sie einen anderen Video-Codec

Ich bin überrascht, dass ein Fernseher, der Videodateien wiedergibt, MPEG-2 liest, aber sonst nichts. Mindestens MPEG-4 Part II-Video sollte unterstützt werden (das ist, was Sie als "DivX" bezeichnen - ein MPEG-4 Part II Encoder). Sie könnten also versuchen:

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libxvid -qscale:v 2 -c:a libmp3lame "out.mp4"

Ihr Fernseher unterstützt möglicherweise auch H.264, jedoch nur ein bestimmtes Profil. Versuchen Sie es mit dem Profil baseline, zum Beispiel:

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libx264 -profile:v baseline -crf 23 -c:a aac -strict experimental "out.mp4"

Im obigen Beispiel habe ich die CRF-Option verwendet, um die Qualität anstelle von qscale festzulegen. Weitere Informationen finden Sie im H.264-Codierungshandbuch .

14
slhck

Ich würde sofort sagen, wenn die Dateigröße keine Rolle spielt, experimentiere einfach mit der Erhöhung der Bitrate.

Für das stille Audio möchten Sie vielleicht nur ffmpeg verwenden. Ich weiß nicht genug über Audacity, um irgendeine Art von Kommentar abzugeben. Ich habe das schon mal benutzt.

ffmpeg.exe -f lavfi -i aevalsrc=0:0::duration=YOUR_DESIRED_DURATION -ab 10k YourAudioName.aac

Dies funktioniert jedoch nicht für Sie, da Sie den mpg-Container verwenden, und Sie können es versuchen. (Mp3-Container)

ffmpeg.exe -f lavfi -i aevalsrc=0:0::duration=YOUR_DESIRED_DURATION -ab 10k YourAudioName.mp3

Es schien für mich zu funktionieren.

0
dstob