FFmpeg
簡介與其他資料:
http://www.mobile01.com/topicdetail.php?f=510&t=3734550
其他範例:
http://www.mobile01.com/topicdetail.php?f=510&t=4487462
格式
以下為 檔案/容器 (File / Container) 格式 與 合成器 (Muxers) 所使用輸出副檔名與其所能支援封裝的視訊 (Video)、音訊 (Audio)、字幕 (Subtitle) 格式。
MPEG-4 檔案格式合成器
mp4, ismv
副檔名: .mp4
視訊格式: hevc, h.264, mpeg4
音訊格式: aac, mp3, ac3, dts
字幕格式: mov_text, dvd_subtitle
ipod
副檔名: .m4v, .m4a (只有音訊)
視訊格式: h.264, mpeg4
音訊格式: alac, aac, mp3, ac3, dts
字幕格式: mov_text, dvd_subtitle
QuickTime 檔案格式合成器
mov
副檔名: .mov, .qt
視訊格式: hevc, h.264, mpeg4
音訊格式: alac, aac, mp3, ac3, dts
字幕格式: mov_text, dvd_subtitle
大部分播放設備不支援 mov_text 格式字幕,可以將視訊重新編碼來把字幕烙印到畫面上,即 Hardsub。
Hardsub: http://www.mobile01.com/topicdetail.php?f=510&t=4462836
應用範例
重新編碼
輸出視訊、音訊、字幕格式必須被 合成器 (Muxer) 所支援才可以。
hevc + aac 封裝為 mp4 (ismv muxer):
ffmpeg -i input.mkv -c:v libx265 -c:a aac -f ismv output.mp4
hevc + alac 封裝為 mov (mov muxer):
ffmpeg -i input.mkv -c:v libx265 -c:a alac -f mov output.mov
h.264 + aac 封裝為 m4v (ipod muxer):
ffmpeg -i input.mkv -c:v libx264 -c:a alac -f ipod output.m4v
aac 封裝為 m4a (ipod muxer):
ffmpeg -i input.flac -c:a aac -f ipod output.m4a
通常不需要手定指定 muxer,所以 -f 是可以省略的,ffmpeg 將會自動依照輸出檔案的副檔名來呼叫 muxer。例如使用 .m4a 副檔名,ffmpeg 將會自動呼叫 ipod muxer 來封裝輸出。
承上,省略 -f 選項:
ffmpeg -i input.flac -c:a aac output.m4a
如果輸入視訊或音訊或字幕格式是已被輸出檔案格式所支援,則你可以 -c / -codec copy 來直接複製輸入串流至輸出檔案。
複製串流
假設 input.m2ts 內是 h.264 視訊 + TrueHD 音訊,若要複製視訊串流:
ffmpeg -i input.m2ts -c:v copy -c:a aac output.mp4
假設 input.mov 內是 h.264 視訊 + AAC 音訊,若要複製視訊與音訊串流:
ffmpeg -i input.mov -c copy output.mp4
如果要複製某一特定串流,見以下連結:
http://www.mobile01.com/topicdetail.php?f=510&t=4200388
封裝字幕
必須確認輸出檔案格式有支援輸入字幕格式才可以封裝,若輸出檔案不支援輸入字幕格式可以使用 `-c:s` 字幕格式 轉換為有支援的。例如 MP4 只有支援封裝 mov_text 與 `dvdsub` 格式,若要將 SRT 字幕插入 MP4 檔內,就必須先轉為 `mov_text` 格式。
將 srt 轉換成 mov_text 插入 mp4 檔
ffmpeg -input.mp4 -i input.srt -c copy -c:s mov_text output.mp4
將 input.idx + input.sub 插入 mp4 檔
ffmpeg -input.mp4 -i input.idx -c copy output.mp4
修改畫面顯示比例
修改顯示比例 (DisplayAspectRatio) 為 4:3
ffmpeg -i input.mp4 -c copy -aspect 4/3 output.mp4
對於網路播放優化
通常情況下,MPEG-4 與 QuickTime 檔案其詮釋資料(Metadata)位在檔案尾部,這使影片必須要被下載完成後才能開始播放,你可以將 faststart 加入 movflags 來將它移動到檔頭以得到更好的播放。除了 ffmpeg 以外,也可以使用 qt-faststart 工具來達到此目的。
將 faststart 加入 movflags:
ffmpeg -i input.mp4 -movflags +faststart -c copy output.mp4