如何使用mediainfo以秒或其他格式查找视频文件的持续时间?

时间:2013-09-30 10:22:41

标签: video ffmpeg multimedia ffprobe mediainfo

如何以毫秒为单位查找视频文件的持续时间。以确定的方式整数。 我使用ffprobe来获取持续时间,但它没有给出所有文件格式的持续时间。

4 个答案:

答案 0 :(得分:15)

使用以下命令:

i)获取视频流的持续时间:

$ mediainfo --Inform="Video;%Duration%"  [inputfile]

ii)获取媒体文件的持续时间:

$ mediainfo --Inform="General;%Duration%" [inputfile]

iii)仅获取音频流的持续时间:

$ mediainfo --Inform="Audio;%Duration%" [inputfile]

iv)获取多个参数的值:

$ mediainfo --Inform="Video;%Width%,%Height%,%BitRate%,%FrameRate%" [inputfile]

输出将是这样的:

1280,720,3000000,30.0

答案 1 :(得分:5)

iota 提供使用mediainfo --Inform="Video;%Duration%" [inputfile],但可能会返回奇怪的结果。

例如,对于持续时间 31s 565ms 的视频,给定命令的输出将为:

31565

它不适合我,我找到了以下解决方案:

mediainfo --Inform="Video;%Duration/String3%" inputExample.webm

返回值为:

00:00:31.565

毕竟,您只需格式化返回值,让我们说 PHP ,将其转换为,例如:

$parsed = date_parse( '00:00:31.565' );
echo $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second'];

Example

答案 2 :(得分:1)

我们也可以使用ffmpeg来获取任何视频或音频文件的持续时间。

要安装ffmpeg,请按照此link

进行操作
import subprocess
import re

process = subprocess.Popen(['ffmpeg',  '-i', path_of_media_file], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
stdout, stderr = process.communicate()
matches = re.search(r"Duration:\s{1}(?P<hours>\d+?):(?P<minutes>\d+?):(?P<seconds>\d+\.\d+?),", stdout, re.DOTALL).groupdict()

print matches['hours']
print matches['minutes']
print matches['seconds']

答案 3 :(得分:0)

我在我的 xubuntu 机器上使用以下命令,它完全符合 OP 想要完成的任务。

mediainfo --Output="Video;%Duration%\n" *.mp4 | awk '{ sum += $1 } END { secs=sum/1000; h=int(secs/3600);m=int((secs-h*3600)/60);s=int(secs-h*3600-m*60); printf("%02d:%02d:%02d\n",h,m,s) }'