我有2个文件:fileSequence0.ts和fileSequence1.ts,我使用ffmpeg来检查每个文件的帧数,结果是:
然后我将两个文件合并为一个:
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
答案 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 帧,因为它无法解码第一帧。