我有 2 个文件:fileSequence0.ts 和 fileSequence1.ts,我使用 ffmpeg 检查每个文件的帧数,结果是:
然后我将 2 个文件合并为一个:
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 帧,因为它无法解码第一个。
关于ffmpeg - 两个 .ts 文件之间缺少一帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34286338/