1. 程式人生 > >FFmpeg:視訊轉碼、剪下、合併、播放速調整

FFmpeg:視訊轉碼、剪下、合併、播放速調整

安裝

官網按提示安裝即可,支援三大作業系統。唯一要吐槽的是,Ubuntu 14.04 等較新的版本,從預設軟體列表裡移除了 ffmpeg,轉而支援 libav,可是 libav 又沒弄好,很難用——開源社群瞎折騰起來真是無力吐槽。

2017 更新: Ubuntu 16.04,FFmpeg 又回到了官方倉庫:

sudo apt install ffmpeg

轉碼

最簡單命令如下:

ffmpeg -i out.ogv -vcodec h264 out.mp4
ffmpeg -i out.ogv -vcodec mpeg4 out.mp4
ffmpeg -i out.ogv -vcodec libxvid out.mp4
ffmpeg -i
out.mp4 -vcodec wmv1 out.wmv ffmpeg -i out.mp4 -vcodec wmv2 out.wmv

-i 後面是輸入檔名。-vcodec 後面是編碼格式,h264 最佳,但 Windows 系統預設不安裝。如果是要插入 ppt 的視訊,選擇 wmv1 或 wmv2 基本上萬無一失。

附加選項:-r 指定幀率,-s 指定解析度,-b 指定位元率;於此同時可以對聲道進行轉碼,-acodec 指定音訊編碼,-ab 指定音訊位元率,-ac 指定聲道數,例如

ffmpeg -i out.ogv -s 640x480 -b 500k -vcodec h264 -r 29.97 -acodec
libfaac -ab 48k -ac 2 out.mp4

剪下

用 -ss 和 -t 選項, 從第 30 秒開始,向後擷取 10 秒的視訊,並儲存:

ffmpeg -i input.wmv -ss 00:00:30.0 -c copy -t 00:00:10.0 output.wmv
ffmpeg -i input.wmv -ss 30 -c copy -t 10 output.wmv

達成相同效果,也可以用 -ss 和 -to 選項, 從第 30 秒擷取到第 40 秒:

ffmpeg -i input.wmv -ss 30 -c copy -to 40 output.wmv

值得注意的是,ffmpeg 為了加速,會使用關鍵幀技術, 所以有時剪切出來的結果在起止時間上未必準確。 通常來說,把 -ss

 選項放在 -i 之前,會使用關鍵幀技術; 把 -ss 選項放在 -i 之後,則不使用關鍵幀技術。 如果要使用關鍵幀技術又要保留時間戳,可以加上 -copyts 選項:

ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4

合併

把兩個視訊檔案合併成一個。

簡單地使用 concat demuxer,示例:

$ cat mylist.txt
file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'

$ ffmpeg -f concat -i mylist.txt -c copy output

更多時候,由於輸入檔案的多樣性,需要轉成中間格式再合成:

ffmpeg -i input1.avi -qscale:v 1 intermediate1.mpg
ffmpeg -i input2.avi -qscale:v 1 intermediate2.mpg
cat intermediate1.mpg intermediate2.mpg > intermediate_all.mpg
ffmpeg -i intermediate_all.mpg -qscale:v 2 output.avi

調整播放速度

加速四倍:

ffmpeg -i TheOrigin.mp4 -vf  "setpts=0.25*PTS" UpTheOrigin.mp4

四倍慢速:

ffmpeg -i TheOrigin.mp4 -vf "setpts=4*PTS" DownTheOrigin.mp4

轉載:https://fzheng.me/2016/01/08/ffmpeg/

使用愉快!