
Ich habe ein Verzeichnis voller MP4-Videodateien. Ich würde gerne eine Liste sehen, die den Namen jeder Datei und ihre Dauer in Minuten und Sekunden enthält. So etwas wie das hier:
one.mp4 4:34
two.mp4 2:23
three.mp4 8:34
four.mp4 0:43
Ich habe viele Dateimanager ausprobiert, kann aber keinen finden, der mir diese Informationen anzeigt.
Lösungen, die das Terminal einbeziehen, wären gut.
Antwort1
Versuchen Sie Folgendes: (Inspiration vonsuperuser.com)
for f in *.mp4
do
echo -n "$f "
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 -sexagesimal "$f"
done
Die Ausgabe erfolgt jedoch in der Form HH:MM:SS.MILLISEKUNDEN. Wenn Sie die Option -sexagesimal weglassen, erhalten Sie die Dauer in Sekunden.
Für die gewünschte Ausgabeform HH:MM könnten Sie etwa so vorgehen:
for f in *.mp4
do
echo -n "$f "
dur=`ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$f"`
min=`echo "$dur/60" | bc`
sec=`echo "$dur%60/1" | bc`
echo "$min:$sec"
done
Antwort2
avprobe
aus dem Paket libav-tools
tut dies.
Beispielausgabe avprobe myfile.mp4
avprobe Version 10.1-6:10.1-1~bpo70+1, Copyright (c) 2007-2014 die Libav-Entwickler erstellt am 6. Juni 2014 18:25:37 mit gcc 4.7 (Debian 4.7.2-5) [mov,mp4,m4a,3gp,3g2,mj2 @ 0x90f4720] Mehrere Einträge in der Bearbeitungsliste, möglicherweise tritt eine A/V-Desynchronisierung auf, Patch willkommen [mov,mp4,m4a,3gp,3g2,mj2 @ 0x90f4720] Mehrere Einträge in der Bearbeitungsliste, möglicherweise tritt eine A/V-Desynchronisierung auf, Patch willkommen Eingabe #0, mov,mp4,m4a,3gp,3g2,mj2, aus 'Zieleinlauf_2013_1886.mp4': Metadaten: Hauptmarke: isom Nebenversion: 512 kompatible Marken: isomiso2avc1mp41 Encoder: Lavf54.2.100 Dauer: 00:00:14.09, Beginn: 0.021995, Bitrate: 4009 kb/s Stream #0.0(und): Video: h264 (Hoch), yuv420p, 534x300, 3854 kb/s, 25 fps, 25 tbn, 50 tbc (Standard) Stream #0.1(und): Audio: aac, 22050 Hz, mono, fltp, 127 kb/s (Standard) # avprobe-Ausgabe