前陣子在弄Google 小姐講故事 – 自動製做三隻小豬故事影片的程式時,用到了一些 ffmpeg 的命令。ffmpeg 是開源影片處理的主流程式,功能強但又不常用,所以很快就會忘記了,就趁著這次機會把命令整理整理。
轉換 Video / Audio Codec 與 Bitrate
1 |
ffmpeg -i input.mpg -c:v libx264 -c:a aac -b:v 1M -b:a 256k output.mp4 |
-i:輸入的影片
-c:v:要輸出的影像 codec,此例是x.264
-c:a:要輸出的聲音 codec,此例是 aac
-b:v:輸出影像的 bitrate,此例是 1MBps
-b:a:輸出聲音的 bitrate,此例是 256kbps
最後面是輸出的檔名,往後的例子都是如此,就不再贅述
設定影片長度
1 |
ffmpeg -i input.fmt1 -t 30 output.fmt2 |
-i:輸入的影片
-t:輸出影片的長度
照片轉換成影片
1 |
ffmpeg -loop 1 -i pic.jpg -t 30 output.mp4 |
-loop:不太確定確切目的,類似循環的用途
-i:要使用的照片
-t:輸出的影片長度
此例最終會使用一張照片製做成30秒的影片
照片轉換成影片, 循環播放至指定長度
前一個例子只用到了一張照片,如果要使用多張照片則要對檔名有些改變
1 |
ffmpeg -y -loop 1 -framerate 2 -i "img_%05d.jpg" -vcodec libx264 -t 60 -s 1280x720 a.mp4 |
-y:覆蓋輸出檔,不詢問
-loop:不太確定確切目的,類似循環的用途
-framerate:就是每秒的幀率(FPS)。以上面的例子是一秒播放2張,若要一張照片播放2秒,則改成1/2。
-i:要使用的檔名。以此例的 img_%05d.jpg 就是要使用 img_00000.jpg, img_00001.jpg, img_00002.jpg…組成影片。其中的 %05d 是C程式語言的表示法,代表5位數,不滿5位前面會補0。這個地方就是 ffmpeg 比較麻煩的地方,照片組成影片前還要另外自行改檔名。這個命名的動作,有另外寫一篇 看例子學 Shell Programming (6) – 將照片依日期重新照序號命名,讀者可以參考看看如何用 shell script 快速完成這個動作。
-vcodec:與之前說過的 -c:v 同樣功能,指定輸出的影像格式
-t:要輸出的影片長度。因為前面還有指定 FPS,若照片檔案不夠,則會重複播放。
-s:指定輸出的畫面大小。因為在照片轉成影片時,照片有時大小、格式不一樣,會照成處理錯誤,建議先轉換成一樣的大小。
指定輸出的畫面大小
1 |
ffmpeg -i input.avi -s 1024x768 output.avi |
-i:要轉換的影片
-s:將輸出影片轉換成指定大小
查詢支援的格式
1 |
ffmpeg -i formats |
裁切影片
裁切影片的某一部份,指定期長寬與位置
1 |
ffmpeg -i input.mp4 -vf "crop=w:h:x:y" output.mp4 |
-i:原始檔案
-vf:使用後面的 “video filter”。裁切filter的語法是 “crop=w:h:x:y”, w=寬度, h=長度, x=起始x座標, y=起始y座標
影片取出 JPG
1 |
ffmpeg -i input.mp4 -r 1 -t 40 output-%05d.jpg |
-i:要處理的影片
-r:轉換的速率,可以想像成 FPS。在每一秒的影片中,取出一張畫面。
-t:取出的時間。以此例而言,每秒取出一張,做40秒,就會取出40張。
輸出檔名也是前面講過的C語言格式,此例會輸出 output-00000.jpg, output-000001.jpg…的檔案
去除聲音
產生只有影像沒聲音的影片
1 |
ffmpeg -i inputfile.avi -an outputfile.avi |
-i:要處理的檔案
-an:指定不需要聲音
截取聲音
如果只要取得影片中的聲音,可以下列命令
1 |
ffmpeg -i inputfile.avi -vn outputfile.mp3 |
-i:要處理的檔案
-vn:指定不需要影像
讚!