Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 如何使用mediainfo以秒或其他格式查找视频文件的持续时间?_Video_Ffmpeg_Multimedia_Ffprobe_Mediainfo - Fatal编程技术网

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

Video 如何使用mediainfo以秒或其他格式查找视频文件的持续时间?,video,ffmpeg,multimedia,ffprobe,mediainfo,Video,Ffmpeg,Multimedia,Ffprobe,Mediainfo,如何确定视频文件的持续时间(以毫秒为单位),即以整数为单位。 我已使用ffprobe获取持续时间,但它没有为所有文件格式提供持续时间。使用以下命令: i) 要获取视频流的持续时间,请执行以下操作: $ mediainfo --Inform="Video;%Duration%" [inputfile] ii)要获取媒体文件的持续时间: $ mediainfo --Inform="General;%Duration%" [inputfile] iii)仅获取音频流的持续时间: $ mediai

如何确定视频文件的持续时间(以毫秒为单位),即以整数为单位。
我已使用ffprobe获取持续时间,但它没有为所有文件格式提供持续时间。

使用以下命令:

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
iota提供使用mediainfo--Inform=“Video;”%Duration%”[inputfile],这是可能的,但会返回奇怪的结果

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

31565
这不适合我,我提出了以下解决方案:

mediainfo --Inform="Video;%Duration/String3%" inputExample.webm
返回值为:

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


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

要安装ffmpeg,请遵循以下步骤

导入子流程
进口稀土
process=subprocess.Popen(['ffmpeg','-i',媒体文件的路径],stdout=subprocess.PIPE,stderr=subprocess.stdout)
stdout,stderr=process.communicate()
matches=re.search(r“Duration:\s{1}(?P\d+?):(?P\d+?):(?P\d+\。\d+?),,”,stdout,re.DOTALL)。groupdict()
打印匹配项['hours']
打印匹配项['minutes']
打印匹配项['seconds']

Nice,它和我发现的ffprobe一样,支持的格式比mediainfo少。mediainfo是专门为这些目的而设计的,但是整个ffmpeg框架是为转码而构建的,而且安装起来很繁重。
$parsed = date_parse( '00:00:31.565' );
echo $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second'];
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']