为什么是"视频"而不只是 MP4
文件是什么格式,取决于它是谁产出的。iPhone 给你 MOV,下载来的往往是 MKV, 浏览器录屏给的是 WebM,老式摄像机采集出来的是 AVI,录电视信号得到的是 TS。 这些全都是容器,里面都包着一条可以取出来的音频流。
这正是"视频转 MP3"这件事应该交给一个能读所有容器的工具、而不是只认识 MP4 的工具的 原因。真正必须成功的那一步是解封装,而每种格式的解封装都不一样。不管手上是什么格式, 要做的事都一样:从视频提取音频,再编码成目标格式。所以视频转音频这件事的难点 从来不在编码,而在读得懂那个容器。
各种容器里装的是什么
容器本身几乎不能告诉你音频编码是什么。大致规律是:
- MP4 和 MOV 里基本都是 AAC
- WebM 里是 Opus,老一些的文件是 Vorbis
- MKV 什么都能装,包括无损的 FLAC
- AVI 里通常是 MP3 或 AC-3
- 录制的 TS 流里一般是 AC-3 或 AAC
这个区别有一个很实际的用处。如果你的 MKV 里恰好装的是 FLAC,那么把它转成 MP3 就是一次从无损素材出发的首次编码,选 320 kbps 会非常好听。反过来,如果 WebM 里 装的是 96 kbps 的 Opus,那么任何 MP3 码率都补不回 Opus 已经丢掉的东西,选 320 只会得到一个更大的文件而已。
采样率、声道和元数据
源文件的采样率原样保留,不会统一重采样到 48 kHz;单声道的素材仍然是单声道, 不会被复制成两条一模一样的声道。标题和艺术家标签,只要容器里写了就会带过去。
如果一个视频里有多条音轨(比如带双语配音的 MKV),取出来的是容器里排在最前面的 那一条,也就是播放器默认播的那一条。想要另一条的话,这个页面帮不上忙, 需要用桌面版的 ffmpeg 明确指定要哪一条流。
500 MB 以内的文件都能处理,单个片段基本都够用。再大浏览器标签页就装不下整个容器了, 所以工具会在开始之前就说清楚,而不是转到一半突然中止。真要处理一场两小时的录像, 先把需要的那段剪出来,再做视频转 MP3 这一步。