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

2019-12-15 15:28:20 +08:00
 cz5424

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

已知方法:

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

尝试了一下:

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

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

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

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

我有的是用户的视频的时间,原本素材的时间,用户双声道音频,素材单声道音频,导致我合成的时候时间戳调整很乱

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/629224

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX