音视频基础概念:采样率、帧率、时间戳与编码格式

做音画同步,说白了就是跟这几个概念打交道。采样率、帧率、时间戳、编码格式——它们是整个系统的地基。我见过太多人上来就调同步参数,结果发现是采样率对不上,或者时间戳单位搞错了。嗯,咱们先把地基打牢。

2.1 采样率:声音的“像素”

声音是连续的模拟信号,计算机只能处理离散的数字。采样率就是每秒从连续信号中提取多少个样本点。单位是 Hz(赫兹)。

核心公式:采样率 = 每秒采样点数

比如 44100 Hz,就是每秒采集 44100 个点。

常见的采样率有这些:

采样率 常见场景 说明
8000 Hz 电话语音 够用,但音质差
16000 Hz VoIP、语音识别 语音质量尚可
44100 Hz CD 音质、MP3 最通用的标准
48000 Hz DVD、专业视频 视频行业标准
96000 Hz 高解析音频 录音棚常用

我的经验:做音画同步时,音频采样率必须跟视频容器约定好。我遇到过项目里音频用 44100,视频容器却按 48000 算时间戳,结果声音越跑越偏。排查了一整天,最后发现是采样率不统一。

2.2 帧率:画面的“节奏”

帧率就是每秒显示多少帧画面。单位是 fps(frames per second)。

帧率决定了视频的流畅度。你想想看,电影是 24fps,游戏要 60fps 才觉得顺。为什么?因为人眼的视觉暂留效应。

常见的帧率标准:

  • 24 fps —— 电影标准,有“胶片感”
  • 25 fps —— PAL 制式(欧洲、中国电视)
  • 29.97 fps —— NTSC 制式(美国、日本电视)
  • 30 fps —— 网络视频常用
  • 50/60 fps —— 高帧率视频、游戏录制

注意:帧率不是越高越好。帧率越高,数据量越大,编码压力也越大。做直播时,我建议根据网络带宽动态调整帧率,而不是死磕 60fps。

2.3 时间戳:PTS 与 DTS

这是音画同步的核心。没有时间戳,音频和视频就是两盘散沙。

时间戳有两种:

  • PTS(Presentation Time Stamp) —— 显示时间戳。告诉解码器:这帧画面/这段音频应该在什么时候显示/播放。
  • DTS(Decoding Time Stamp) —— 解码时间戳。告诉解码器:这帧数据应该在什么时候解码。

为什么会需要两个时间戳?因为视频编码有 B 帧(双向预测帧)。B 帧需要参考前后的帧才能解码,所以解码顺序和显示顺序不一样。

举个例子:

假设一个 GOP(图像组)的显示顺序是:I1 - B2 - B3 - P4

但解码顺序是:I1 - P4 - B2 - B3

因为 B2 和 B3 需要 P4 的信息才能解码。

所以 DTS 是 I1→P4→B2→B3,而 PTS 是 I1→B2→B3→P4。

时间戳的单位通常是毫秒(ms)或微秒(μs)。在 FFmpeg 里,时间基(time_base)决定了时间戳的精度。比如 time_base = 1/1000,时间戳就是毫秒。

避坑指南:我曾经在对接一个硬件编码器时,发现它的 PTS 是从 0 开始累加的,但解码器期望的是绝对时间戳。结果画面一直卡在开头不动。后来我手动加了一个初始偏移量才解决。记住:不同设备的时间戳起点可能不一样,一定要确认清楚。

2.4 编码格式:H.264 与 AAC

原始的音视频数据太大了,不压缩根本没法存、没法传。编码就是压缩的过程。

2.4.1 H.264(视频编码)

H.264 是目前最主流的视频编码标准。它用到了帧内预测、帧间预测、变换量化、熵编码等一系列技术。说白了,就是去掉空间冗余(同一帧里相似的区域)和时间冗余(相邻帧相似的内容)。

H.264 的核心概念:

  • I 帧(关键帧) —— 完整的一帧,不依赖其他帧。解码的起点。
  • P 帧(预测帧) —— 只记录跟前面 I 帧或 P 帧的差异。
  • B 帧(双向预测帧) —— 参考前后帧,压缩率最高,但需要缓存。
  • GOP(图像组) —— 两个 I 帧之间的所有帧。GOP 越长,压缩率越高,但随机访问越慢。

我个人的习惯:做直播时,GOP 设 2 秒(比如 50 帧 @25fps)。太长的话,用户切换频道要等很久才能看到画面。做点播时,GOP 可以设长一些,比如 5-10 秒,压缩率更好。

2.4.2 AAC(音频编码)

AAC 是 Advanced Audio Coding 的缩写,是 MP4 容器里最常用的音频编码格式。它比 MP3 效率更高,同等码率下音质更好。

AAC 的常见档次:

档次 说明 适用场景
AAC-LC 低复杂度,最通用 直播、点播、通话
AAC-HE 高效编码,低码率表现好 流媒体、低带宽场景
AAC-HEv2 在 HE 基础上加参数立体声 极低码率(< 32kbps)

注意:AAC 编码时,采样率、声道数、位深必须跟原始音频一致。我见过有人把 48000 Hz 的音频重采样到 44100 Hz 再编码,结果音调变了,听起来像“唐老鸭”。

2.5 知识体系总览

下面这张图把本章的核心概念串起来了。你可以看到采样率和帧率是原始数据的基础,时间戳是同步的纽带,编码格式是压缩的手段。它们共同决定了音画同步的成败。

音视频基础概念知识体系 音频 采样率 (Hz) AAC 编码 视频 帧率 (fps) H.264 编码 时间戳 (PTS / DTS) 音画同步输出 关键点 • 采样率 & 帧率是原始数据 • 时间戳是同步纽带 • 编码格式是压缩手段

2.6 小结

这一章我们聊了四个基础概念:

  • 采样率 —— 音频的“分辨率”,常见 44100 和 48000
  • 帧率 —— 视频的“节奏”,24/25/30/60 fps 各有用途
  • 时间戳 —— PTS 管显示,DTS 管解码,B 帧让它们不一样
  • 编码格式 —— H.264 压缩视频,AAC 压缩音频

这些概念看着简单,但实际项目里踩坑的往往就是它们。我建议你动手验证一下:拿一个 MP4 文件,用 FFprobe 看看它的采样率、帧率、编码格式和时间戳信息。亲眼看到数据,比死记硬背强得多。