FFmpeg 编解码器(Codec)详解
FFmpeg 支持数百种编解码器,涵盖视频、音频和字幕。以下是核心分类、常用编解码器及其应用场景的全面解析:
1. 编解码器基础概念
2. 视频编解码器
(1) 常用视频编码器
编码器 |
格式 |
特点 |
适用场景 |
libx264 |
H.264 |
高兼容性,平衡画质与体积,支持硬件加速 |
直播、点播、通用视频 |
libx265 |
H.265 |
比 H.264 节省 50% 码率,但计算复杂度高 |
4K/HDR、存储受限场景 |
libvpx-vp9 |
VP9 |
开源,WebM 格式标准,适合 Web 端 |
YouTube、HTML5 视频 |
libaom-av1 |
AV1 |
下一代开源编码器,压缩率优于 VP9/H.265 |
未来流媒体、超高清 |
mpeg4 |
MPEG-4 |
兼容性好,但压缩效率低 |
老旧设备、简单编辑 |
示例:使用 libx264 编码
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset fast output.mp4
-crf 23
:画质控制(0-51,值越小画质越好)。
-preset fast
:编码速度与压缩率的权衡(ultrafast
→ slow
)。
(2) 常用视频解码器
解码器 |
格式支持 |
特点 |
h264 |
H.264/AVC |
通用硬件加速解码 |
hevc |
H.265/HEVC |
需硬件支持(如 NVIDIA NVENC) |
vp9 |
VP9 |
开源,适合 Web 媒体 |
av1 |
AV1 |
新兴格式,逐步普及 |
示例:强制使用软件解码
ffmpeg -hwaccel none -i input.mp4 -c:v copy output.mp4
3. 音频编解码器
(1) 常用音频编码器
编码器 |
格式 |
特点 |
适用场景 |
aac |
AAC |
高质量,低码率,广泛兼容 |
流媒体、移动设备 |
libmp3lame |
MP3 |
兼容性极佳,但效率低于 AAC |
音乐存档、老旧设备 |
opus |
Opus |
低延迟,适合语音和实时通信 |
WebRTC、游戏语音 |
flac |
FLAC |
无损压缩,体积大 |
音乐母带、专业音频 |
示例:编码为 AAC
ffmpeg -i input.mp4 -c:a aac -b:a 128k output.mp4
-b:a 128k
:设置音频码率为 128kbps。
(2) 常用音频解码器
解码器 |
格式支持 |
特点 |
aac |
AAC |
通用解码 |
mp3 |
MP3 |
兼容所有播放器 |
ac3 |
Dolby Digital |
多声道家庭影院 |
4. 硬件加速编解码
(1) 硬件编码器
平台 |
编码器 |
支持格式 |
NVIDIA |
nvenc |
H.264/H.265 |
Intel |
qsv |
H.264/H.265 |
AMD |
amf |
H.264/H.265 |
示例:使用 NVIDIA NVENC 编码
ffmpeg -i input.mp4 -c:v h264_nvenc -preset p7 -cq 23 output.mp4
(2) 硬件解码器
参数 |
作用 |
-hwaccel cuda |
使用 NVIDIA CUDA 加速解码 |
-hwaccel qsv |
使用 Intel Quick Sync Video |
示例:启用硬件解码
ffmpeg -hwaccel cuda -i input.mp4 -c:v copy output.mp4
5. 编解码器选择原则
- 兼容性优先:
- 视频:H.264 + AAC(最广泛支持)。
- 音频:AAC 或 MP3。
- 压缩效率:
- 实时性要求:
- 低延迟场景用
libx264 -preset ultrafast
或硬件编码。
- 开源需求:
6. 查看文件编解码信息
ffprobe -v error -show_streams input.mp4 | grep codec_name
输出示例:
codec_name=h264
codec_name=aac
7. 总结
- 视频编码:
libx264
(通用)、libx265
(高效)、libvpx-vp9
(Web)。
- 音频编码:
aac
(流媒体)、opus
(实时通信)。
- 硬件加速:
nvenc
/qsv
提升编码速度。
- 解码兼容性:优先使用原生解码器(如
h264
)。
通过合理选择编解码器,可平衡画质、体积、兼容性和性能!