V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cz5424
V2EX  ›  FFmpeg

有什么比较详细靠谱的 ffmpeg 音视频同步方法 or 文章吗?

  •  
  •   cz5424 · 2019-12-15 15:28:20 +08:00 · 4088 次点击
    这是一个创建于 1587 天前的主题,其中的信息可能已经有所发展或是发生改变。

    谷歌到的文献都感觉很不靠谱

    已知方法:

    1. 使用音频时间来同步视频时间
    2. 视频太慢丢帧,视频太快延迟

    尝试了一下:

    1. 列表记录音频每一帧的 ofr.pts * ofr.time_base
    2. 视频帧数除以音频帧数,作为步进值
    3. 视频合成时候,音频时间按步进值取帧
    4. 判断音频时间和视频时间,音频时间快了,视频就丢帧

    然而同步效果不理想,视频还是慢了

    ps: 我是采用 pyav 库来处理音视频,听说是业绩难题?

    3 条回复    2020-06-03 22:54:13 +08:00
    dixeran
        1
    dixeran  
       2019-12-15 16:32:39 +08:00 via Android   ❤️ 1
    正好最近在看 mpv,你可以看一下他们怎么做的( https://github.com/mpv-player/mpv/wiki/Display-synchronization ),策略相对复杂一些
    hardwork
        2
    hardwork  
       2020-06-03 21:56:14 +08:00
    是做播放器还是混流? 同步的唯一参考就是时戳啊.你这个方法没太看懂,音视频时戳都是恒定均匀吗,这种整体除法做步进不太靠谱吧
    以 ffplay 中视频同步到音频的原理来说,就是一定周期往声卡喂音频 samples 数据,以 lc-aac 为例子,解码后一帧 1024 个 samples,假设当前播放到第 5 帧内的第 100 个 samples,计算时间则是<第五帧的 pts+duration of 100 samples>得出一个时间,然后展示这个离这个时间最近的视频就可以了.原理就是这样
    cz5424
        3
    cz5424  
    OP
       2020-06-03 22:54:13 +08:00
    @hardwork 是在合成视频的场景,设计师给了很多段视频素材,然后要把用户的图片跟素材合并,成为一个新的视频,同时还要混音,用户音乐+背景音乐。

    我有的是用户的视频的时间,原本素材的时间,用户双声道音频,素材单声道音频,导致我合成的时候时间戳调整很乱
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   897 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:21 · PVG 05:21 · LAX 14:21 · JFK 17:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.