Ich habe eine WMV-Datei (Version 9 (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 - die Auflösung, die Bildwiederholfrequenz und das 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 wirklich 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.
Philips 42PFL3606H/58
, ich codiere auf H.264 mitffmpeg -i "in.wmv" -sws_flags lanczos+accurate_rnd -c:v libx264 -crf 20 -preset slow -profile:v baseline -level 3.0 -pix_fmt yuv420p -tune fastdecode -x264-params keyint=240:min-keyint=20 "out.mp4"
- das Profil ist das niedrigste, das ich kenne, und es werden noch mehr Optimierungen verwendet, um das Abspielen der resultierenden Datei zu einer einfacheren Aufgabe zu machen.Antworten:
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. Du benutzt 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 zum Beispiel-b:v 6000k -target pal-dvd
.Für 720p denke ich, dass du trotzdem 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 komprimierungseffizient und arbeitet bei höheren Bitraten besser.
Verwenden Sie eine bestimmte Qualitätseinstellung. Wechseln Sie
-b:v …
zu-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 spielen, kann dies die Qualität etwas verbessern, führt jedoch nicht zu großen Änderungen.
Stummer Ton
Verwenden Sie
-f lavfi -i aevalsrc=0
diese Option , um einen stummen Audiostream zu generieren. Beispielsweise:Möglicherweise müssen Sie
-target pal-dvd
den obigen Befehl ergänzen , 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 nicht der Fall ist
-c:a copy
). .Verwenden Sie einen anderen Video-Codec
Ich bin überrascht, dass ein Fernseher, der Videodateien wiedergibt, MPEG-2 liest, aber sonst nichts. Es sollte mindestens MPEG-4 Part II Video unterstützt werden (das ist, was Sie als "DivX" - ein MPEG-4 Part II Encoder - kennen). Sie könnten also versuchen:
Ihr Fernseher unterstützt möglicherweise auch H.264, jedoch nur ein bestimmtes Profil. Versuchen Sie es mit dem
baseline
Profil, zum Beispiel:Im obigen Beispiel habe ich die CRF-Option verwendet, um die Qualität festzulegen, anstatt
qscale
. Weitere Informationen finden Sie im Handbuch zur H.264-Codierung .quelle
ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libxvid -qscale:v 2 -c:a libmp3lame "out.mp4"
) - sie codiert ungefähr 100 Frames und fängt dann an, den Bildschirm mit Fehlern wie[mpeg @ 02f69ba0] buffer underflow i=0 bufi=235538 size=239761
und zu überfluten[mpeg @ 02f69ba0] packet too large, ignoring buffer limits to mux it
.-b:v
. Fügte es meiner Antwort hinzu. Zu den Encoder-Einstellungen: Sie können nicht jeden Frame zu einem B-Frame machen. Außerdem benötigen Sie eine Bewegungsschätzung - je vollständiger die Methode ist, desto besser ist die Komprimierung. Wenn es sich jedoch um ein dynamisches Video handelt, sollten Sie zunächst die Bitrate deutlich erhöhen. Die Kodierungseinstellungen haben wirklich keine großen Auswirkungen. Sind Sie sicher, dass dies der Fehler für den richtigen Befehl ist? Ein[mpeg]
Fehler kann nur auftreten, wenn Ihre Ausgabedatei vorhanden ist.mpg
, nicht, wenn dies der Fall ist.mp4
.ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v mpeg2video -qscale:v 2 -c:a libmp3lame "out.mpg"
natürlich.-target pal-dvd
löst das Problem,-bufsize
funktioniert nicht (ich habe es versucht-b:v 7M -bufsize 7M -maxrate 7M
).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.
Dies funktioniert jedoch nicht für Sie, da Sie den mpg-Container verwenden, und Sie können es versuchen. (Mp3-Container)
Es schien für mich zu funktionieren.
quelle