- FFmpeg 是什麼? 轉神。
- FFmpeg 可以吃嗎? 不可以。
- FFmpeg 要從哪裡開始理解啊? 起源。
- 啥? 「FFmpeg」、「Mplayer」和「VLC」是三個很早就開始開發的的大型程式,「FFmpeg」主攻影音轉檔、「Mplayer」主攻影音串流、「VLC」主攻影音播放。但之後三個互通有無,所以三個都有彼此的功能。
- 又再講古了。 還有很多古沒說!「FFmpeg」早期多在支援 VCD、DVD 等格式,所以使用上會有很多問題,經常會當掉。但最近大力開發解碼、libx264 ,讓使用上大幅加分。
- 還有古嗎? 因為 FFmpeg 希望有容乃大,所以裡面盡量包山包海,再加上 FFmpeg 利用 Linux 的特性,使用「lib」函式庫的特性,讓使用者可以選擇需要用的編碼或解碼器自行編譯,製出符合自己的 FFmpeg。
- 等一下,作業系統是怎麼回事? 因為開發環境的便利、作業系統穩定因素等等, FFmpeg 使用 Linux 做為開發環境,而 Windows 版相繼有很多人釋出編譯版本,目前最大的是 Zeranoe 的 FFmpeg。
- 等於說我們不用自己下載 FFmpeg 來編譯了嗎? 對,大型作業系統都有很多人編譯完成,只要去下載使用即可。事實上編譯 FFmpeg 是一個浩大工程,不但要知道需要加入什麼函式庫,更要知道發現錯誤時要怎麼解決。
- 可以開始了嗎? 好吧。 Windows 請去 http://ffmpeg.zeranoe.com/builds/ 下載最新 Static 版本。早期版本有差,但現在己經沒有那種問題了;而請它的作業系統請去軟體中心找 FFmpeg 安裝。Linux 的使用者可以直接透過軟體管理工具安裝,又或者可以選其他 Static 方案,像是這裡。
- 接下來呢? Windows 請解開並取出 \bin\ffmpeg.exe,跟其它作業系統一樣,打 FFmpeg 就可以執行了。其他作業系統可以直接使用 ffmpeg。
- 要如何叫出說明?
- 這沒有人看的懂啊! 沒錯,但這已經是縮小版的了,可以看 ffmpeg -h long 或是 ffmpeg -h full 更長,而之前的說明都是完整說明,根本沒有人想看。
- 有沒有速解法啊? 最基本的用法如:
- 咦?什麼資訊都沒有加? 對, FFmpeg 會用預設的參數執行。在 -i 後面加上輸入檔,最後一個參數指定輸出檔,它會自動判斷檔名來使用不同的編碼器。
- 可是這不一定是我要的結果啊! 所以開始要加參數了嘛,如函式庫、轉檔要求等。
- 函式庫?有什麼? 對於「.mp4」檔案,影像常用的是「h264」,音訊常用的是「aac」。
- 所以要怎麼用? 去「ffmpeg -codecs」找,可以看到有「h264」和「aac」可以使用,這時只要加上參數變成:
- 那要怎麼調比碼率(Bit Rate)? 用 -b:v 和 -b:a ,注意不同編譯版單位不同,大寫的 K 和小寫的 k 是差很多的,可以去説明看。
- 使用 libx264 有什麼需要注意的? 這是一個很複雜的議題,請前往這裡看。
- 還要自己確認複寫,好累喔! 可以加上不確認複寫的參數,如:
- 難道只能用 .mp4 檔案? Xvid 也可以啊,如:
- 那可以做成 DVD 的格式嗎? 可以啊,如:
- 不能燒啊,你騙我。 其實用 FFmpeg 做實在太累了,建議用 DVDStyler。
- FFmpeg 就只有這樣嗎? 「這樣」就已經煉了好幾年。當然,FFmpeg 不只這樣,其實有一個基本的功能沒有說。
- 你混啊!到底是什麼? FFmpeg 可以重新對一個影片重新整理(mux),像是如果要把格式換成 .mpg,可以下指令如下:
- 這好像也沒有什麼了不起啊? FFmpeg 可以使用方便的映射功能,範例如下:
- 它會重新轉檔嗎? 在以前,若要直接複製一軌,要分別下 -c:v copy -c:a copy ,但現在只要:
- 這用不到,下一個。 FFmpeg 也可以用來切割影片, -ss 是指定從哪裡開始切, -t 是從 -ss 開始切幾秒。如:
- 這個動好像有點久? 在 FFmpeg 的説明中,有説到把 -ss 放在 -i 後面是慢速搜尋,FFmpeg 會從檔案的一開始搜尋,直到找到影格為止。如果把指令放在前面,如下:
- 那要怎麼合併影片檔? 這個問題學問不淺,這裡提供基本做法,建議是在使用上述切影片的方式切出影片後,再行合併會比較没有問題。
- 還有嗎? FFmpeg 現在已經加入 FontConfig ,可以輕易實現字幕內嵌的功能。
- 聴起來不錯。 首先,要去 http://oss.netfarm.it/mplayer-win32.php 最新版的 Mplayer ,把裡面的 \fonts 資料夾解出來與 ffmpeg.exe 同一資料夾。其他作業系統應該裝 Mplayer 就可以了。
- 再來呢? 就可以轉檔了:
- 這好像是濾鏡喔? FFmpeg 支持很多濾鏡,上例 ass 是其中一個,有興趣的可以看看。
c:v 的意思是說,對於影片,用 libx264 的編碼器,c:a 的意思是說,對於聲音,用 aac 的編碼器。
這裡必須要提醒輸出的格式必須是有意義的,像是上述的範例是原始 i.ts 就是用 MPEG 的編碼,要不然轉檔會失敗。
可以用 ffmpeg -i i.ts 看每一軌的編號,再依序用 -map 指令放進去,亦可指定放入的方式,如 -map 1:2 是指第一個 -i 的第三軌(從 0 開始),而 -c:a:2 是指依 -map 放入的音軌中第二個要使用的編碼器。也可以放入多個檔案,如 ffmpeg -i i1.ts -i i2.ts。
有一些新的 FFmpeg 有提供 -to 的指令,是切出 -ss 到 -to 這段時間影片。
會用快速搜尋,FFmpeg 會直接用關鍵影格(Keyframe)搜尋,會比較快,在 FFmpeg 2.1 版後有提高精準度,可以考慮使用。
其中 mylist.txt 是:
這個方法是把字幕嵌進影片,之後是没有辦法移除,如果只是單純的放字幕,可以考慮直接放進去(ffmpeg -i i.ass)就好。
在此提供一些往下延伸的教學網站:
- 石頭閒語:ffmpeg 轉檔與影片連接範例 針對 FFmpeg (非 avconv)教學,有針對 DVD 轉檔(DVDRip)及影片合併有多一點介紹。
寫完了,FFmpeg 是很強大但問題不少,有使用上的問題可以提問看看。但 FFmpeg 本身太複雜不可能一一回答,在中國大陸還有網友成立一整個論壇就是在討論 FFmpeg ,以個人微薄之力不可能全部回答。不過還是可以試試看,也許是這篇教學不完整也說不定。
以下是寫給酷看的: FFmpeg 在影音轉檔上經常受到重視,這也是這篇教學的主要目地。這篇教學也改用 Libav 的新指令,也都有基本範例。