如要支援多個瀏覽器,您必須使用 FFmpeg 將 .mov
檔案轉換為兩個不同的容器:MP4 容器和 WebM 容器。在實際操作中,您可能會同時指定編解碼。目前,我們讓 FFmpeg 使用預設值。
如果您不熟悉這些概念,請先閱讀媒體檔案基礎知識,再繼續閱讀本文。此外,如果您尚未安裝 FFmpeg,請參閱媒體應用程式基本資訊,瞭解如何透過 Docker 設定 FFmpeg。
我們使用建議的 Docker 安裝程序,並從為網路準備媒體檔案中新增的 glocken.mov 檔案,media
我們使用 FFmpeg 4.3.2 版執行本節的所有指令。
容器
首先,我們需要使用 .mp4
和 .webm
檔案副檔名,從 .mov
檔案建立兩個容器,並在檔案中加入音訊和影片串流。如果不清楚容器和串流的差異,請參閱「媒體檔案基礎知識」一文。
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 |
opus | WebM | libopus |
vorbis | WebM | libvorbis |
接下來,我們將說明如何變更新建立檔案的比特率。