ffprobe 输出的持续时间和读取帧数不匹配

ffprobe 输出的持续时间和读取帧数不匹配

我目前正在尝试学习一些有关多媒体容器的知识,尤其是 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 文件。

有人能解释一下差异来自哪里吗?我遗漏了什么?

相关内容