一、核心概念比喻
概念 | 比喻 | 实际功能 |
---|
编解码器 | 食物的烹饪方式 | 决定视频/音频如何压缩(编码)和解压(解码),影响画质、体积和兼容性。 |
容器 | 外卖包装盒 | 封装压缩后的视频、音频、字幕等,并存储元数据(如时长、分辨率、章节信息)。 |
二、编解码器(Codec)详解
1. 什么是编解码器?
- Codec = Coder + Decoder(编码器 + 解码器)。
- 负责将原始视频/音频数据压缩(编码)为二进制流,或解压(解码)为可播放内容。
2. 常见视频编解码器
编解码器 | 特点 | 典型应用场景 |
---|
H.264/AVC | 高兼容性,平衡画质与体积 | 流媒体(YouTube、Netflix) |
H.265/HEVC | 比H.264提升50%压缩率,但计算复杂度高 | 4K/8K视频 |
AV1 | 开源免版税,压缩率优于HEVC,但编码慢 | 新一代流媒体(B站、Twitch) |
VP9 | Google开发,YouTube常用 | Web视频 |
3. 常见音频编解码器
编解码器 | 特点 |
---|
AAC | 高效音频编码,主流流媒体使用 |
MP3 | 旧式但有损压缩,逐渐被淘汰 |
Opus | 低延迟,适合实时通信(如Zoom) |
三、容器(Container)详解
1. 什么是容器?
- 一种文件格式,用于 打包 压缩后的视频、音频、字幕等数据流。
- 包含 元数据(如分辨率、帧率、音轨语言)和 同步信息(音画对齐)。
2. 常见视频容器
容器格式 | 特点 | 支持的典型编解码器 |
---|
MP4 (.mp4) | 通用性强,支持H.264/H.265+AAC | H.264, H.265, AAC, MP3 |
MKV (.mkv) | 开源灵活,支持多音轨/字幕 | 几乎所有编解码器 |
AVI (.avi) | 老旧格式,无现代功能(如章节) | MPEG-4, DivX, MP3 |
WebM (.webm) | 为Web优化,支持VP9+Opus | VP8, VP9, Opus |
3. 容器 vs 编解码器关系
- 一个容器可以包含多种编解码器的数据
例如:.mkv
文件可以同时包含 H.265视频
+ Opus音频
+ SRT字幕
。 - 同一编解码器可用于不同容器
例如:H.264视频
可以放在 .mp4
或 .mkv
中。
四、如何查看文件的编解码器和容器?
1. 使用 ffmpeg
ffmpeg -i input.mp4
输出示例:
Input #0, mov,mp4, # ← 容器是MP4Metadata:major_brand : isomStream #0:0: Video: h264 (High) (avc1 / 0x31637661) # ← 视频编解码器H.264Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D) # ← 音频编解码器AAC
2. 使用 mediainfo
(更友好)
mediainfo input.mkv
输出示例:
Format: Matroska # ← 容器是MKV
Video: HEVC, 1920x1080 # ← 视频编解码器H.265
Audio: E-AC-3, 5.1 channels # ← 音频编解码器Dolby Digital Plus
五、常见误区澄清
1. “MP4是视频格式” → 不准确!
.mp4
是容器,实际视频可能是 H.264
或 H.265
编码。- 同理,
.avi
文件可能使用 DivX
或 MPEG-4
编解码器。
2. “MKV画质更好” → 错误!
- 画质由编解码器决定,容器只影响封装功能(如字幕支持)。
- 一个
H.264
视频在 .mp4
和 .mkv
中画质完全相同。
3. “文件扩展名决定兼容性” → 部分正确
- 播放设备能否识别文件,既依赖容器也依赖编解码器。
例如:智能电视可能支持 .mp4+H.264
,但不支持 .mp4+AV1
。
六、实际应用场景
1. 选择容器
- 网络传播:用
.mp4
(兼容性最佳) - 本地存储:用
.mkv
(功能强大) - 网页嵌入:用
.webm
(免版权)
2. 选择编解码器
- 高兼容性:
H.264 + AAC
- 高压缩率:
H.265 + Opus
- 实时直播:
AV1 + Opus
3. 转换示例
ffmpeg -i input.mkv -c:v libx264 -c:a aac output.mp4
七、总结图表
维度 | 编解码器 | 容器 |
---|
作用 | 压缩/解压数据 | 封装数据流和元数据 |
影响范围 | 画质、体积、解码速度 | 功能(多轨道、章节、字幕) |
可替换性 | 同一编解码器可用于不同容器 | 同一容器可包含不同编解码器 |