这是一个普遍的问题,最好通过一个例子来解释:
假设我有两个 M2TS 文件,1.m2ts
和2.m2ts
。每个文件包含一个 23.976 f/s(实际上是 24000/1001 f/s,帧持续时间为 41.708 毫秒)的视频流和一个 31.25 f/s(帧持续时间为 32 毫秒)的 E-AC3 音频流。在每个文件中,第一个视频帧的 PTS 与第一个音频帧的 PTS 相同。
这意味着音频通常不会与视频同时结束(除非在极少数随机情况下发生,且发生概率极低)。举一个最简单的例子,我们假设两个文件都只包含一个视频帧;那么该帧的持续时间约为 42 毫秒。由于音频帧仅占 32 毫秒,因此文件中必须有两个音频帧,否则视频帧末尾将无声。
因此,两个文件都包含一个持续时间为 42 毫秒的视频流和一个持续时间为 64 毫秒的音频流。如果我让 ffmpeg 使用连接文件,究竟会发生什么-codec copy
?当然,我在这里谈论的是 concat 解复用器,而不是 concat 协议:
文件列表.txt:
ffconcat version 1.0
file 1.m2ts
file 2.m2ts
命令行:
ffmpeg -f concat -safe 0 -i list.txt -c copy output.m2ts
在这种情况下,ffmpeg 究竟如何处理不同的流长度?