10

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

4

4 回答 4

26

使用以下命令:

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
于 2013-09-30T10:22:40.700 回答
10

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

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

31565

它不适合我,我想出了以下解决方案:

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

返回值为:

00:00:31.565

毕竟,您可以使用PHP来格式化返回值,将其转换为seconds,例如:

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

Example

于 2014-05-04T13:11:49.337 回答
1

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

要安装 ffmpeg,请点击此链接

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']
于 2016-02-23T07:55:53.597 回答
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) }'
于 2021-07-12T15:16:32.620 回答