2013年10月31日 星期四

ffmpeg使用指令轉檔



最近聽說Youtube伺服器是使用ffmpeg來做轉檔的動作,
所以稍微研究了一下,
發現除了他有指令可以做轉檔以外,還有神人提供了Java Code可以轉檔

不過這篇先說明ffmpeg指令轉檔的部分。

常用到的參數有下面幾個:
-i : 指輸入的檔案名稱,只要系統中有相對應的codec,就能使用多種格式。
-f : 強迫輸出的檔案格式。
-vcodec : 指定影像的編碼格式,這裡的libxvid指的是一般所說的xvid。
-acodec : 指定聲音的編碼格式,libmp3lame就是常用的mp3格式。
-ar : 指定聲音的取樣頻率,一般預設是44100。
-s : 畫面的解析度,格式是 wxh。
-ac : 設定聲音的聲道數。
-r : 設定fps。
-ab : 指定聲音的bitrate。
-b : 指定影像的bitrate。
-y : 強制蓋過檔案。
-pass  :  開啟2pass*模式。
-cpu-used : 設定CPU數量。
-threads : 設定執行緒數量。

那我要怎麼使用呢?

pass1:
./ffmpeg -y -i input_video.mp4 -b 5000k -s 1280x720 -cpu-used 2 -threads 4 -pass 1 -f webm output.webm

pass2:
./ffmpeg -y -i input_video.mp4 -b 5000k -s 1280x720 -cpu-used 2 -threads 4 -pass 2 -f webm output.webm


上面的指令是在說,我將輸入的影片轉成720P的影片格式,影像的bitrate為5000k,使用兩顆CPU,開啟四個執行緒,使用2pass模式,影片格式指定為WebM*,輸出檔名為output.webm。

是不是很簡單阿?那來嘗試解釋看看下面的指令在說甚麼呢?

./ffmpeg -y -i /input_video.mp4 -b 5998k -s 1920x1080 -vcodec mpeg4 -vtag XVID -acodec libmp3lame -cpu-used 2 -threads 4 -pass 1 output.avi

這個的意思是說,我將我輸入的影片轉成1080P,影像的bitrate為5000k,使用兩顆CPU,開啟四個執行緒,使用2pass模式,影片格式指定為avi(使用XVID),聲音格式使用mp3。

你答對了嗎?





*1 : 什麼是2pass?
2 pass 需要運算兩次,先進行一次全局的計算,收集畫面資料,並將這些資料記錄到暫存區。第二次重新收集畫面資料,並比對記錄先前的資料,得到最佳化的數據,進而正式進行運算,壓縮生成影像檔。
2 pass 透過第一次計算的資料收集,可以讓需要高碼流的運動畫面,可以擁有更多的資料流,來保證畫面品質。而對於連續的靜態畫面,則可以降低它的碼流。2 pass 模式可以在影片容量與畫面品質之間得到最佳平衡點。

*2: 什麼是WebM?
請參考Wiki - WebM

沒有留言:

張貼留言