视频/音频文件分析 - 元数据,类似于MediaInfo

时间:2016-05-23 10:24:07

标签: audio video ffmpeg media-player media

我通常使用MediaInfo来查看我的媒体文件,以查看文件中视频/音轨的持续时间。我相信MediaInfo会查看文件(标题)的元数据而不是实际的文件流,这可能是由于速度的原因。我想要一个实际通过文件的工具来计算媒体文件中视频/音频轨道的持续时间,而不是只告诉我标题告诉我的内容。

我需要这个的原因是因为我有一个媒体文件的实例,它没有报告正确的音频轨道持续时间。示例:我有两个文件,一个音频文件和一个视频文件,vid1.mxf和aud1.mxf,它们的长度相同。我使用FFMPEG将这些放在一起,并且由于存储故障/网络问题,生成的文件中的音轨很短,然而它不会在MediaInfo中报告为短。当我收听该文件但显然很短时,网络/存储设备必须在“缝合”过程中无法访问。音频和视频输入文件位于不同的存储设备上。

我过去使用C#库https://github.com/naudio/NAudio来做这种情况,但它只适用于单个.wav文件,而不适用于容器内部有视频的文件(.mxf)

由于

1 个答案:

答案 0 :(得分:1)

这可以使用ffprobe来完成,但文件越大,花费的时间就越多。

第1步提取原始信息

ffprobe input.mxf -select_streams v -show_entries packet=pts_time,duration_time -of compact

ffprobe input.mxf -select_streams a -show_entries packet=pts_time,duration_time -of compact

这会产生一个读数,其中的行看起来像这样

packet|pts_time=4.480000|duration_time=0.040000

第2步计算持续时间

对于视频和音频流,您需要查看第一行的pts_time以及最后一行的pts_timeduration_time。然后流持续时间

pts_time(last line) + duration_time(last line) - pts_time(first line)

还有一个持续时间字段,但它不会记录所有容器格式的值。

ffprobe input.mxf -show_entries stream=duration