Как я могу получить продолжительность видео в секундах?
Что я пробовал:
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
Это то, что близко, но это не так точно, 2383 составляет 39,71 минут
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
Ответы:
Чтобы получить минуты, вы должны разделить 2383 секунды на 60.
и затем умножьте дробную часть .7167 на 60, чтобы получить оставшиеся секунды.
Итак, это 39 минут 43 секунды. Приложение, кажется, дает вам точное значение.
источник
Просто используйте
ffprobe
напрямую. Нет необходимостиsed
,grep
и т.д. Там не несколько «длительностей» вы можете приобрести ( в зависимости от входа).Формат (контейнер) длительность
При добавлении
-sexagesimal
параметра будет использоваться формат единицы времени HOURS: MM: SS.MICROSECONDS:Продолжительность видеопотока
Вышеприведенные команды взяты из FFmpeg Wiki: FFprobe Tips .
С участием
ffmpeg
Возможно, вам придется полностью декодировать ввод, если вы обнаружите, что контейнер или длительность потока отсутствуют или неточны (возможно, из-за поврежденного или усеченного файла).
В этом примере
time=00:01:03.48
это продолжительность:Сколько времени это займет, конечно, зависит от сложности декодирования и продолжительности вашего ввода и возможностей вашего компьютера.
источник
ffmpeg
раздел «С ».Если у вас есть
ffmpeg
, вы также должны иметьffprobe
:Это также даст доли секунд, если это проблема, вы можете в дальнейшем обработать это с помощью sed.
источник
printf
, например,| xargs printf %.0f
- это вернет целочисленное значение.Для моего ffmpeg-0.6.5-1.el6.rf.x86_64, чтобы получить только второй, формат команды ffprobe:
источник
Решение с mplayer, которое дает секунды напрямую:
источник
Это выводит длительность в миллисекундах как одно целочисленное значение. Нет необходимости в grep / cut / sed / ...
источник
brew install mediainfo
Я столкнулся с проблемой получения некоторых странных и неправильных метаданных из некоторых видеофайлов, с которыми я работал, и мне не удалось найти шаблон или любой другой тип обработки с использованием кода и таких инструментов, как ffmpeg, mp4box, ffprobe, mediainfo, mplayer, чтобы получить реальную продолжительность видео.
Определение реальной продолжительности видео было требованием для проекта, над которым я работал, и единственный способ, который я нашел, чтобы получить его всегда правильно, - это перекодировать видеофайл с помощью ffmpeg и заставить закодированные файлы игнорировать метаданные исходного файла, например:
(Это может работать быстрее, чем вы ожидаете. Я удивился, для типа контента и среды, которую я использовал, среднее время составило 2 секунды)
... а затем получить продолжительность, используя инструмент по вашему выбору. Мне нравится mediainfo, кстати: - "mediainfo FILE --Inform =" Video;% Duration% "дает вам продолжительность в миллисекундах.
источник
Если вам нужно только запросить метаданные:
[...]
[...]
Таким образом, вы можете разобрать это:
Но если вы хотите получить эффективную длительность контейнера, вам нужно расшифровать его:
Процесс декодирования займет некоторое время, пока:
[...]
Затем вы можете разобрать это:
источник
Если вам нужна ТОЧНАЯ продолжительность, забудьте FFmpeg. Это только дает оценку на основе размера файла и среднего битрейта. Я нашел, в некоторых случаях, предполагаемое время выключения в 2 раза!
В Linux, если файл создается и изменяется только во время указанной видеозаписи, альтернативным решением будет использование времени создания и последнего изменения для вычисления продолжительности, как показано в:
источник