容器和编解码器

Derek Herman
Derek Herman
Joe Medley
Joe Medley

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

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

我们使用建议的 Docker 安装和 media 目录内添加的 Prepare media files for the web 中的 glocken.mov 文件。我们在本部分的所有命令中都使用了 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

接下来,我们将介绍如何更改新建文件的比特率