ffmpeg - Kopieren von Codierungseinstellungen aus vorhandenen Mediendateien |

13233
n611x007

Ich wollte das jetzt mehrmals tun können, also frage ich.

Wenn ich eine Video- oder Audiodatei habe, ffmpegkönnen mplayerandere Mediaplayer zumindest einige ihrer "Eigenschaften" wie Container, Codec und Bitrate erkennen, möglicherweise verschiedene Qualitäts- und codierungsspezifische Einstellungen usw.

Wie kann ich diese Einstellungen aus einer vorhandenen Datei extrahieren, um sie (direkt) zum Kodieren mit ffmpeg zu verwenden?

Ich habe zum Beispiel ein mit einigen Einstellungen mkvcodiertes Video x264und eine weitere unkomprimierte aviDatei erhalten. Ich möchte die Einstellungen für die x264-mkv-Datei "kopieren", um das avi mit den gleichen Einstellungen zu transcodieren .

Hinweis: Ich suche nach einem Weg, der keine menschliche Arbeit mit dem "Übersetzen" der Einstellungen von einem Decoder zum 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 eingeben können.

13
Nun, Sie könnten wahrscheinlich die Ausgabe von `ffprobe` sortieren (insbesondere mit den Optionen` -show_streams` und `-show_format`) und diese Informationen verwenden, um die wichtigen Dinge zu skripten evilsoup vor 11 Jahren 0
Wenn Sie häufig dieselben Einstellungen wie die Bitrate verwenden (der Versuch, die exakte Bitrate zu kopieren, scheint bei den Benutzern beliebt zu sein), führt dies nicht zu einer optimalen Qualität. Natürlich habe ich keine Ahnung, wie Ihre typische Eingabe aussieht, aber bei x264 wird im Allgemeinen die Option -crf empfohlen. Siehe [FFmpeg- und x264-Kodierungshandbuch] (https://ffmpeg.org/trac/ffmpeg/wiki/x264EncodingGuide). LordNeckbeard vor 11 Jahren 1
Ich kann nichts über Kodierungseinstellungen in der Ausgabe von ffprobe finden :( thelolcat vor 8 Jahren 0
Es zeigt nur die Anzahl der ReFrames an, nicht aber die anderen Einstellungen wie bei mediainfo thelolcat vor 8 Jahren 0
Die Eingabesyntax mit ffmpeg unterscheidet sich von den Metadatenfeldern. Sie könnten zB 'channels: 6' aus einer Videodatei lesen, aber zum Kodieren müssten Sie den Schalter `-ch: 6 'verwenden. Einige Schalter verwenden 1 Buchstaben, andere zwei usw. jiggunjer vor 8 Jahren 0

1 Antwort auf die Frage

7
slhck

This is not going to be trivial. I'm not aware of a single script that'd take care of these tasks, which are usually done manually. For the most info about the encoding settings, on Unix/Linux or OS X, you can use mediainfo with some Bash tricks.

For example, for an x264-encoded video in an MP4 file:

mediainfo input.mp4 | grep "Encoding settings" | cut -d':' -f2- | tr '/' '\n' | sed 's/ //' 

This will output a list of x264 options:

cabac=1 ref=3 deblock=1:-1:-1 analyse=0x3:0x113 me=hex subme=7 psy=1 … 

You could then manually pass these options to the x264 binary.

If you go through FFmpeg, that's a little more complicated though, as not all of x264's options can or should be mapped like this. Note that often a simple preset, tune and profile specification will do as well (as seen in x264 --fullhelp and the x264 encoding guide), and specifying the CRF level is enough.

And this is not even considering audio, where luckily, there aren't that many options.

Also mit ffprobe oder ffmpeg nicht möglich? thelolcat vor 8 Jahren 0
Nein, mit ffprobe / ffmpeg ist das nicht direkt möglich. Im Fall von x264-codiertem Video würde ich die Ausgabe "mediainfo" verwenden und diese Optionen mit "-x264-params" ffmpeg zuordnen. (Siehe auch [die x264-Kodierungsanleitung] (https://trac.ffmpeg.org/wiki/Encode/H.264#Overwritingdefaultpresetsettings)). Wenn Sie jedoch eine generelle Lösung für alle Arten von Codecs / Encodern oder Containerformaten wünschen, müssen Sie ein mäßig komplexes Skript schreiben, das die Konvertierung durchführt. slhck vor 8 Jahren 0