Как получить длительность видео в секундах?

Как я могу получить продолжительность видео в секундах?

что я пробовал:

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(, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }'
2383
21
задан JakeGould
06.04.2023 10:48 Количество просмотров материала 3049
Распечатать страницу

8 ответов

чтобы получить минуты, нужно разделить 2383 секунды на 60.

39.7167

и затем умножить дробную часть .7167 на 60, чтобы получить оставшиеся секунды.

43.002

итак, 39 минут 43 секунды. Приложение, как представляется, дает вам точное значение.

25
отвечен Robert Harvey 2023-04-07 18:36

просто использовать ffprobe напрямую. Нет необходимости в sed,grep, etc. Есть несколько "длительностей", которые вы можете приобрести (в зависимости от вашего ввода).

формат (контейнер) длительность

$ ffprobe -v error -show_entries format=duration \
  -of default=noprint_wrappers=1:nokey=1 input.mp4

30.024000

добавлять -sexagesimal опция будет использовать часы: MM: SS.Формат единицы измерения времени микросекунд:

0:00:30.024000

видео продолжительность

$ ffprobe -v error -select_streams v:0 -show_entries stream=duration \
  -of default=noprint_wrappers=1:nokey=1 input.mp4
30.000000

вышеуказанные команды от Ffmpeg В Вики: FFprobe Советы.

С ffmpeg

вам может потребоваться полностью декодировать входные данные, если вы обнаружите, что контейнер или длительность потока отсутствуют или неточны (возможно, из-за поврежденного или усеченного файла).

$ ffmpeg -i input.mp4 -f null -
  …
  frame= 1587 fps=0.0 q=0.0 Lsize=N/A time=00:01:03.48 bitrate=N/A

в этом примере time=00:01:03.48 продолжительность:

сколько времени это займет, конечно, зависит от сложности декодирования и продолжительности ввода и возможностей вашего компьютера.

70
отвечен LordNeckbeard 2023-04-07 20:53

Если у вас ffmpeg, вы также должны иметь ffprobe:

ffprobe -i input.file -show_format | grep duration
ffprobe -i input.file -show_format -v quiet | sed -n 's/duration=//p'

Это также даст доли секунд, если это проблема, которую вы можете дополнительно обработать с помощью sed.

30
отвечен evilsoup 2023-04-07 23:10

решение с mplayer, которое дает секунды напрямую:

mplayer -identify -frames 0 -vo null -nosound file.flv 2>&1 | awk -F= '/LENGTH/{print }'
3
отвечен micke 2023-04-08 01:27

для моего ffmpeg-0.6.5-1.el6.ВЧ.x86_64, чтобы получить только второй, ffprobe формат команды:

ffprobe <file> -show_format 2>&1 | sed -n 's/duration=//p' 
2
отвечен Sunry 2023-04-08 03:44
mediainfo --Output='General;%Duration%' file.flv

выводит длительность в миллисекундах в виде одного целого значения. Отсутствие потребности для grep / cut/sed/...

0
отвечен Josef Kufner 2023-04-08 06:01

я наткнулся на проблему получения какие-то странные и неправильные метаданные из видео файлов я работал и у меня ничего не получалось найти шаблон или любые виды обработки, используя код и инструменты, такие как ffmpeg, mp4box, ffprobe, медиаинфо mplayer'а, для того чтобы получить реальной длительности видео.

определение реальной длительности видео было требование для проекта, Я работаю и единственный способ я нашел, чтобы сделать это право всегда было перекодировать видео файл с использованием ffmpeg и заставляя закодированные файлы игнорировать метаданные исходного файла, например:

ffmpeg -i INPUT_FILENAME -acodec copy -vcodec copy -map_metadata -1 OUTPUT_FILENAME"

(Это может работать быстрее, чем вы ожидаете. Я был удивлен, для типа контента и среды, которую я использовал, среднее время составляло 2 секунды)

... а затем получить продолжительность с помощью инструмента по вашему выбору. Мне нравится mediainfo, btw: - "mediainfo FILE --Inform=" Video;%Duration% " дает длительность в милисекундах.

0
отвечен satirio 2023-04-08 08:18

Если вы хотите точную продолжительность, забудьте FFmpeg. Это только дает оценку, основанную на размере файла и среднем битрейте. Я нашел, в некоторых случаях, расчетное время ожидания в 2 раза!

в Linux, если файл создается и изменяется только во время указанной видеозаписи, альтернативным решением будет использовать время создания и последнего изменения для вычисления продолжительности, как в:

stat -c "%X %Y" video.mpg | awk '{print  - }'
-6
отвечен codechimp 2023-04-08 10:35

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх