用 ffmpeg 把影片檔重新封裝

所謂的影片轉檔其實有兩種。一種是把影片檔的肉(內容)解碼後再編碼,一種是把影片檔的肉從皮套(容器)裡面拿出來,重新封裝到另一個皮套裡面。

一般人比較常接觸到軟體都預設把整塊肉再編碼,我也不知道為什麼。再編碼(re-encoding)這個程序通常會造成原本影片的一些資訊流失,尤其是在 H.264 等傳輸用編碼格式之間互轉的時候。再者,解碼跟編碼都是很耗費效能跟時間的事情。如果用 GPU 或 Apple T2 晶片來做硬體編碼的話可能會快一點,但是還是需要不少時間。

其實有些時候,你並不需要再編碼。比如說你下載了一個 MKV 影片檔,但你的 Mac 裡只有 QuickTime 播放器,沒辦法播 MKV 檔。你如果跟我一樣就是想用 QuickTime 放影片的話,那你一定要把它轉成 MOV 或 MP4 檔才可以。很多人這個時候就會去找個影片轉檔軟體,設定目標格式為 MOV,就放給它轉檔了。但其實如果原本 MKV 檔的內容編碼格式是 H.264 等 macOS 原生支援的格式的話,你只要把它放到一個 MOV 容器裡面就可以給 QuickTime 播放了。這種轉檔就叫做再封裝(remux)。

實際操作

ffmpeg 是一個非常好用,功能無比強大的轉檔軟體。它的本體是命令列介面的,但是也有幾個圖形介面的皮。

ffmpeg 的基本語法大概是這樣:

ffmpeg -i 輸入檔案的路徑 -c:v 影片軌編碼格式 -c:a 聲音軌編碼格式 輸出檔案的路徑

而如果要直接把一個 MKV 檔再封裝成 MOV 的話,就直接這樣寫吧:

ffmpeg -i Video.mkv -c copy Video.mov

如果只打 -c 的話就是同時表示影片軌跟聲音軌,可能還有字幕軌之類的。

如果你打開活動監視器的話,應該會發現如果只是再封裝的話,幾乎不會耗 CPU 與 GPU 效能,而且速度超快,因為整個操作就是複製內容到一個新檔案而已。