这一个是真的在重新编码
视频容器之间的转换大多是"换个箱子",而不是"重新造一遍"。MP4 和 MOV 都能装 H.264 视频 流,所以在它们之间转换,实质是把这条流从一个外壳里取出来、放进另一个外壳。几秒钟完成, 而且之后每一个像素都完全相同。
MP4 转 WebM 不是这样。WebM 是从 Matroska 派生出来的容器,只接受 VP8、VP9 或 AV1 视频, 配 Vorbis 或 Opus 音频;而 MP4 里装的几乎都是 H.264 配 AAC。两边没有任何交集,所以每 一帧都要被重新解码和编码。这就是为什么这个页面承诺的单位是分钟,而 MOV 那个页面承诺的 是秒,也是为什么每一行上的进度条值得盯着看。
在你的机器上该预期什么
编码器是以 WebAssembly 单线程运行的,比你在桌面上装的多线程 ffmpeg 慢。我们自己实测, 一段 10 秒的 360p 片子连同引擎下载时间在内不到 20 秒完成。一分钟的 1080p 是好几分钟的 活,手机上还会更慢。
两个实际后果。第一,把浏览器标签页保持在前台:后台标签页的定时器会被节流,任务会卡 住,看起来会比实际慢得多。第二,如果你只需要视频中的一段,先剪再转,而不是转完再剪。
什么时候该刻意选 WebM
当目的地要求它的时候,才把 MP4 转换成 WebM。通常是三种情况之一:一个不愿意分发带专利负担编码格式的项目、一个 拒收 MP4 的上传表单,或者一个你希望不带任何授权问题的网页视频标签。所有当前浏览器都能 内联播放 WebM。
除此之外都留在 MP4。它是手机录制的格式、剪辑软件预期的格式、社交平台偏好的格式,几乎 到处都能硬件解码;如果目的地本来就收 MP4,转走只是白白付出一代画质损失。