Ich möchte FFmpeg in der Mac-Terminal-Befehlszeile verwenden, um eine .WMV-Datei zu konvertieren. Die Syntax ist mir bekannt:
ffmpeg -i /path/OriginalMovieFile.wmv /path/NewMovieFile.???
Mein letzter Versuch, eine 38-MB-WMV-Datei in eine .MP4-Datei zu konvertieren, führte jedoch zu einer 800-MB-Datei, die nicht abgespielt werden konnte. Vielleicht ist in meiner obigen Syntax ein Fehler. Oder vielleicht muss ich ein spezielles Paket für den Umgang mit .WMV installieren.
Wie kann ich .WMV-Dateien mit FFmpeg von der Mac-Terminal-Befehlszeile konvertieren?
wmv wird von ffmpeg oft als 90k FPS erkannt. (Das ist ein Platzhalterwert, da der Demuxer nicht sofort in den Stream schaut, um die Intervalle zwischen den ersten Frames zu sehen).
Die Standardeinstellung von ffmpeg für die mp4-Ausgabe ist der CFR-Modus, bei dem Frames hart dupliziert werden, um die Framerate zu erhöhen (in diesem Fall auf 90000 FPS). Selbst die effizientesten Codecs benötigen ein paar Bytes, um einen Frame zu codieren, der ein exaktes Duplikat des vorherigen ist.
-vsync vfr
(dasselbe wie -vsync 2
) in der Befehlszeile sollte das Problem beheben (indem ffmpeg keine Frames löschen oder duplizieren lässt, sondern stattdessen nur die Eingabezeitstempel für die Ausgabeframes verwendet). Es kommt nach der Eingabedatei, aber vor der Ausgabedatei, da es sich um eine Ausgabeoption handelt.
Ansonsten finden Sie unter https://trac.ffmpeg.org/wiki/Encode/H.264 zum Beispiel, wie Sie Einstellungen auswählen, die für das, was Sie tun, geeignet sind. (z. B. -preset veryslow
um viel CPU-Zeit für eine einmalige Codierungsaufgabe aufzuwenden, bei der der Qualitätsgewinn pro Dateigröße viele Male davon profitiert.)
mplayer
früher wurden die fps von wmv-Dateien als 90k angezeigt. Tatsächlich glaube ich, dass ich so etwas mit mp4-Ausgabe und einer tatsächlichen VFR-mp4-Eingabe gesehen habe. Welches Ausgabeformat verwenden Sie, wenn Sie aus einer WMV-Quelle codieren? Der Standardwert von ffmpeg für die meisten Muxer ist -vsync vfr
, wurde aber -vsync cfr
für mp4 als Problemumgehung für einige Fehler geändert, die in einem Eckfall auftreten können. zu 1) : Diese Ausgabedatei ist wahrscheinlich nicht annähernd Level 5.2, wenn meine Theorie stimmt. Wenn ffmpeg / x264 es als solches kennzeichnen, ist das ein Fehler.Beide avconv
und ffmpeg
leiden unter den schlecht gewählten Standardeinstellungen für jeden Container und Codec. Daher sollten Sie den Befehl nicht einfach in dem von Ihnen vorgestellten Format geben, sondern ihm auch sagen, was zu tun ist.
Ich verwende avconv
, aber wenn Sie es immer noch verwenden, ffmpeg
ist das Format ziemlich ähnlich, also sollten Sie folgen können.
Sie müssen die Audioeinstellungen angeben. In vielen Fällen möchten Sie Ihr Audio kopieren, ohne es tatsächlich neu zu codieren. Dies geschieht über -c:a copy
. Zum Beispiel:
avconv -i video.wmv -c:a copy (...) video.mkv
Dies war keine vollständige Linie, also versuchen Sie es noch nicht.
Sie können Ihr Audio auch neu codieren, in diesem Fall sollten Sie lieber copy
den Namen des Codecs verwenden (oder aus irgendeinem Grund oft die Bibliothek, die die Codierung durchführt). Sie können zum Beispiel schreiben:
avconv -i video.wmv -c:a libvorbis (...) video.mkv
Dies führt jedoch zu keinen guten Ergebnissen, da wir keine Parameter für die Audiokonvertierung angegeben haben. Lassen Sie uns einfach eine Qualitätseinstellung vornehmen, und dann sind wir mit Audio fertig:
avconv -i video.wmv -c:a libvorbis -q:a 3 (...) video.mkv
Jetzt das Video. Das können wir oft auch einfach kopieren, aber das ist selten das, was wir wollen. Wenn Sie die Datei nur remuxen möchten (d.h. Sie möchten das Format ändern, aber nicht die Codecs), können Sie Folgendes tun:
avconv -i video.wmv -c:a copy -c:v copy video.mkv
Wie Sie sehen, haben wir sowohl Video als auch Audio kopiert und in die neue Datei im Matroska-Format eingefügt. Diese Befehlszeile funktioniert bereits, und Sie können es versuchen.
Sie sollten bedenken, dass nicht jedes Format jeden möglichen Codec verarbeiten kann, einige von ihnen sind wählerischer als andere.
Angenommen, Sie möchten das Video jetzt in etwas umcodieren. Persönlich bevorzuge ich libtheora, da es sich um einen kostenlosen Codec handelt, aber Sie können andere Vorlieben haben. Ich lasse Sie selbst entscheiden, welche Sie verwenden.
Wir können also so etwas haben:
avconv -i video.wmv -c:a copy -c:v libtheora -q:v 8 video.mkv
Dort habe ich darum gebeten avconv
, das Audio zu kopieren, aber das Video mit der Bibliothek libtheora
und Videoqualität von 8 neu zu codieren. Das Ganze wird in video.mkv gespeichert, was bedeutet, dass es eine Matroska-Datei ist.
Sie können mit den Einstellungen herumspielen, aber Sie sollten sehr selten Standardvoreinstellungen verwenden. Und denken Sie daran, dass selbst wenn das Dateiformat für die Ausgabe dasselbe ist wie für die Eingabe, avconv
es standardmäßig neu codiert wird. Wenn Sie Streams kopieren möchten, sollten Sie dies manuell angeben.
Logan
-t
, ob eine kurze Kodierung ausreicht, um das Problem zu erklären.