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

标签 ffmpeg http-live-streaming

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

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

  • 然后我将 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/

    相关文章:

    video - FFMPEG,其偏移量与覆盖命令无法正常工作

    ffmpeg - 无法在 ffmpeg 视频转换中保留元数据

    linux - 具有双以太网接口(interface)的 ffmpeg 工作错误

    ios - HTTP Live Streaming 的 AVPlayer 速率属性

    javascript - HTTP 直播 : how to listen for timed metadata embedded as ID3 tags using Javascript in iOS8?

    video-streaming - 是否可以在 p2p webrtc 流中捕获和存储每个房间的视频流?

    从 .mp4 文件创建 .ts block

    ffmpeg - 使用 GPU 和 scale_npp 将 hevc 转码为 h264

    python - 从 PyAV av.VideoFrame 创建 HLS 视频流

    ffmpeg - 如何使用多个音频调用 m3u8