
У меня есть каталог, полный видеофайлов .MP4. Я хотел бы увидеть список, в котором есть имя каждого файла и его длительность в минутах и секундах. Что-то вроде этого:
one.mp4 4:34
two.mp4 2:23
three.mp4 8:34
four.mp4 0:43
Я перепробовал много файловых менеджеров, но не нашел тот, который покажет мне эту информацию.
Решения, включающие терминал, были бы хороши.
решение1
Попробуйте это: (вдохновение изсуперпользователь.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
Однако вывод будет в формате ЧЧ:ММ:СС.МИЛЛИСЕКУНДЫ. Если вы не укажете опцию -sexagesimal, вы получите длительность в секундах.
Для желаемого выходного формата ЧЧ:ММ можно сделать что-то вроде этого:
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
решение2
avprobe
из пакета libav-tools
делает это.
Пример вывода avprobe myfile.mp4
avprobe версия 10.1-6:10.1-1~bpo70+1, Авторские права (c) 2007-2014 разработчики Libav собрано 6 июня 2014 г. в 18:25:37 с помощью gcc 4.7 (Debian 4.7.2-5) [mov,mp4,m4a,3gp,3g2,mj2 @ 0x90f4720] несколько записей в списке редактирования, может возникнуть рассинхронизация аудио/видео, патч приветствуется [mov,mp4,m4a,3gp,3g2,mj2 @ 0x90f4720] несколько записей в списке редактирования, может возникнуть рассинхронизация аудио/видео, патч приветствуется Вход #0, mov,mp4,m4a,3gp,3g2,mj2, из «Zieleinlauf_2013_1886.mp4»: Метаданные: major_brand : isom второстепенная_версия: 512 совместимые_бренды: isomiso2avc1mp41 кодер: Lavf54.2.100 Продолжительность: 00:00:14.09, начало: 0.021995, битрейт: 4009 кб/с Поток #0.0(und): Видео: h264 (High), yuv420p, 534x300, 3854 кбит/с, 25 кадров в секунду, 25 tbn, 50 tbc (по умолчанию) Поток № 0.1(und): Аудио: aac, 22050 Гц, моно, fltp, 127 кбит/с (по умолчанию) # вывод avprobe