两个.ts文件之间缺少一帧



我有两个文件:fileSequence0.ts和fileSequence1.ts,我用ffmpeg检查每个文件的帧数,结果是:

  • fileSequence0.ts,29帧
  • fileSequence1.ts,28帧

然后我将两个文件合并为一个:

ffmpeg -i 'concat:fileSequence0.ts|fileSequence1.ts' -codec copy merge.mp4

现在,merge.mp4有58帧,而不是57=29+28,这是怎么回事,有人能指出我缺少什么知识吗?

这里提到的文件可以下载到:https://github.com/ideawu/missing-frame-between-ts

第二个文件fileSequence1.ts也有29帧,而不是28

由于它最初的分段方式,如果你单独播放它,你将无法获得一帧,因为它缺少所需的SPS/PPS数据:

[h264 @ 0x4111460] non-existing PPS 0 referenced
    Last message repeated 1 times
[h264 @ 0x4111460] decode_slice_header error
[h264 @ 0x4111460] non-existing PPS 0 referenced
[h264 @ 0x4111460] decode_slice_header error
[h264 @ 0x4111460] no frame!

由于SPS/PPS存在于第一个文件中,并且当您插入它时,它将首先读取fileSequence0.ts,因此它将能够解码丢失的帧,因此结果是正确的值58

你可以通过反转concat:的顺序很容易地看到这一点

ffmpeg -i 'concat:fileSequence1.ts|fileSequence0.ts' -codec copy merge.mp4

此命令导致57帧帧,因为它无法解码第一帧。

相关内容

  • 没有找到相关文章

最新更新