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

时间:2015-12-15 10:10:06

标签: ffmpeg hls

我有2个文件: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

1 个答案:

答案 0 :(得分:1)

第二个文件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 帧,因为它无法解码第一帧。