Ich verwende ffmpeg
, um eine Videodatei in das H.264-Format zu konvertieren. Wenn ich anrufe ffprobe
während ffmpeg
das Video noch läuft ist die Dauer nicht bekannt. Erst nach ffmpeg
Beendigung ffprobe
wird die Dauer angezeigt.
Ähnlich, wenn ich laufe mplayer
, um das Video abzuspielen, während es noch kodiert wird, ist die Dauer entweder unbekannt oder wird falsch angezeigt.
Gibt es eine Möglichkeit, die Dauer des resultierenden Videos (h264 im .mkv-Container) zu ermitteln, während es noch von codiert wird ffmpeg
?
Bearbeiten : Ich werde die Frage ein wenig klarer machen.
Mich interessiert, wie lang das bisher enkodierte Video ist . Nehmen wir an, die Eingabedatei ist 1 Minute 45 Sekunden lang. Die resultierende Datei sollte die Länge beibehalten. Aber ich würde gerne wissen, wie viel bisherffmpeg
codiert wurde . Wenn wir die Länge des Videos nach Abschluss der Konvertierung bestimmen können, sollte es dann nicht eine Möglichkeit geben, die Länge des bereits verarbeiteten und abspielbereiten Videos zu bestimmen?
Kurze Antwort ist Nein.
Längere Antwort ist, es kommt darauf an.
Wenn Sie eine Datei codieren, entspricht die Ausgabe im Allgemeinen der Dauer der Eingabe, es sei denn, es werden Geschwindigkeitsänderungs- oder Trimmfilter oder -ss, -to, -t
-optionen angewendet. Bei einer Live-Eingabe stoppt FFmpeg die Codierung, wenn es bei der Eingabe auf EOF stößt. Wenn Sie das also nicht wissen, kennen Sie die Ausgabedauer nicht. Bei mehreren Eingaben unterschiedlicher Dauer hängt es davon ab, was der Befehl ist, z. B. ist dort ein drin -shortest
, gibt es ein amix
, das standardmäßig die längste der Eingaben ist, oder amerge
das bei der kürzesten Eingabe endet.
Standardmäßig zeigt die ffmpeg-Konsolenausgabe den Fortschritt der Codierung in Echtzeit an, dh die bisher codierte Dauer.
Siehe -report
Option. Aus den Manpages:
-Bericht
Sichern Sie die vollständige Befehlszeilen- und Konsolenausgabe in einer Datei mit dem Namen " program-YYYYMMDD-HHMMSS.log " im aktuellen Verzeichnis. Diese Datei kann für Fehlerberichte nützlich sein. Es impliziert auch "
-loglevel verbose
".Das Festlegen der Umgebungsvariable
FFREPORT
auf einen beliebigen Wert hat den gleichen Effekt. Wenn der Wert eine ':
'-separierte Schlüsselwertsequenz=
ist , wirken sich diese Optionen auf den Bericht aus; Optionswerte müssen maskiert werden, wenn sie Sonderzeichen oder das Optionstrennzeichen „:
“ enthalten (siehe Abschnitt „Quoting and Escaping“ im ffmpeg-utils-Handbuch).Folgende Möglichkeiten werden erkannt:
Datei
Legen Sie den für den Bericht zu verwendenden Dateinamen fest;
%p
wird zum Namen des Programms%t
erweitert, wird zu einem Zeitstempel erweitert, "%%
" wird zu einem einfachen "%
" erweitertNiveau
Stellen Sie die Log-Ausführlichkeitsstufe mit einem numerischen Wert ein (siehe „
-loglevel
“).Um beispielsweise einen Bericht in eine Datei namens ffreport.log mit einer Protokollebene von 32 (Alias für Protokollebene „
info
“) auszugeben:
FFREPORT=file=ffreport.log:level=32 ffmpeg -i input output
Fehler beim Analysieren der Umgebungsvariablen sind nicht schwerwiegend und werden nicht im Bericht angezeigt.
Kombinieren Sie mit -stats
und Ihr One- | head -n 2 | tail -n 1
to-go:
-Statistiken (global)
Kodierfortschritt/Statistiken drucken. Es ist standardmäßig aktiviert, um es explizit zu deaktivieren, müssen Sie "
-nostats
" angeben.
Wenn Sie Probleme mit dem Fortschrittsbalken haben, \r
der dieselbe Zeile neu schreibt, können Sie ffmpeg -stats ... 2>&1 | tr \\r \\n
Head&Tail verwenden.
VL-80
Gyan
stderr
VL-80
VL-80
-progress
, die bewirkt, dass die oben genannten Fortschrittsinformationen in einem maschinenfreundlichen Format ausgegeben werden, das leicht analysiert werden kann.