2012年6月18日 星期一

OGV 影片格式轉為 MP4:使用 FFmpeg

http://darkranger.no-ip.org/content/ogv-%E5%BD%B1%E7%89%87%E6%A0%BC%E5%BC%8F%E8%BD%89%E7%82%BA-mp4%EF%BC%9A%E4%BD%BF%E7%94%A8-ffmpeg


話說今日 DR 在 Linux(Fedora 15)上使用 recordMyDesktop 錄製了一段軟體操作的影片,輸出的格式是 *.OGV,但這個格式卻沒有辦法成功上傳到 YouTube,於是打算再用 FFmpeg 轉檔,不過 FFmpeg 在沒有加參數的情況下,輸出的影片品質不是很理想,所以 DR 上網查了一下,用兩組指令轉成品質還不錯的 MP4 格式:

    ffmpeg -y -i out.ogv -sameq -s 1280x1024 -aspect 4:3 -r 30000/1001 -b 2M -bt 4M -pass 1 -vcodec libx264 -threads 0 -an -f mp4 -loglevel quiet /dev/null
    ffmpeg -y -i out.ogv -sameq -s 1280x1024 -aspect 4:3 -r 30000/1001 -b 2M -bt 4M -pass 2 -vcodec libx264 -threads 0 -async 1 -ac 2 -ab 160k -ar 48000 -loglevel quiet output.mp4



out.ogv 是輸入的檔案名稱,1280x1024 和 4:3 是影片的解析度和比例,output.mp4 則是輸出的檔案名稱。



ffmpeg轉檔
朋友說YouTube都是用ffmpeg在伺服器轉檔,因此找了一下用法:

    ffmpeg -i 原始影片檔 -f flv 輸出.flv
    另一個人寫
    ffmpeg -i 原始影片檔 -vcodec flv -acodec copy -y 輸出.flv

ffmpeg支援的格式非常多,只要輸入 ffmpeg -formats 就可以看到支援的codec,不過有些做假:P 例如codec選wmv3會失敗,只能選wmv2。

以下是我試用過的參數:
-b bitrate set video bitrate (in kbit/s)
-r rate set frame rate (Hz value, fraction or abbreviation)
-s 調整輸入大小,例如:-s 320x240
-y overwrite output files
-t duration set the recording time
-f 輸出格式

ffmpeg效果好,速度快,想架影片站的人要好好利用呀~

把影像檔案轉換成avi格式

# ffmpeg -i filename.flv -f avi -vcodec libxvid -acodec libmp3lame -ar 22050 filename.avi
參數說明:
-i : 指輸入的檔案名稱,只要系統中有相對應的codec,就能使用多種格式。
-f : 強迫輸出的檔案格式。
-vcodec : 指定影像的編碼格式,這裡的libxvid指的是一般所說的xvid。
-acodec : 指定聲音的編碼格式,libmp3lame就是常用的mp3格式。
-ar : 指定聲音的取樣頻率,一般預設是44100。(因為我是用在手機上,所以設比較低。)


把影像檔案轉換成3gp格式

# ffmpeg -i filename.avi -s qcif -vcodec h263 -acodec libfaac -ac 1 -ar 8000 -r 25 -ab 32  filename.3gp

參數說明:
-i : 指輸入的檔案名稱。
-s : 畫面的解析度。qcif指的是176x144,直接輸入長和寬也可以,格式是 wxh。
-vcodec : 指定影像的編碼格式。
-acodec : 指定聲音的編碼格式,libfaac就是指aac格式。
-ac : 設定聲音的聲道數。1指是的單聲道。
-ar : 指定聲音的取樣頻率。
-r : 設定fps。
-ab : 指定聲音的bitrate。


把影像檔轉換成flv格式

# ffmpeg -i filename.mpg -ab 56 -ar 22050 -b 500 -r 15 filename.flv

參數說明:
-i : 指輸入的檔案名稱。
-ab : 指定聲音的bitrate。
-ar : 指定聲音的取樣頻率。
-b : 指定影像的bitrate
-r : 設定fps。



將聲音檔案轉成mp3

# ffmpeg -i filename.wav -acodec libmp3lame -ar 44100 -ab 128k filename.mp3
參數說明:
-i : 指輸入的檔案名稱。
-ar : 指定聲音的取樣頻率。
-ab : 指定聲音的bitrate。
-acodec : 指定聲音的編碼格式,libmp3lame就是常用的mp3格式。如果輸出的檔案有指定mp3的話,其實這裡省略沒關係。
如果覺得原本的聲音檔音量太小的話,可以再加一個 -vol 200 的參數,會讓輸出的mp3音量變成200%,就兩倍大聲。200是百分比,可以隨意調整的。


以上幾個是很常用的格式,整理下來做成筆記,也供各位需要轉檔的人參考。
話說回來,在windows下,每次要轉檔都得想看看要找什麼軟體,比較好用的大都是要花錢買的,不過如果會用ffmpeg的話,差不多快天下無敵了,ffmpeg提供的轉檔格式和設定多到難以捉摸。現在想到要轉檔時,反而想到的是找找看ffmpeg的參數怎麼下。

當然也是有人做了一些介面來操作ffmpeg,不過對於喜歡簡便又不用裝太多東西的我來說,寫成shell script就很好用了。

也可以輸入影片檔案,指定輸出為聲音檔案。ffmpeg會幫你把影片中的聲音分離出來。

http://blog.xuite.net/michaelr/linux/22143380