Ich wollte das jetzt mehrmals können, also frage ich.
Wenn ich eine vorhandene Video- oder Audiodatei, ffmpeg
, mplayer
und andere Spieler - Medien können zumindest erkennen einige seiner „EIGENSCHAFTEN , “ wie Container, Codec und Bitrate verwendet, wahrscheinlich verschiedene Qualität und Codieren spezifische Einstellungen etc.
Wie kann ich diese Einstellungen aus einer vorhandenen Datei extrahieren, um sie (direkt) für die Codierung mit ffmpeg zu verwenden?
Zum Beispiel habe ich ein mkv
Video x264
mit einigen Einstellungen und eine andere unkomprimierte avi
Datei codiert bekommen . Ich möchte die Kodierungseinstellungen, die in der x264 mkv-Datei verwendet werden, "kopieren", um die AVI-Datei mit denselben Einstellungen zu transkodieren .
Hinweis: Ich suche nach einer Möglichkeit, die keine menschliche Arbeit mit dem "Übersetzen" der Einstellungen von einem Decoder in den Encoder beinhalten sollte. Es ist in Ordnung, wenn ich die Einstellungen zuerst extrahieren und irgendwo speichern muss, aber ich möchte die Leseoptionen einfach in eine Befehlszeile oder eine | voreingestellte Konfigurationsdatei für ffmpeg übertragen können.
ffprobe
(insbesondere mit den Optionen-show_streams
und-show_format
) und diese Informationen verwenden, um die wichtigen-crf
wird generell empfohlen, diese Option zu verwenden. Weitere Informationen finden Sie im FFmpeg- und x264-Codierungshandbuch .channels:6
aus einer Videodatei lesen , aber um sie zu codieren, müssten Sie den Schalter verwenden-ch:6
. Einige Schalter verwenden einen Buchstaben, andere zwei usw.Antworten:
Es gibt keine automatische Möglichkeit, dies zu tun. Sie müssen sich die Parameter der Originaldatei ansehen und sie auf die Ausgabedatei anwenden.
In den meisten Fällen sind dies die folgenden:
-filter:v scale
oder-s:v
-filter:v fps
-r
-pix_fmt
(z. B.-pix_fmt yuv420p
sollte Ihnen die beste Kompatibilität bieten)-g
Aber selbst wenn Sie das in Ordnung bringen, benötigen einige Geräte möglicherweise spezielle, proprietäre Informationen, die in den Bitstream eingebettet sind.
Was die spezifische Aufgabe der Verwendung betrifft
x264
, wird dies nicht trivial sein. Mir ist kein einziges Skript bekannt, das diese Aufgaben erledigt, die normalerweise manuell ausgeführt werden. Für die meisten Informationen zu den Kodierungseinstellungen können Sie unter Unix / Linux oder OS Xmediainfo
einige Bash-Tricks verwenden.Beispiel für ein x264-codiertes Video in einer MP4-Datei:
Dies gibt eine Liste von x264-Optionen aus:
Sie können diese Optionen dann manuell an die x264-Binärdatei übergeben.
Wenn Sie FFmpeg durchlaufen, ist das allerdings etwas komplizierter, da nicht alle x264-Optionen so zugeordnet werden können oder sollten. Beachten Sie, dass eine einfache Voreinstellung, Melodie- und Profilspezifikation oftmals ebenfalls ausreicht (wie in
x264 --fullhelp
und im x264-Codierungshandbuch zu sehen ). Die Angabe des CRF-Pegels ist ausreichend.Dabei geht es nicht einmal um Audio, bei dem es zum Glück nicht so viele Optionen gibt.
quelle
mediainfo
Ausgabe verwenden und diese Optionen mit ffmpeg abbilden-x264-params
. (Siehe auch die x264-Codierungsanleitung ). Wenn Sie jedoch eine allgemeine Lösung für alle Arten von Codecs / Codierern oder Containerformaten suchen, müssen Sie ein mäßig komplexes Skript schreiben, das die Konvertierung ausführt.