Получить длину видео с использованием регулярных выражений и ffmpeg - PullRequest
15 голосов
/ 13 сентября 2011

Из следующего вывода ffmpeg -i, как получить длину (00:35) -

$ ffmpeg -i 1video.mp4

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/david/Desktop/1video.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 1
    compatible_brands: isomavc1
     creation_time   : 2010-01-24 00:55:16
  Duration: 00:00:35.08, start: 0.000000, bitrate: 354 kb/s
    Stream #0.0(und): Video: h264 (High), yuv420p, 640x360 [PAR 1:1 DAR 16:9], 597 kb/s, 25 fps, 25 tbr, 25k tbn, 50 tbc
    Metadata:
      creation_time   : 2010-01-24 00:55:16
    Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 109 kb/s
    Metadata:
      creation_time   : 2010-01-24 00:55:17
At least one output file must be specified

Ответы [ 6 ]

28 голосов
/ 02 августа 2012

Таким образом, вы получите продолжительность в секундах.Я думаю, что это более удобно.

ffprobe -loglevel error -show_streams inputFile.mp3 | grep duration | cut -f2 -d=

ffprobe поставляется с ffmpeg, поэтому вы должны иметь его.


РЕДАКТИРОВАТЬ: Для более выделенной версии вы можете использовать, например,

ffprobe -loglevel error -show_format -show_streams inputFile.extension -print_format json

Вместо JSON вы также можете использовать, например, CSV или XML.Для более подробной информации смотрите здесь http://ffmpeg.org/ffprobe.html#Writers

9 голосов
/ 13 сентября 2011

Вы можете использовать оболочку

$ ff=$(ffmpeg -i video.mp4 2>&1)
$ d="${ff#*Duration: }"
$ echo "${d%%,*}"
4 голосов
/ 13 сентября 2011

Вы хотите сделать это в пустом конвейере оболочки или прочитать результат в вызывающей программе?

/\s+Duration: ((\d\d):(\d\d):(\d\d)\.(\d+))/

… это PCRE, который разделит результат вверх (замените \. на[;:.], если ffmpeg может выводить длительность в кадрах, а не в долях секунды).В конвейере Unix:

| grep Duration: | cut -f2- -d: | cut -f1 -d, | tr -d ' '

Есть, конечно, миллиард других способов выразить это.

2 голосов
/ 10 марта 2016

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

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

При добавлении опции -sexagesimal будет использоваться формат единицы времени HOURS:MM:SS.MICROSECONDS:

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

https://trac.ffmpeg.org/wiki/FFprobeTips#Duration

2 голосов
/ 13 сентября 2011
Duration: (\d\d):(\d\d):(\d\d(\.\d\d)?)

должно работать. Независимо от того, что $1 вашего языка будет часами, $2 будет минутами, $3 будет секундами, а $4 будет только центсекундами, если они существуют.

1 голос
/ 01 сентября 2014

для последней версии:

$cmd = "avconv -i input.mp4 2>&1 | grep Duration | awk '{print $2}' | tr -d ,";
$output = exec($cmd);
echo "\n\n==OUTPUT===|".$output."|=====\n\n";

Теперь $ output будет содержать вашу продолжительность видеовхода .mp4

формат будет: чч: мм: сс.мс

например 00: 02: 17,25

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...