Wie kann ich die Videodauer in Sekunden ermitteln?
Was ich versucht habe:
ffmpeg -i file.flv 2>&1 | grep "Duration"
Duration: 00:39:43.08, start: 0.040000, bitrate: 386 kb/s
mediainfo file.flv | grep Duration
Duration : 39mn 43s
Das, was nahe kommt, aber es ist nicht so genau, 2383 ist 39,71 Minuten
ffmpeg -i file.flv 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,// | sed 's@\..*@@g' | awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }'
2383
Antworten:
Um Minuten zu erhalten, müssen Sie 2383 Sekunden durch 60 teilen.
und multiplizieren Sie dann den Bruchteil .7167 mit 60, um die verbleibenden Sekunden zu erhalten.
Es sind also 39 Minuten und 43 Sekunden. Die Anwendung scheint Ihnen einen genauen Wert zu liefern.
quelle
Einfach
ffprobe
direkt verwenden. Keine Notwendigkeit fürsed
,grep
usw. Es gibt mehrere "Dauern", die Sie erwerben können (abhängig von Ihrer Eingabe).Formatdauer (Container)
Durch Hinzufügen der
-sexagesimal
Option wird das Zeiteinheitsformat HOURS: MM: SS.MICROSECONDS verwendet:Dauer des Videostreams
Die obigen Befehle stammen aus FFmpeg Wiki: FFprobe Tips .
Mit
ffmpeg
Möglicherweise müssen Sie die Eingabe vollständig dekodieren, wenn Sie feststellen, dass die Container- oder Stream-Dauer fehlt oder ungenau ist (möglicherweise aufgrund einer beschädigten oder abgeschnittenen Datei).
In diesem Beispiel
time=00:01:03.48
ist die Dauer:Wie lange dies dauern wird, hängt natürlich von der Dekodierungskomplexität und -dauer Ihrer Eingabe sowie von den Fähigkeiten Ihres Computers ab.
quelle
ffmpeg
Abschnitt "Mit ".Wenn Sie haben
ffmpeg
, sollten Sie auch habenffprobe
:Dies ergibt auch Sekundenbruchteile. Wenn dies ein Problem ist, können Sie es mit sed weiterverarbeiten.
quelle
printf
, wie| xargs printf %.0f
- dies wird einen ganzzahligen Wert zurückgeben.Um für mein ffmpeg-0.6.5-1.el6.rf.x86_64 nur das zweite ffprobe-Befehlsformat zu erhalten, ist:
quelle
Lösung mit mplayer, der Sekunden direkt gibt:
quelle
Dies gibt die Dauer in Millisekunden als einen einzelnen ganzzahligen Wert aus. Keine Notwendigkeit für grep / cut / sed / ...
quelle
brew install mediainfo
Ich bin auf das Problem gestoßen, dass einige Videodateien, mit denen ich gearbeitet habe, seltsame und inkorrekte Metadaten enthielten, und ich konnte mit Code und Tools wie ffmpeg, mp4box, ffprobe, mediainfo, mplayer, um die tatsächliche Dauer des Videos abzurufen.
Das Ermitteln der tatsächlichen Dauer des Videos war eine Voraussetzung für ein Projekt, an dem ich gearbeitet habe. Die einzige Möglichkeit, die ich gefunden habe, um es immer richtig zu machen, bestand darin, die Videodatei mit ffmpeg neu zu codieren und codierte Dateien zu zwingen, die Metadaten der Originaldatei zu ignorieren.
(Dies läuft möglicherweise schneller als erwartet. Ich war überrascht, dass die durchschnittliche Zeit für die Art des Inhalts und die von mir verwendete Umgebung 2 Sekunden betrug.)
... und dann mit einem Werkzeug Ihrer Wahl die Dauer abrufen. Ich mag mediainfo, btw: - "mediainfo FILE --Inform =" Video;% Duration% "gibt die Dauer in Millisekunden an.
quelle
Wenn Sie nur Metadaten abfragen müssen:
[...]
[...]
So können Sie es analysieren:
Wenn Sie jedoch die effektive Container-Dauer ermitteln möchten, müssen Sie sie dekodieren:
Das Dekodieren dauert einige Zeit, bis:
[...]
Dann können Sie es analysieren:
quelle
Wenn Sie eine GENAUE Dauer wünschen, vergessen Sie FFmpeg. Es gibt nur eine Schätzung basierend auf Dateigröße und durchschnittlicher Bitrate. Ich habe in einigen Fällen die geschätzte Freizeitdauer um 2x ermittelt!
Wenn unter Linux eine Datei nur während der Videoaufnahme erstellt und geändert wird, besteht eine alternative Lösung darin, die Erstellungsdauer und die Zeit der letzten Änderung zu verwenden, um die Dauer wie folgt zu berechnen:
quelle