[FFmpeg] MPEG-4 與 QuickTime 檔案格式

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
2015-08-27 16:58 發佈
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?