容器和编解码器

Derek Herman
Derek Herman
Joe Medley
Joe Medley

如需支持多种浏览器,您需要使用 FFmpeg 将 .mov 文件转换为两个不同的容器:MP4 容器和 WebM 容器。在实际操作中,您可能同时指定编解码器。目前,我们将让 FFmpeg 使用其默认值。

如果您对这些概念不太熟悉,请先阅读媒体文件基础知识,然后再继续。此外,如果您未安装 FFmpeg,请参阅媒体应用基础知识,了解如何使用 Docker 进行设置。

我们将使用建议的 Docker 安装,并将为网站准备媒体文件中的 glocken.mov 文件添加到 media 目录中。我们在本部分的所有命令中都使用了 FFmpeg 4.3.2 版。

首先,我们需要使用 .mp4.webm 文件扩展名从 .mov 文件创建两个容器,并在文件中添加音频和视频串流。如果您不了解容器和数据流之间的区别,请参阅媒体文件基础知识,详细了解容器和数据流。

  1. MP4

    /media # ffmpeg -i glocken.mov glocken.mp4
    
  2. WebM

    /media # ffmpeg -i glocken.mov glocken.webm
    

创建 WebM 所需的时间比 MP4 长。查看结果后,您会发现这并不奇怪。虽然 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

检查您的工作

如需验证结果,请使用 Media Application basics 中介绍的 FFmpeg 和 Shaka Packager:

/media # packager input=glocken.mp4 --dump_stream_info
/media # ffmpeg -i glocken.mp4

编解码器

接下来是编解码器。如媒体文件基础知识中所述,编解码器不同于容器(文件类型)。两个同容器类型的文件可以包含使用不同编解码器压缩的数据。例如,WebM 格式允许使用 VorbisOpus 编码音频。如需更改编解码器,我们使用 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
opus WebM libopus
vorbis WebM libvorbis

接下来,我们将向您展示如何更改新创建的文件的比特率