ffmpeg(2)-音频相关知识

音频相关知识

  • [1 声音的物理本质](#1 声音的物理本质)
    • [1.1 什么是声音](#1.1 什么是声音)
    • [1.2 声音的三要素](#1.2 声音的三要素)
  • [2 PCM ------ 数字音频的基础](#2 PCM —— 数字音频的基础)
    • [2.1 什么是 PCM](#2.1 什么是 PCM)
    • [2.2 采样率(Sample Rate)](#2.2 采样率(Sample Rate))
    • [2.3 位深 / 采样精度(Bit Depth)](#2.3 位深 / 采样精度(Bit Depth))
    • [2.4 声道数与声道布局(Channels & Channel Layout)](#2.4 声道数与声道布局(Channels & Channel Layout))
    • [2.5 交错存储与平面存储](#2.5 交错存储与平面存储)
    • [2.6 音频帧(Audio Frame)](#2.6 音频帧(Audio Frame))
    • [2.7 音频数据量计算](#2.7 音频数据量计算)
  • [3 分贝与响度](#3 分贝与响度)
    • [3.1 分贝(dB)](#3.1 分贝(dB))
    • [3.2 dBFS(分贝满量程)](#3.2 dBFS(分贝满量程))
    • [3.3 响度标准(LUFS / LKFS)](#3.3 响度标准(LUFS / LKFS))
  • [4 常见音频编码格式对比](#4 常见音频编码格式对比)
    • [4.1 无损格式](#4.1 无损格式)
    • [4.2 有损格式](#4.2 有损格式)
    • [4.3 格式对比总结](#4.3 格式对比总结)
  • [5 用 FFmpeg 验证音频概念](#5 用 FFmpeg 验证音频概念)
    • [5.1 查看音频文件信息](#5.1 查看音频文件信息)
    • [5.2 PCM 原始数据的播放](#5.2 PCM 原始数据的播放)
    • [5.3 格式转换](#5.3 格式转换)
    • [5.4 提取 PCM 原始数据](#5.4 提取 PCM 原始数据)

同系列文章
ffmpeg(1)-图片相关知识
ffmpeg(2)_-音频相关知识

1 声音的物理本质

1.1 什么是声音

描述 :声音是由物体振动产生的机械波,通过空气(或其他介质)传播到人耳。计算机无法直接存储声波,需要将模拟信号转换为数字信号,这个过程叫做模数转换(A/D转换)

核心过程

复制代码
麦克风拾音 → 模拟电信号 → A/D转换(采样+量化) → 数字音频数据(PCM)

1.2 声音的三要素

频率(Frequency):振动的快慢,单位是赫兹(Hz)。频率越高,音调越高。人耳可听范围约 20Hz ~ 20000Hz。

振幅(Amplitude):振动的幅度,决定音量大小。振幅越大,声音越响。

音色(Timbre):由波形的谐波成分决定。同样的音高,钢琴和吉他听起来不同,就是因为音色不同。

人耳对频率的感知不是线性的,对 1000Hz ~ 4000Hz 范围最敏感,这也是人声的主要频率范围

2 PCM ------ 数字音频的基础

2.1 什么是 PCM

描述:PCM(Pulse Code Modulation,脉冲编码调制)是最原始的数字音频表示方式,未经任何压缩。所有音频编码格式(MP3、AAC 等)最终解码后都会还原为 PCM 数据。

地位:PCM 之于音频,就像 RGB/YUV 之于图像 ------ 是最底层的原始数据。

2.2 采样率(Sample Rate)

描述:每秒钟对模拟信号采集的次数,单位是 Hz。

奈奎斯特定理:采样率必须至少是信号最高频率的 2 倍,才能无失真地还原原始信号。人耳上限约 20000Hz,因此采样率至少需要 40000Hz。

常见采样率

复制代码
8000 Hz   :电话语音,质量较低
16000 Hz  :语音识别、VoIP 常用
22050 Hz  :早期多媒体,FM 广播级别
44100 Hz  :CD 标准(44100 = 2 × 20000 + 余量,覆盖人耳全频段)
48000 Hz  :视频/广播标准(DVD、蓝光、专业音频设备)
96000 Hz  :高清音频(Hi-Res Audio)
192000 Hz :录音棚级别,极高精度

44100Hz 的来源:早期数字音频通过视频设备录制,PAL 制式每帧 625 行 × 每秒 25 帧 = 15625,NTSC 制式每帧 525 行 × 每秒 30 帧 = 15750,取交叉兼容值并乘以系数,最终确定为 44100

48000Hz 的来源:48000 能被更多整数整除(如 8000、16000、24000),便于不同采样率之间的转换,因此被视频和广播行业选为标准

2.3 位深 / 采样精度(Bit Depth)

描述:每个采样点用多少位(bit)来表示振幅值,位深越高,能表达的振幅级别越多,声音的动态范围越大。

常见位深

复制代码
8 位  :256 级量化,动态范围约 48 dB,质量较差(早期游戏音效)
16 位 :65536 级量化,动态范围约 96 dB,CD 标准
24 位 :16777216 级量化,动态范围约 144 dB,专业录音
32 位 :浮点格式(float),用于音频处理中间环节,避免精度损失

整数格式 vs 浮点格式

复制代码
S16(有符号16位整数):取值范围 -32768 ~ 32767,CD 标准格式
S32(有符号32位整数):取值范围 -2147483648 ~ 2147483647
FLT(32位浮点数)    :取值范围 -1.0 ~ 1.0,精度高,适合中间处理
DBL(64位浮点数)    :取值范围 -1.0 ~ 1.0,最高精度

FFmpeg 中的样本格式后缀带 P 表示平面存储(Planar),不带 P 表示交错存储(Interleaved),例如 S16 是交错的,S16P 是平面的。具体区别见 2.5 节

2.4 声道数与声道布局(Channels & Channel Layout)

描述:声道数表示同时有多少路独立的音频信号。声道布局描述每个声道在空间中的位置。

常见声道配置

复制代码
单声道(Mono)       :1 个声道,用于语音通话、广播
立体声(Stereo)     :2 个声道(左 L + 右 R),最常见的音乐格式
2.1 声道             :左 + 右 + 低音炮(LFE)
5.1 环绕声           :前左 + 前右 + 中置 + 左环绕 + 右环绕 + 低音炮,影院标准
7.1 环绕声           :在 5.1 基础上增加后左 + 后右环绕

5.1 声道的空间布局示意

复制代码
          中置 (C)
           |
前左 (FL) ------------ 前右 (FR)
    \              /
     \   听众位置  /
     /            \
左环绕 (SL)    右环绕 (SR)
         
     低音炮 (LFE) ------ 位置不固定

2.5 交错存储与平面存储

描述:多声道 PCM 数据在内存中有两种排列方式,这个概念在 FFmpeg 开发中非常重要。

交错存储(Interleaved):不同声道的样本交替排列。

复制代码
左样本1 | 右样本1 | 左样本2 | 右样本2 | 左样本3 | 右样本3 | ...
  L1       R1       L2       R2       L3       R3

所有声道的数据存放在 AVFrame 的 data[0] 中

平面存储(Planar):每个声道的样本独立存放在连续的内存区域中。

复制代码
data[0]: L1 | L2 | L3 | L4 | L5 | ...    ← 左声道全部样本
data[1]: R1 | R2 | R3 | R4 | R5 | ...    ← 右声道全部样本

每个声道的数据分别存放在 AVFrame 的 data[0]、data[1]、data[2]... 中

FFmpeg 中大多数解码器输出的是平面格式(如 AV_SAMPLE_FMT_FLTP),而大多数音频播放设备要求交错格式(如 AV_SAMPLE_FMT_S16),因此通常需要用 swresample 库进行转换

2.6 音频帧(Audio Frame)

描述:音频编解码器不是逐个样本处理的,而是以"帧"为单位。一个音频帧包含固定数量的采样点(称为 nb_samples 或 frame_size)。

常见编码器的每帧样本数

复制代码
AAC       :1024 个样本/帧
MP3       :1152 个样本/帧
Opus      :可变(120 / 240 / 480 / 960 / 1920 / 2880)
PCM(无压缩):无固定帧大小,可自定义

一帧音频数据的大小计算

复制代码
帧数据大小 = 每帧样本数 × 声道数 × 每样本字节数

例:AAC 解码后(S16 立体声)
1024 × 2 × 2 = 4096 字节

2.7 音频数据量计算

描述:未压缩 PCM 的数据量可以精确计算。

公式

复制代码
每秒数据量 = 采样率 × 声道数 × 每样本字节数(字节/秒)
每秒数据量 = 采样率 × 声道数 × 位深 / 8(字节/秒)

示例 ------ CD 质量音频(44100Hz / 16bit / 立体声)

复制代码
每秒数据量 = 44100 × 2 × 16 / 8 = 176400 字节/秒 ≈ 172 KB/s
一分钟数据量 = 176400 × 60 = 10584000 字节 ≈ 10.1 MB
一首 4 分钟的歌 ≈ 40.3 MB(未压缩)

这就是为什么需要音频压缩编码 ------ 一首未压缩的歌曲约 40MB,而 MP3 压缩后仅约 4MB,AAC 压缩后可以更小

3 分贝与响度

3.1 分贝(dB)

描述:分贝是一个对数单位,用于衡量信号的强度比值,而非绝对值。

公式

复制代码
dB = 20 × log10(信号幅度 / 参考幅度)

关键数值

复制代码
0 dB    :信号等于参考值
-6 dB   :信号幅度减半(体感音量略有下降)
-20 dB  :信号幅度降为 1/10
+6 dB   :信号幅度翻倍

3.2 dBFS(分贝满量程)

描述:数字音频中以满量程(Full Scale)为参考点,0 dBFS 是数字系统能表示的最大幅度,所有信号值都 ≤ 0 dBFS。

数字音频中如果信号超过 0 dBFS 就会产生"削波失真"(Clipping),表现为刺耳的爆音

3.3 响度标准(LUFS / LKFS)

描述:LUFS(Loudness Units relative to Full Scale)是感知响度的度量标准,考虑了人耳对不同频率的灵敏度差异。

常见平台的响度标准

复制代码
YouTube    :-14 LUFS
Spotify    :-14 LUFS
Apple Music:-16 LUFS
广播电视    :-24 LUFS(EBU R128 标准)

FFmpeg 中可以使用 loudnorm 滤镜将音频标准化到指定的 LUFS 值

4 常见音频编码格式对比

4.1 无损格式

WAV(PCM)

复制代码
压缩方式 :无压缩
文件大小 :极大(约 10MB/分钟,CD 质量)
质量     :完美保留原始数据
用途     :录音、音频编辑的中间格式
容器     :.wav

FLAC

复制代码
压缩方式 :无损压缩
压缩比   :约 50%~70%(原始大小的一半左右)
质量     :与原始 PCM 完全一致
用途     :高品质音乐存储与分发
容器     :.flac

ALAC(Apple Lossless)

复制代码
压缩方式 :无损压缩
压缩比   :与 FLAC 接近
质量     :与原始 PCM 完全一致
用途     :Apple 生态系统
容器     :.m4a

4.2 有损格式

MP3

复制代码
压缩方式  :有损压缩(利用心理声学模型去除人耳不敏感的信号)
常见码率  :128kbps(一般)、192kbps(较好)、320kbps(最高)
压缩比    :约 1:10(CD 质量 → 128kbps)
兼容性    :最广泛,几乎所有设备支持
用途      :音乐分发、网络音频
容器      :.mp3

AAC(Advanced Audio Coding)

复制代码
压缩方式  :有损压缩(MP3 的继任者,效率更高)
常见码率  :96kbps ~ 256kbps
优势      :同码率下质量优于 MP3
用途      :流媒体(YouTube、Apple Music)、视频音轨(MP4 默认音频编码)
容器      :.m4a / .mp4 / .aac

Opus

复制代码
压缩方式  :有损压缩(目前最先进的通用音频编码)
码率范围  :6kbps ~ 510kbps
优势      :低延迟(适合实时通信)、低码率下质量远超 MP3 和 AAC
用途      :WebRTC 语音通话、Discord、在线会议、流媒体
容器      :.opus / .ogg / .webm

Vorbis

复制代码
压缩方式  :有损压缩(开源免专利费)
常见码率  :128kbps ~ 320kbps
优势      :开源免费,质量接近 AAC
用途      :游戏音效、开源项目
容器      :.ogg

4.3 格式对比总结

格式 类型 压缩效率 延迟 兼容性 适用场景
WAV 无损 无压缩 极广 录音/编辑中间格式
FLAC 无损 约 50%~70% 广 高品质音乐存储
MP3 有损 约 1:10 最广 通用音乐分发
AAC 有损 优于 MP3 约 30% 广 流媒体/视频音轨
Opus 有损 最高(低码率极优) 极低 实时通信/流媒体
Vorbis 有损 接近 AAC 游戏/开源项目

5 用 FFmpeg 验证音频概念

5.1 查看音频文件信息

使用 ffprobe 可以查看音频文件的详细信息:

bash 复制代码
ffprobe -i input.mp3

输出中的关键字段:

复制代码
Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 320 kb/s
                      ^^^  ^^^^^^^^^  ^^^^^^  ^^^^  ^^^^^^^
                    编码器  采样率     声道    样本格式  码率

5.2 PCM 原始数据的播放

使用 ffplay 播放 PCM 原始数据时必须手动指定参数(因为 PCM 没有文件头信息):

bash 复制代码
# 播放一个 44100Hz、16位有符号小端序、双声道的 PCM 文件
ffplay -f s16le -ar 44100 -ac 2 input.pcm

参数说明:

复制代码
-f s16le  :样本格式(s=有符号,16=16位,le=小端序)
-ar 44100 :采样率
-ac 2     :声道数

尝试修改 -ar 的值(比如改成 22050 或 88200)播放同一个文件,你会直观地听到采样率对声音的影响 ------ 22050 会变成低沉的慢放效果,88200 会变成尖锐的快进效果

5.3 格式转换

bash 复制代码
# WAV 转 MP3(指定码率 320kbps)
ffmpeg -i input.wav -c:a libmp3lame -b:a 320k output.mp3

# WAV 转 AAC(指定码率 192kbps)
ffmpeg -i input.wav -c:a aac -b:a 192k output.m4a

# MP3 转 WAV(解码为无压缩 PCM)
ffmpeg -i input.mp3 output.wav

# 提取视频中的音频并转为 MP3
ffmpeg -i video.mp4 -vn -c:a libmp3lame -b:a 192k output.mp3

# 将音频重采样为 16000Hz 单声道(常用于语音识别预处理)
ffmpeg -i input.wav -ar 16000 -ac 1 output_16k_mono.wav

5.4 提取 PCM 原始数据

bash 复制代码
# 从 MP3 中提取 PCM(S16LE 格式)
ffmpeg -i input.mp3 -f s16le -acodec pcm_s16le output.pcm

# 从视频中提取 PCM(指定采样率和声道)
ffmpeg -i video.mp4 -vn -f s16le -ar 44100 -ac 2 output.pcm

提取的 .pcm 文件是没有文件头的纯原始数据,播放时必须手动指定采样率、位深和声道数,否则无法正确解析(类似第一篇中的 .rgb 原始数据需要指定分辨率)

相关推荐
sp_fyf_20242 小时前
【大语言模型】 AVGen-Bench:一个用于文本到音频-视频生成的多粒度、任务驱动型评估基准
人工智能·深度学习·神经网络·机器学习·语言模型·数据挖掘·音视频
山栀shanzhi2 小时前
【FFmpeg实战】手撕音频转码:WAV转AAC的全链路解析与C++实现
ffmpeg·音视频·aac
lq12332103 小时前
视频AI超分辨率转换器Topaz Video Pro 1.3.1
音视频
EasyDSS14 小时前
智能会议管理系统/私有化视频会议平台EasyDSS私有化部署构建企业级私域视频全场景解决方案
人工智能·音视频
潜创微科技17 小时前
切换器芯片主要型号有哪些:潜创微高清音视频领域主流型号与应用场景全解析
音视频
KevinCyao18 小时前
106视频短信接口怎么发?支持高清影音下发的106视频短信服务商
音视频
潜创微科技--高清音视频芯片方案开发18 小时前
2026年切换器方案服务商市场格局分析与主流品牌选型指南
音视频·硬件工程
潜创微科技--高清音视频芯片方案开发19 小时前
2026年高清音视频切换器方案选型分
音视频
二等饼干~za89866820 小时前
源码可控:云罗 GEO 源头工厂,开源搭建 + 二次开发全链路解决方案
服务器·开发语言·开源·php·音视频·ai-native