使用正则表达式和ffmpeg获取视频的长度

时间:2011-09-12 23:50:02

标签: regex ffmpeg

从以下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 个答案:

答案 0 :(得分:28)

这样您就可以在几秒钟内获得持续时间。我觉得这样比较方便。

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代替JSON。 CSV或XML。有关更多输出选项,请查看此处 http://ffmpeg.org/ffprobe.html#Writers

答案 1 :(得分:9)

你可以使用shell

$ ff=$(ffmpeg -i video.mp4 2>&1)
$ d="${ff#*Duration: }"
$ echo "${d%%,*}"

答案 2 :(得分:4)

您想在裸shell管道中执行此操作,还是在调用程序中读取结果?

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

...是一个PCRE,会将结果分开(如果ffmpeg可能以帧而不是小数秒输出持续时间,则将\.替换为[;:.]。在Unix管道中:

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

当然还有十亿种其他表达方式。

答案 3 :(得分:2)

Duration: (\d\d):(\d\d):(\d\d(\.\d\d)?)

应该有效。无论您的语言$1是多少小时,$2将是分钟,$3将是秒,$4只有厘秒(如果它们存在)。

答案 4 :(得分:2)

格式(容器)持续时间:

$ 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

答案 5 :(得分:1)

获取最新版本:

$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

格式为:hh:mm:ss.ms

e.g 00:02:17.25