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

Ffmpeg 两个.ts文件之间缺少一帧,ffmpeg,http-live-streaming,Ffmpeg,Http Live Streaming,我有两个文件: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帧,这是关于什么的,有人能指出我缺少什么知

我有两个文件: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帧,这是关于什么的,有人能指出我缺少什么知识吗


这里提到的文件可以在以下位置下载:

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

非常感谢!我正在用iOS上的Avassetrader进行视频解码,它还告诉
fileSequence1.ts
有28帧,而不是29帧。现在我必须学习PPS的东西。@ideawu它有29个,但无法解码一个。再次在SOThanks上看到维基百科和这个!你真是个好人!