使用媒體時,往往需要改變媒體檔案的特性, 例如位元率或解析度找到一個簡單的方法 可能相當令人恐懼本頁面會說明使用的工具及做法 以便快速安裝
首先,我們說明兩個常見的指令列媒體公用程式的基本用法: Shaka Packager 和 FFmpeg,我們就會協助您快速安裝工具。 為何要說明兩個應用程式?雖然兩者本身功能強大且實用 也未完全做好準備網路媒體的準備。我們也建立了 媒體轉換和媒體加密 其中介紹這兩種應用程式更常執行的作業。
這些應用程式並非唯一可處理檔案操縱工作的選項。 但卻是最常見且最強大的兩種方法。其他選項包括統一發票 Miro、HandBrake 和 VLC。還提供編碼/轉碼 服務,例如 Zencoder、Amazon Elastic Encoder 和 Google Transcoder API。
夏卡套組
Shaka Packager 是免費的媒體封裝 SDK。如果使用媒體播放器 Shaka Packager 是用來準備檔案這項服務 支援兩種最常用的影片串流通訊協定轉換:動態 透過 HTTP (DASH) 或 HTTP 直播 (HLS) 自動調整串流。夏卡 Packager 支援主要的安全防護功能:通用加密和 Widevine Digital 權利管理 (DRM) 機制。還可處理直播和隨選影片。
儘管在套件中如此顯示,這項公用程式適用於超過 C++ 開發人員。可做為建構媒體軟體的程式庫, 指令列公用程式,用於準備網路播放的媒體檔案。原因是 這對我們來說非常實用事實上,對於網路媒體創作者 Shaka Packager 是只在不花錢的情況下 執行某些工作的唯一方法 昂貴商業應用程式
以下是 Shaka Packager 指令的基本模式:
packager stream_descriptor [stream_descriptor-2 [stream_descriptor-n]] [flags]
如果輸入 packager -help
,這就會出乎意料之外。以這個例子來說
方便理解 而這反映了
Shaka Packager 說明文件。請注意,有多個 stream_descriptor
物件類別雖然不會顯示,但你可以操控影片
單一指令和個別檔案的音訊串流
請比較這個基本模式與顯示檔案特性的簡單用法。 在本範例中,我們將等同的部分排列在一起。
packager stream_descriptor [stream_descriptor-n] [flags]
packager input=glocken.mp4 --dump_stream_info
指令會輸出以下內容:
File "glocken.mp4":
Found 2 stream(s).
Stream [0] type: Video
codec_string: avc1.640028
time_scale: 30000
duration: 300300 (10.0 seconds)
is_encrypted: false
codec: H264
width: 1920
height: 1080
pixel_aspect_ratio: 1:1
trick_play_factor: 0
nalu_length_size: 4
Stream [1] type: Audio
codec_string: mp4a.40.2
time_scale: 48000
duration: 481280 (10.0 seconds)
is_encrypted: false
codec: AAC
sample_bits: 16
num_channels: 2
sampling_frequency: 48000
language: eng
seek_preroll_ns: 20833
請參閱「媒體檔案基本概念」一文中討論的特性 請留意幾件事如果是 Full HD 高畫質,高度和寬度均正確 音訊和影片轉碼器是 容器類型、音訊和影片轉碼器的理想選擇 AAC (音訊音訊) 和 H264 (影片)另請注意,串流是以 數字。很適合用於操控音訊和視訊的作業 。
請注意,上述輸出內容未顯示位元率。儘管遺漏了什麼 這個輸出內容更容易閱讀,因此我們盡可能使用它。在需要時 我們使用 FFmpeg 做為 Shaka Packager 無法取得的資訊 (例如位元率)。
FFmpeg
FFmpeg 也是可用於錄製、轉換和串流播放的免費應用程式 媒體檔案它的功能比 Shaka Packager 還好或更差。 兩者稍有不同
FFmpeg 指令的基本模式如下所示:
ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output
與 Shaka Packager 類似,這個應用程式可以處理多個串流。部分 選項用於多個位置,並以不同方式操控檔案輸出內容 視指令在指令中的位置而定瞭解這點 查看 Stack Overflow 上的 FFmpeg 問題和類似網站。
我們會將基本模式與顯示檔案的範例
ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output
ffmpeg -i glocken.mp4
除了我們要求的資訊外,這也會列印錯誤訊息 ,如以下範例所示因為技術上的內容不正確 使用 FFmpeg我們之所以使用這項工具,是因為這裡顯示了我們相當重視的資訊。
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'glocken.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.17.100
Duration: 00:01:47.53, start: 0.000000, bitrate: 10715 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1920x1080, 10579 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
At least one output file must be specified
使用 Docker 安裝應用程式
如果你想依循我們的指令,可以安裝 手動操作所需工具,或依循簡單的路徑並使用 Docker。為求明確,建議你使用 Docker,因此可以節省許多時間。此外,我們還有 所提供的操作說明,協助你快速完成設定。
首先,在電腦上的任意位置建立名為
media-tools
的新目錄。 您可以自行設定名稱,但請注意以下操作說明 假設您使用media-tools
做為目錄名稱。在
media-tools
中建立docker
和media
目錄。 這會將media
目錄排除在建構環境之外。我有重要的事要說 因為media
是我們打算執行作業的檔案儲存位置,以及 但有些可能是相當大的將Dockerfile
直接放入 如果重新建構映像檔,media-tools
會降低建構映像檔的速度。 可能需要變更已安裝的版本建立
/media-tools/docker/Dockerfile
,並新增下列建構操作說明:FROM google/shaka-packager:release-v2.4.3 as packager FROM jrottenberg/ffmpeg:4.3.2-alpine38 COPY --from=packager /usr/bin /usr/bin ENTRYPOINT ["sh"]
建構映像檔:
docker build -t media-tools ./docker
將映像檔做為互動式殼層執行。在 Linux 上執行下列操作:
docker run -w /media -v ${PWD}/media:/media -it --rm media-tools /media #
Windows:
docker run -w /media -v %cd%/media:/media -it --rm media-tools /media #
執行映像檔時,你可以查看 FFmpeg 和 Shaka Packager 的版本
執行 ffmpeg -version
和
packager --version
。輸出內容應如下所示:
/media # ffmpeg -version
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 6.4.0 (Alpine 6.4.0)
configuration: --disable-debug --disable-doc --disable-ffplay --enable-shared --enable-avresample --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-gpl --enable-libass --enable-fontconfig --enable-libfreetype --enable-libvidstab --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxcb --enable-libx265 --enable-libxvid --enable-libx264 --enable-nonfree --enable-openssl --enable-libfdk_aac --enable-postproc --enable-small --enable-version3 --enable-libbluray --enable-libzmq --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-libopenjpeg --enable-libkvazaar --enable-libaom --extra-libs=-lpthread --enable-libsrt --enable-libaribb24 --extra-cflags=-I/opt/ffmpeg/include --extra-ldflags=-L/opt/ffmpeg/lib
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
/media # packager --version
packager version v2.4.3-dd9870075f-release
你已經試過使用 Shaka Packager 和 FFmpeg 的操作了,現在可以繼續 請參閱「媒體串流基本概念」一文,瞭解基本概念。