这是提取,不是转换
MP4 是一个容器。里面装着彼此独立的流:通常是一条 H.264 视频轨和一条 AAC 音频轨, 交错排列,这样播放器边下边播时能同时读到两者。所谓 MP4 转 MP3,实际做的事是从 MP4 提取音频再重新编码:找到那条音频流、把它解码,交给 MP3 编码器,视频部分直接丢弃。
这个区别能解释两件让人意外的事。第一是速度:整个过程从不解码任何画面,所以耗时只取决于 音频有多长,跟视频是不是 4K 无关。十分钟的 4K 片段和十分钟的 480p 片段,用时几乎一样。 第二是体积。400 MB 的视频转出来常常只有 9 MB 的 MP3,这不是出错了,而是那些字节本来 绝大部分都是画面。
诚实地说代价
MP4 里的音频已经被压过一次。再编成 MP3 会再丢一点,因为 MP3 编码器不知道哪些细节 之前已经被丢掉了,只能按自己的规则重新判断一遍。这叫做世代损失,也正是为什么反复转格式 会越转越差,而只转一次通常察觉不到。
实际用起来,这点代价换来的是一个几乎什么设备都能播的格式,很划算。选 192 kbps, 大多数人在自己常用的器材上听不出差别;如果这个文件要发到没法重做的地方,选 320 kbps; 如果是人声内容,128 kbps 就够,再高也换不来什么。
有一件事这个工具不会做:装样子。它保留源文件的采样率,不会统一重采样到 48 kHz; 也绝不声称能提升音质,因为解码再编码没有办法把已经消失的细节找回来。
体积、速度和上限
500 MB 以内的文件都能处理。再大浏览器标签页确实装不下整个容器,与其转到一半被系统 杀掉,不如一开始就明确告诉你。视频更大的话,先把需要的那一段剪出来。
所有计算都在本地。引擎是编译成 WebAssembly 的 ffmpeg,只下载一次,之后由浏览器缓存, 所以你转第二个文件时是立刻开始的。