容器和编解码器

Derek Herman
Derek Herman
Joe Medley
Joe Medley

要支持多种浏览器,您需要使用 FFmpeg 来转换 .mov MP4 容器和 WebM 容器。在 实际做法是,您可能会同时指定编解码器。目前, 现在我们允许 FFmpeg 使用其默认设置

如果您对这些概念还不熟悉,请先阅读 媒体文件基础知识 然后再继续学习其他部分此外,如果你没有安装 FFmpeg 媒体应用基础知识 以便使用 Docker 进行设置

我们使用的是建议安装的 Docker 针对网络准备媒体文件中的 glocken.mov 文件 添加到 media 目录内。我们之前将 FFmpeg 版本 4.3.2 用于 命令说明。

容器

首先,我们需要使用 .mp4.mov 文件创建两个容器 和 .webm 文件扩展名,且该文件内同时包含音频和视频流。 参阅媒体文件基础知识 如果您不知道容器和数据流之间的区别 。

  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

检查您的工作

要验证结果,请使用 FFmpeg 和 Shaka Packager,如 媒体应用基础知识

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

编解码器

接下来是编解码器。如媒体文件基础知识中所述,编解码器 与容器(文件类型)不同。同一容器的两个文件 可以存储使用不同的编解码器压缩的数据。WebM 格式示例 允许使用 VorbisOpus 对音频进行编码。要更改编解码器, 请使用 FFmpeg。例如,以下命令会输出包含 vorbis 音频的 .mkv 文件 编解码器和 av1 视频编解码器。

/media # ffmpeg -i glocken.mov -c:a vorbis -c:v av1 glocken.mkv

在此示例中,-c:a 标志和 -c:v 用于指定音频和 视频编解码器。

媒体转化页面会列出 转换编解码器所需的命令。下表总结了所使用的库 ,以便对 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

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