Ich muss per FTP alle mp4-Dateien in ein Verzeichnis mit einer Länge von> 4 Minuten über die Shell hochladen. Ich kann kein Skript finden, um die Länge eines Videos zu überprüfen. Hat jemand eine Idee, wie man das macht?
Vielen Dank!
Ich muss per FTP alle mp4-Dateien in ein Verzeichnis mit einer Länge von> 4 Minuten über die Shell hochladen. Ich kann kein Skript finden, um die Länge eines Videos zu überprüfen. Hat jemand eine Idee, wie man das macht?
Vielen Dank!
Antworten:
Dies gibt Ihnen die Länge eines Videos.
ffmpeg -i myvideo 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//
Mediainfo ist ein schnelles Werkzeug für diesen Zweck:
$ mediainfo --Inform="Video;%Duration%" [inputfile]
Weitere Optionen finden Sie in einer ausführlicheren Antwort .
In meinen Tests ffprobe
dauert 0,3 Sekunden und mediainfo
dauert 0,09 Sekunden.
mediainfo --Inform="Video;%Duration/String%" [inputfile]
... die Ihnen etwas wie 43 min 50s bekommen würde
Sie können versuchen, den Befehl avconv zu verwenden .
Zuerst sollten Sie installieren:
Wenn Sie den Befehl mit dem Flag -i eingeben, erhalten Sie Informationen zum Video:
avconv -i test.mp4
In der Ausgabe gibt es ein Feld namens Duration
avconv version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers
built on Nov 6 2012 16:51:33 with gcc 4.6.3
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':
Duration: 00:58:28.05, start: 0.000000, bitrate: 888 kb/s
Stream #0.0(eng): Video: h264 (High), yuv420p, 720x404, 748 kb/s, 25 fps, 25 tbr, 20k tbn, 50 tbc
Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 127 kb/s
Jetzt können Sie den Befehl verwenden, um nur den Wert des Feldes Duration abzurufen
Art:
avconv -i file.mp4 2>&1 | grep 'Duration' | awk '{print $2}' | sed s/,//
In meinem Fall ist das Ergebnis:
00:58:28.05
58 Minuten und 28.05 Sekunden.
Hoffe das wird hilfreich!
avprobe
- nicht erforderlich -i
, aber ansonsten funktioniert es genauso. Oder ffprobe
für @Pers Antwort.
exiftool
(Ursprünglich zum Lesen von Kamerametadaten aus Bilddateien gedacht, aber später zum Lesen und Schreiben von Metadaten aus fast jeder Art von Mediendatei erweitert) ist dies sehr praktisch. Führen Sie es mit:
exiftool FILE.mp4 | grep Duration
Sie müssen wahrscheinlich exiftool
zuerst installieren , aber dies ist einfach mit dem folgenden Befehl (unter Debian und Derivaten wie Ubuntu usw.) durchzuführen:
apt install libimage-exiftool-perl
Natürlich ist diese Antwort nur eine andere Alternative. Viele der anderen Antworten sind auch gut. :)
Noch einfacher:
avprobe file.mp4 -show_format_entry duration
Zusätzlich zu pers Lösung , kann dies auf ein ganzes Verzeichnis verwendet werden:
for f in *; do ffmpeg -i "$f" 2>&1 | grep Duration | cut -d " " -f 4 | sed s/,// | tr -d "\n" && echo " $f"; done
Es kann sogar erweitert werden | sort
, um die Dateien nach ihrer Länge zu sortieren.
Sie können dies zu .bashrc
oder hinzufügen, um dies in einem Verzeichnis .bash_aliases
tun zu können lsvlength | sort
alias lsvlength='for f in *; do ffmpeg -i "$f" 2>&1 | grep Duration | cut -d " " -f 4 | sed s/,// | tr -d "\n" && echo " $f"; done'
ffprobe
ist eine elegantere Lösung, als ffmpeg
die einen Fehler auslöst, wenn der Ausgabepfad nicht angegeben wird.
ffprobe video.mp4 2>&1 | grep -E '^ +Duration' | cut -d':' -f2- | cut -d, -f1
Wenn Sie die Dauer einiger Videos in einem Verzeichnis anzeigen möchten, können Sie den folgenden Befehl verwenden
exiftool * | grep ^ Duration | cut -d '' -f 26
grep
und so. Einfach exiftool -T -Duration *.mkv
(oder was auch immer
Wie Sie sehen, gibt es zahlreiche Möglichkeiten, dies zu erreichen.
ffprobe mediafile -show_entries format=format=duration 2>&1 | grep DURATION
wo Mediadatei ist der Name der Datei, wird eine Ausgabe ähnlich der unten bieten. Das erste ist die Dauer des ersten Streams (normalerweise Video) und das zweite die Dauer des zweiten Streams (normalerweise Audio).
DURATION : 00:21:40.132000000
DURATION : 00:21:40.062000000