在本文中,我們將介紹一些用於轉換及操控媒體檔案特性的常見指令。雖然我們已嘗試顯示所有程序的對等作業,但並非所有作業都可以執行。
在許多情況下,我們顯示的指令可能會合併在單一指令列作業中,而且實際使用時。例如,您可以在與檔案轉換相同的作業中,設定輸出檔案的位元率。為了清楚起見,在本文中,我們經常將這些作業顯示為個別指令。
系統會透過下列應用程式完成轉換:
- Shaka Packager (位於 Stack Overflow)
- FFmpeg (在 Stack Overflow 上)
螢幕顯示特性
Shaka Packager 和 FFmpeg 均可用來檢查媒體檔案的內容,然後顯示串流的特性。不過,兩者會為同一個媒體提供不同的輸出內容。
使用 Shaka Packager 的特色
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
使用 FFmpeg 的特性
ffmpeg -i glocken.mp4
輸出內容如下所示:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'glocken.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.83.100
Duration: 00:00:10.03, start: 0.000000, bitrate: 8063 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1920x1080, 7939 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, 127 kb/s (default)
Metadata:
handler_name : SoundHandler
At least one output file must be specified
Demux (獨立) 音訊及視訊串流
Shaka Packager 在轉換檔案時需要 demux。使用媒體架構時也需要完成。
Shaka Packager demuxing
MP4
packager input=myvideo.mp4,stream=video,output=myvideo_video.mp4
packager input=myvideo.mp4,stream=audio,output=myvideo_audio.m4a
或:
packager \
input=myvideo.mp4,stream=video,output=myvideo_video.mp4 \
input=myvideo.mp4,stream=audio,output=myvideo_audio.m4a
WebM
packager \
input=myvideo.webm,stream=video,output=myvideo_video.webm \
input=myvideo.webm,stream=audio,output=myvideo_audio.webm
FFmpeg demuxing
MP4
ffmpeg -i myvideo.mp4 -vcodec copy -an myvideo_video.mp4
ffmpeg -i myvideo.mp4 -acodec copy -vn myvideo_audio.m4a
WebM
ffmpeg -i myvideo.webm -vcodec copy -an myvideo_video.webm
ffmpeg -i myvideo.webm -acodec copy -vn myvideo_audio.webm
Remux (結合) 音訊及視訊串流
在某些情況下,您必須將音訊和影片重新合併到單一容器中。尤其在不使用媒體架構時更是如此。這是 FFmpeg 可以相當妥善處理,但是 Shaka Packager 目前不支援這項功能。
ffmpeg -i myvideo_video.webm -i myvideo_audio.webm -c copy myvideo.webm
變更特性
位元率
針對 FFmpeg,我們可以在轉換為 .mp4
或 .webm
的同時執行這項操作。
ffmpeg -i myvideo.mov -b:v 350K myvideo.mp4
ffmpeg -i myvideo.mov -vf setsar=1:1 -b:v 350K myvideo.webm
尺寸 (解析度)
ffmpeg -i myvideo.webm -s 1920x1080 myvideo_1920x1080.webm
檔案類型
Shaka Packager 無法處理 .mov
檔案,因此無法用來轉換該格式的檔案。
.mov
到.mp4
ffmpeg -i myvideo.mov myvideo.mp4
.mov
到.webm
ffmpeg -i myvideo.mov myvideo.webm
同步處理音訊和視訊
為了確保音訊和視訊在播放期間會保持同步,請插入主要畫面格。
ffmpeg -i myvideo.mp4 -keyint_min 150 -g 150 -f webm -vf setsar=1:1 out.webm
MP4/H.264
ffmpeg -i myvideo.mp4 -c:v libx264 -c:a copy myvideo.mp4
MP4 音訊
ffmpeg -i myvideo.mp4 -c:v copy -c:a aac myvideo.mp4
WebM/VP9
ffmpeg -i myvideo.webm -v:c libvpx-vp9 -v:a copy myvideo.webm
WebM 適用的音訊
ffmpeg -i myvideo.webm -v:c copy -v:a libvorbis myvideo.webm
ffmpeg -i myvideo.webm -v:c copy -v:a libopus myvideo.webm
隨選影片和直播
本文將示範兩種串流通訊協定。第一種是透過 HTTP 的動態自動調整串流 (DASH),這項可自動調整的位元率串流技術和以網路標準為基礎的方法,可呈現隨選影片。第二個是 HTTP 即時串流 (HLS),這是 Apple 針對網站直播和隨選影片所製定的標準。
數字面板/MPD
這個範例會從音訊和視訊串流產生媒體顯示說明 (MPD) 輸出檔案。
packager \
input=myvideo.mp4,stream=audio,output=myvideo_audio.mp4 \
input=myvideo.mp4,stream=video,output=myvideo_video.mp4 \
--mpd_output myvideo_vod.mpd
HLS
這些範例會從音訊串流和視訊串流產生 M3U8
輸出檔案,即 UTF-8 編碼的多媒體播放清單。
ffmpeg -i myvideo.mp4 -c:a copy -b:v 8M -c:v copy -f hls \
-hls_time 10 -hls_list_size 0 myvideo.m3u8
或:
packager \
'input=myvideo.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \
'input=myvideo.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
--hls_master_playlist_output="master_playlist.m3u8"
我們現在希望清楚瞭解如何轉換檔案了,現在可以根據在本文中學到的內容進行建構,接著就來認識媒體加密。