如需支持多个浏览器,您需要使用 FFmpeg 将您的 .mov
文件转换为两个不同的容器:MP4 容器和 WebM 容器。在实际操作中,您可能会同时指定编解码器。目前,我们让 FFmpeg 使用其默认值。
如果您不熟悉这些概念,建议您先阅读媒体文件基础知识,然后再继续学习。此外,如果您尚未安装 FFmpeg,请阅读媒体应用基础知识,以设置 Docker。
我们使用建议的 Docker 安装和 为 Web 准备媒体文件(添加到 media
目录内)中的 glocken.mov 文件。我们对本部分中的所有命令都使用了 FFmpeg 版本 4.3.2。
容器
首先,我们需要基于 .mov
文件创建两个文件扩展名为 .mp4
和 .webm
的容器,该文件中同时包含音频流和视频流。如果您不清楚容器和流之间的区别,请参阅媒体文件基础知识,以详细了解容器和流。
MP4
/media # ffmpeg -i glocken.mov glocken.mp4
WebM
/media # ffmpeg -i glocken.mov glocken.webm
相比 MP4,WebM 的制作时间要长。查看结果时,这并不奇怪。虽然 MP4 可压缩至原始文件大小的大约 83%
,但 WebM 缩减到原始文件大小的 78%
,但可以小得多。您实际获得的结果会有所不同。请务必注意,FFmpeg 4.2.2
会将默认视频比特率设置为 200k
,而在 4.3.2
中,它不会设置默认比特率。因此,视频不再是原视频4%
的纯粹内容。您可以使用媒体文件所在文件夹中的 ls -a
bash 命令自行查看此信息。
例如:
/media # ls -l
-rw-r--r-- 1 root root 12080306 Mar 7 12:16 glocken.mov
-rwx------ 1 root root 10106446 Mar 7 12:33 glocken.mp4
-rwx------ 1 root root 9503301 Mar 7 18:30 glocken.webm
如需获得一个小文件,您可以改用以下代码:
/media # ffmpeg -i glocken.mov -b:v 200k glocken.webm
...
frame= 300 fps=3.6 q=0.0 Lsize= 483kB time=00:00:10.01 bitrate= 395.0kbits/s speed=0.121x
video:359kB audio:117kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.356068%
/media # ls -l
-rw-r--r-- 1 root root 12080306 Mar 7 12:16 glocken.mov
-rwx------ 1 root root 10106446 Mar 7 12:33 glocken.mp4
-rwx------ 1 root root 494497 Mar 7 18:45 glocken.webm
检查您的工作
如需验证您的结果,请使用 FFmpeg 和 Shaka Packager(如媒体应用基础知识中所示):
/media # packager input=glocken.mp4 --dump_stream_info
/media # ffmpeg -i glocken.mp4
编解码器
接下来是编解码器。如媒体文件基础知识中所述,编解码器与容器(文件类型)不同。同一容器类型的两个文件可以保存使用不同的编解码器压缩的数据。例如,WebM 格式允许使用 Vorbis 或 Opus 对音频进行编码。要更改编解码器
可以使用 FFmpeg例如,此命令会输出一个包含 vorbis
音频编解码器和 av1
视频编解码器的 .mkv
文件。
/media # ffmpeg -i glocken.mov -c:a vorbis -c:v av1 glocken.mkv
在此示例中,-c:a
标志和 -c:v
分别用于指定音频和视频编解码器。
媒体转换页面列出了转换编解码器所需的命令。下表汇总了 FFmpeg 中用于对 WebM 和 MP4 文件执行编解码器转换的库。下面分别是针对 DASH 和 HLS 推荐的格式。
视频
编解码器 | 扩展程序 | 媒体库 |
---|---|---|
av1 | WebM、mkv | libaom-av1 |
h264 | MP4 | libx264 |
vp9 | WebM | libvpx-vp9 |
音频
编解码器 | 扩展程序 | 媒体库 |
---|---|---|
aac | MP4 | aac |
作品 | WebM | Libopus |
沃尔比斯 | WebM | libvorbis |
接下来,我们将介绍如何更改新创建的文件的比特率。