我目前正在尝试学习一些有关多媒体容器的知识,尤其是 M2TS。为了以人类可读的格式获取此类文件中所含曲目的大量信息,我发现以下命令非常方便:
"c:\program files\ffmpeg\bin\ffprobe.exe" -print_format json -loglevel fatal -show_entries format:packet:stream -show_streams -count_frames -i input.m2ts > output.json
在生成的 JSON 文件中,有每条音轨的时长以及音频帧数(等等)的条目。但是,当根据读取的帧数计算音轨的时长时,我得到的结果与 JSON 文件中的时长不同。
一个例子(不重要的行被替换...
):
...
{
"index": 1,
"codec_name": "dts",
"codec_long_name": "DCA (DTS Coherent Acoustics)",
"profile": "DTS-HD MA",
"codec_type": "audio",
"codec_tag_string": "[134][0][0][0]",
"codec_tag": "0x0086",
"sample_fmt": "s32p",
"sample_rate": "48000",
"channels": 8,
"channel_layout": "7.1",
"bits_per_sample": 0,
"initial_padding": 0,
"ts_packetsize": "192",
"id": "0x1100",
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/90000",
"start_pts": 1048560,
"start_time": "11.650667",
"duration_ts": 5247360,
"duration": "58.304000",
"bits_per_raw_sample": "24",
"nb_read_frames": "5467",
"nb_read_packets": "5467",
...
},
...
这是我的问题:
这是 DTSHD-MA 音轨。因此,有93.750 frames/s
。根据 JSON 输出,有5467 frames
。那么持续时间应该是(5467 / 93.750) = 58.315 s
。
然而,根据 JSON 输出的持续时间是58.304 s
。
该文件中的其他音轨以及其他 M2TS 文件中的其他音轨的情况类似。我无法想象我测试的每个文件都已损坏或有错误;我查看的每个文件都是来自专业制作的蓝光光盘(高清,而非超高清)的 MT2S 文件。
有人能解释一下差异来自哪里吗?我遗漏了什么?