在之前的文章: 【小編教室】什麼是位元率 (Bitrate)? 如何壓縮影音至適合上傳網站的大小 中,我們有簡單的介紹了位元率 (Bitrate) 的概念,以及如何用位元率將影像壓縮到剛好適合在網路上播放。
但文章中的教學只限 Windows 平台上的「格式工廠」軟體,並沒有 Mac 中的教學。在 Mac 環境中,比較少合適的免費軟體可以向格式工廠那樣無差別轉換,但還是有付費軟體的選項。
Handbrake (免費)
以上轉檔軟體都是支援 Mac 的多功能轉檔軟體,您可以先從免費試用版開始嘗試,喜歡的話就付費支援吧。
今天這篇文章,則是要介紹如何用命令列的 ffmpeg
做轉檔,如果是對稍微有程式底子的人,或是不排斥學習一下命令列操作的人來說,會是很方便的影片處理工具。
什麼是 ffmpeg?
FFmpeg 是一個開放原始碼的自由軟體,可以執行音訊和視訊多種格式的錄影、轉檔、串流功能,他內部搭載了 libavcodec ,一個用於多個專案中音訊和視訊的解碼器函式庫,以及libavformat ,一個音訊與視訊格式轉換函式庫。
Ffmpeg 支援的影片格式包含 AVI, FLV, GIF, HLS, M2V, MPEG, MP4, OGG, MOV 等等高達數十種格式,幾乎是全功能影片轉檔工具。因此被內建在大多數的影音播放器、影音轉檔工具中。許多GUI影片處理軟體,可能背後就是靠 ffmpeg 作為引擎的。
在 Mac 上安裝 ffmpeg
命令列安裝
已經熟悉 Mac 命令列的人,可以用 brew 或 Mac port 下載
Brew 下載
brew update
brew update
brew install ffmpeg
Mac Port 下載
sudo port install ffmpeg
官網下載安裝
您也可以直接前往官網,下載預先包好的執行檔。 官網下載頁面
點擊 zip 下載
下載後,可以先解壓縮,會看到 ffmpeg 的執行檔
你可以先點擊兩下嘗試打開他,應該會見到以下警告。這是只有zip下載版才會出現的警告,命令列不會出現。
我們前往 系統設定 > 隱私與安全性,滑到下面找到允許的應用程式區塊,按下「強制打開」。接著回去再次點擊ffmpeg,會出現第二個警告視窗,選擇「打開」即可。
如果看到這個畫面,就表示可以用了,然後可以關掉視窗。
開始使用 ffmpeg
接下來的操作,會預設您已經初步了解命令列或終端機的使用方式。如果您尚未熟悉操作方法,但有想學習如何使用 ffmpeg,可以搜尋網路上的終端機教學,對照著使用。
首先,如果是用 brew or port 安裝的 ffmpeg,在命令列下面應該可以直接呼叫。
如果是下載的,可以先執行以下指令把 ffmpeg 放到全域路徑內。
mv ffmpeg /usr/local/bin
然後執行以下指令
ffmpeg -h
應該會看到
這樣就表示可以用了。
下載測試影片
我們接下來的影片,都用開源的 Big Buck Bunny 來做測試,可以從這裡下載到 2K & 4K 的版本,我們選擇 bbb_sunflower_1080p_30fps_normal.mp4.zip 作為測試用。如果要下載其他版本,請見官網 Download 頁面。
開始轉檔
轉成其他格式
我們先將示範影面檔案改名成 origin.mp4
,接著輸入以下指令
ffmpeg -i origin.mp4 -f mov -o output.mp4
-i
是輸入的檔案路徑與名稱
-f
是想要輸出的格式
最後面是輸出的檔案路徑與名稱
接著就會看到轉檔畫面
也可以加上 -y
表示有同名檔案就直接覆蓋
更多範例
# 轉檔成 ogg 格式並強制覆蓋
ffmpeg -i origin.mp4 -y -f ogg output.ogg
# 轉檔成 webm 格式並強制覆蓋
ffmpeg -i origin.mp4 -y -f webm output.webm
更改長寬解析度
使用 -s
參數
下面的指令示範了只更改長寬,不做轉檔,原樣輸出 mp4
ffmpeg -i origin.mp4 -y -s 1280x720 output.mp4
如果要同時轉檔,就再把 -f
家回去即可
更改 FPS (影格率)
用 -r
修改影格率
ffmpeg -i origin.mp4 -y -s 1280x720 -r 24 output.mp4
更改位元率 (Bitrate)
使用以下參數設定位元率
-b:v
設定位元率,可以直接寫 1200k
或 1M
的單位,讓 ffmpeg 換算
下面的示範我們用之前文章建議的 1M 作為 720p 的 Bitrate。(如果您想要更明顯的看到成效,可以先用 200k 試試看。)
ffmpeg -i origin.mp4 -y -s 1280x720 -b:v 1M output.mp4
使用 CBR 模式
ffmpeg 預設是採用變動位元率的,會依照當下影片畫質變更位元率。我們也可以採用恆定位元率 (CBR) 模式,需要以下參數
-maxrate
設定最高位元率
-minrate
設定最低位元率
-bufsize
指定速率控制緩衝區大小,有助於根據 b:v、maxrate 和 minrate 的值維持位元率
以下指令可以強制控制位元率為固定值:
ffmpeg -i origin.mp4 -y -b:v 1M -maxrate 1M -minrate 1M -bufsize 1M output.mp4
更多 ffmpeg 指令
ffmpeg 的功能不僅只如此而已,針對每種影片格式與編碼器,都還可以設定更多不同種類的詳細參數。我們先列出常見的參數供參考:
基本參數
-i
——設定輸入檔名。-f
——設定輸出格式。-y
——若輸出檔案已存在時則覆蓋檔案。-fs
——超過指定的檔案大小時則結束轉換。-t
——指定輸出檔案的持續時間,以秒為單位。-ss
——從指定時間開始轉換,以秒為單位。-ss
和-t
一起使用時代表從-ss
的時間開始轉換持續時間為-t
的影片,例如:-ss 00:00:01.00 -t 00:00:10.00
即從00:00:01.00
開始轉換到00:00:11.00
。-title
——設定標題。-timestamp
——設定時間戳。-vsync
——增減Frame使影音同步。-c
——指定輸出檔案的編碼。-metadata
——更改輸出檔案的元資料。-help
——檢視幫助資訊。
影像參數
-b:v
——設定影像流量,預設為200Kbit/秒。(單位請參照下方注意事項)-r
——設定影格率值,預設為25。-s
——設定畫面的寬與高。-aspect
——設定畫面的比例。-vn
——不處理影像,於僅針對聲音做處理時使用。-vcodec( -c:v )
——設定影像編解碼器,未設定時則使用與輸入檔案相同之編解碼器。
聲音參數
-b:a
——設定每Channel(最近的SVN版為所有Channel的總合)的流量。(單位請參照下方注意事項)-ar
——設定採樣率。-ac
——設定聲音的Channel數。-acodec ( -c:a )
——設定聲音編解碼器,未設定時與影像相同,使用與輸入檔案相同之編解碼器。-an
——不處理聲音,於僅針對影像做處理時使用。-vol
——設定音量大小,256為標準音量。(要設定成兩倍音量時則輸入512,依此類推。)
更多請見
FFmpeg 簡易指令產生器
由於 Ffmpeg 的指令實在太多太繁雜了,甚至許多指令會根據編碼器有所不同,這裡提供一個好用的 ffmpeg 線上指令產生器,讓您可以方便的輸入所需參數,然後轉換成可以用的指令:
傳送門: FFmpeg 線上指令產生器