📄 一句话概括
封装格式的差别主要在【索引放在哪】与【能装哪些编码】——要边下边播选 TS/FLV,要通用分发选 MP4。
📝 本节和前面几节的关系
5.2.2 讲了封装里装什么,这一节讲常见的几种壳各有什么脾性。
一、MP4:通用分发的主力
MP4 是点播与分发的通用格式,几乎所有设备与平台都支持。 它的结构由一个个【盒子】(box)组成,索引放在 moov 盒里。 moov 在前在后,体验差别很大:在前可以边下边播,在后必须下完。
二、MKV:能装得最多
MKV 的结构非常灵活,能装任意多条音轨、字幕与章节。 它是本地收藏的常见选择:一部电影装七八条字幕轨毫无压力。 代价是兼容性不如 MP4——某些老设备不认。
三、TS 与 FLV:为【边来边播】而生
TS 用定长包组织数据,没有全局索引,拿到哪一段就能解哪一段。 FLV 结构极简,头之后就是一串 Tag,按顺序读就行。 两者都不依赖文件全局结构,所以特别适合直播与边下边播。
四、AVI:知道它老在哪就行
AVI 是早期格式,索引机制弱,对大文件支持差。 今天遇到 .avi,多半是老素材或老软件导出的。 处理它的思路很简单:先转成 MP4 或 MKV,再走后面的流程。
五、动手 Demo:常见封装格式怎么选
封装格式的差别,主要在【索引放在哪】与【支持哪些编码】。
rows = [("MP4", "索引(moov)可在头或尾", "点播、通用分发"),
("MKV", "结构灵活,能装多条流", "本地收藏、多字幕"),
("AVI", "结构老,索引弱", "老素材、老软件"),
("FLV", "头短,按 Tag 顺序读", "直播推流"),
("TS", "定长包,无全局索引", "直播、广播")]
for a, b, c in rows:
print("%-5s %-22s %s" % (a, b, c))
实跑输出:
--------------------------------------------------------------------
常见封装格式怎么选
--------------------------------------------------------------------
封装格式的差别,主要在【索引放在哪】与【支持哪些编码】。
格式 结构特点 常见用途
---------------------------------------------------
MP4 索引(moov)可在头或尾 点播、通用分发
MKV 结构灵活,能装多条流 本地收藏、多字幕
AVI 结构老,索引弱 老素材、老软件
FLV 头短,按 Tag 顺序读 直播推流
TS 定长包,无全局索引 直播、广播
一句判断:**要边下边播,选 TS/FLV;要通用分发,选 MP4。**
MP4 的 moov 若在文件尾部,**就得下完才能播**——这是常见坑。
一句判断:要边下边播,选 TS/FLV;要通用分发,选 MP4。 MP4 的 moov 若在文件尾部,就得下完才能播——这是常见坑。
30 秒实验
- 把一段直播录屏(FLV)与一段本地视频(MP4)各读一次。
- 比较它们的索引机制有什么不同。
常见误区
- 以为 MKV 比 MP4【高级】。兼容性上 MKV 反而更差。
- 拿 AVI 做大文件分发。它的索引机制撑不住。
自测三问(点开对答案)
1. MP4 与 MKV 的主要差别是什么? —— MKV 结构更灵活、能装更多条流;MP4 通用性更好。 2. TS 与 FLV 为什么适合直播? —— 它们不依赖文件全局结构,拿到哪段就能解哪段。 3. MP4 的 moov 放在文件尾会怎样? —— 必须下完整个文件才能开始播放。- ☐ 下一节(5.3.1 视频编码基础知识)
相关笔记
- 音视频的封装 — 壳里面装了什么
- FLV简介 — FLV 那只壳拆开看
- 音视频容器 — 容器这件事的起点
- 🎬 FFmpeg入门详解 · 索引