音视频学习–音画同步

上周和新入职的测试小姐姐一起讨论一些问题时,被问“音画同步”是怎么回事儿,要怎么验证,巴拉巴拉解释了一通,在此也形成一个笔记,分享有需要的人。

音视频同步

音视频封装是将音频和视频数据流打包成一个容器文件的过程。在封装过程中,音频和视频数据需要经过编码(例如AAC、MP3、H.264、H.265等)得到压缩后的二进制数据。这些压缩后的数据会按照特定的格式和规范被装载到FLV或MP4文件的对应位置。这个过程涉及到多个步骤:

编码:音频和视频数据在封装之前需要进行编码,将原始的模拟信号或数字信号转换为压缩后的二进制数据。常用的音频编码格式有AAC(Advanced Audio Coding)、MP3(MPEG-1 Audio Layer 3)等,而视频编码格式则包括H.264、H.265/HEVC等。编码过程旨在减小数据量并保持较高的质量。

分段:音频和视频数据流被分割为一系列小的数据块,通常称为帧(Frame)。每个帧都包含一定时长的音频或视频数据。

封装格式选择:选择适合的封装格式,例如FLV或MP4。封装格式定义了音视频数据存储的结构、元数据信息以及文件的扩展性和兼容性。

封装过程:在封装过程中,编码后的音频和视频数据会按照特定的格式和规范被装载到封装文件的对应位置。这些位置可以是容器文件的特定数据块、标签(Tag)或媒体样本(Sample)。

元数据添加:封装文件通常还会包含一些元数据信息,如视频的分辨率、音频的采样率、时长、编码器类型等。这些元数据可以提供给播放器或其他应用程序进行解析和处理。

索引创建:为了快速访问封装文件中的特定位置或帧,通常会创建索引结构。索引可以包括时间戳、关键帧位置等信息,以便快速定位和跳转。

音视频学习--音画同步

问题产生

音视频同步问题可能出现在多个环节中,包括录制、传输、编码、解码和播放等过程。因为每个环节都可能引入一定的延迟,处理上的误差或其他因素导致同步失效。

录制阶段:在录制音视频时,可能会由于设备或软件的问题造成音频和视频的采样与录制时间不一致。例如,摄像头和麦克风之间的延迟或音频和视频输入设备的不稳定性都可能导致录制时的同步问题。

传输和存储阶段:在音视频传输和存储过程中,网络延迟、带宽限制或文件读取速度等因素可能导致音频和视频的时间戳失去同步。这种情况最常见于实时流媒体传输或网络条件较差的情况下。

编码和解码阶段:音频和视频数据在进行编码和解码过程时,可能会引入一定的延迟。编码器和解码器的处理时间不同、帧缓冲区的大小不一致等问题都可以导致音视频的同步问题。

播放阶段:在播放音视频时,播放设备或软件可能因为性能差异、缓冲策略不当或系统负载过重而导致音频和视频的显示不同步。这种情况常见于使用低性能播放器、网络拥堵或播放器软件本身的问题。

 

PTS和DTS

在音视频编码和封装过程中,PTS(Presentation Timestamp)和DTS(Decoding Timestamp)是两个重要的时间戳概念。它们用于确定音频和视频帧在播放或解码时的顺序和时间。

PTS(Presentation Timestamp):PTS是指音频或视频帧的展示时间戳,表示帧应该在播放器上显示的时间点。PTS用于控制帧的播放顺序和对齐,确保音频和视频能够按照正确的时间顺序显示,实现音视频同步。

DTS(Decoding Timestamp):DTS是指音频或视频帧的解码时间戳,表示帧被解码的时间点。DTS用于解码器对帧进行解码的顺序和时间控制,确保音频和视频能够按照正确的时间顺序解码。

 

音视频同步的方案

音视频同步主要的类型有三种:视频同步到音频、音频同步到视频、音频和视频都做调整同步到外部时钟:

音视频学习--音画同步

为了解决同步问题,首先我们必须了解它的本质。基本上所有音频和视频不同步问题都归结为:

  • 音频在视频之前(或视频在音频之后)
  • 音频在视频后面(或视频在音频前面)

一个有点令人困惑的部分是,这两个问题都有一个非常相似的解决方案,只是在繁杂方面有所不同

(1)音频较快

音视频学习--音画同步

ffmpeg -i file.mkv -itsoffset 3 -i file.mkv -c:a copy -c:v copy -map 0:v:0 -map 1:a:0 out.mkv

音视频学习--音画同步

(2)音频滞后

音视频学习--音画同步

ffmpeg -i file.mkv -itsoffset 3 -i file.mkv -c:a copy -c:v copy -map 0:a:0 -map 1:v:0 out.mkv

音画同步测试

之前有介绍过相关测试,文中介绍了3中测试方法,有比较准确的,但是性价比不高;有自己摸索的,但是只能统计大概时间差无法做到精确的感兴趣的可以参考:

音视频测试–视频特性测试

相关标准可以参考如下:

音视频学习--音画同步

当然这个问题也是在校招和社招面试中经常问到的问题,在实际工作中,特别是设计流媒体播放,录制等业务单元中经常碰到的。

https://blog.csdn.net/weixin_46282078/article/details/123408703

如下提供了一些测试视频,可以查阅:

https://mimolive.com/zh/%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C/%E8%BE%93%E5%85%A5%E6%BA%90/%E9%9F%B3%E9%A2%91%E8%A7%86%E9%A2%91%E5%90%8C%E6%AD%A5%E6%B5%8B%E8%AF%95/

参考

https://superuser.com/questions/982342/in-ffmpeg-how-to-delay-only-the-audio-of-a-mp4-video-without-converting-the-au?answertab=votes#tab-top

https://zhuanlan.zhihu.com/p/51924640

https://testerhome.com/topics/19845/show_wechat

作者信息:我是一枚爱跑步的程序猿,维护公众号和知乎专栏《MediaStack》,有兴趣可以关注,一起学习音视频知识,时不时分享实战经验。

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论