详解FFplay音视频同步

本文详细介绍了FFplay中的音视频同步,包括PTS的由来、音视频同步的三种方式(视频基准、音频基准、外部时钟基准),以及音视频时间换算和同步时间轴。在同步操作中,讨论了音频和视频时钟的设置与同步策略,提供了一种理解音视频同步机制的深入视角。
摘要由CSDN通过智能技术生成

开始前的BB

有些没有接触过的童鞋可能还不知道音视频同步是什么意思,大家印象中应该看到过这样的视频,画面中的人物说话和声音出来的不在一起,小时候看有些电视台转播的港片的时候(别想歪 TVB)有时候就会遇到 明明声音已经播出来了,但是播的图像比声音慢了很多,看的极为不舒服,这个时候就发生了音视频不同步的情况,而音视频同步,就是让声音与画面对应上

这里有个知识点需要记一下

人对于图像和声音的接受灵敏程度不一样,人对音频比对视频敏感;视频放快一点,可能察觉的不是特别明显,但音频加快或减慢,人耳听的很敏感

PTS的由来

音视频同步依赖的一个东西就是pts(persentation time stamp )显示时间戳 告诉我们该什么时间显示这一帧 ,那么,这个东西是从哪里来的呢?

刨根问底栏目组将带你深度挖掘

PTS是在拍摄的时候打进去的时间戳,假如我们现在拍摄一段小视频(别想歪啊),什么特效都不加,那么走的就是以下的步骤

我们根据这个图可以知道,PTS是在录制的时候就打进Frame里的

音视频同步的方式

在ffplay中 音视频同步有三种方式

  1. 以视频为基准,同步音频到视频
  • 音频慢了就加快音频的播放速度,或者直接丢掉一部分音频帧
  • 音频快了就放慢音频的播放速度
  • 以音频为基准,同步视频到音频
  • 视频慢了则加快播放或丢掉部分视频帧
  • 视频快了则延迟播放
  • 以外部时钟为准,同步音频和视频到外部时钟
  • 根据外部时钟改版音频和视频的播放速度

视频基准
如果以视频为基准进行同步,那么我们就要考虑可能出现的情况,比如:
掉帧
此时的音频应该怎么做呢?通常的方法有

  1. 音频也丢掉相应的音频帧(会有断音,比如你说了一句,我的天啊,好漂亮的草原啊 很不凑巧丢了几帧视频,就成,,,卧槽!)
  2. 音频加快速度播放(此处可以直接用Audition加快个几倍速的播放一首音乐)

音频基准

如果以音频为基准进行同步,很不幸的碰到了掉帧的情况,那么视频应该怎么做呢?通常也有两种做法

1.视频丢帧 (画面跳帧,丢的多的话,俗称卡成PPT) 2.加快播放速度(画面加快播放)

外部时钟为基准

假如以外部时钟为基准,如果音视频出现了丢帧,怎么办呢?

如果丢帧较多,直接重新初始化外部时钟 (pts和时钟进行对比,超过一定阈值重设外部时钟,比如1s)

音视频时间换算

PTS 时间换算

之前我们稍微讲过pts的时间换算,pts换算成真正的秒是用以下操作

realTime = pts * av_q2d(stream.time_base)

stream是当前的视频/音频流
我们这里主要讲一下在音频解码pts可能会遇到的情况,有时候音频帧的pts会以1/采样率为单位,像
pts1 = 0 pts2 = 1024 pts3 = 2048
像我们例子中的这个视频,我们在解码一帧音频之后打印出来他的pts
 

std::cout<<"audio pts 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值