1. 程式人生 > >FFmpeg:視頻轉碼、剪切、合並、播放速調整

FFmpeg:視頻轉碼、剪切、合並、播放速調整

基本上 不安裝 同時 using 上傳 lis got 轉碼 導師

原文:https://fzheng.me/2016/01/08/ffmpeg/

FFmpeg:視頻轉碼、剪切、合並、播放速調整

2016-01-08

前陣子幫導師處理項目 ppt,因為插入視頻的格式問題被搞得焦頭爛額。Windows 內置解碼器不夠全,PowerPoint 原生支持的內嵌視頻格式有限。更麻煩的是新版本的 PowerPoint 支持的格式(比如 MPEG4 編碼的 .mp4)舊版本還不支持,而你對手頭的 ppt 即將播放的場所用什麽系統什麽版本的軟件又無能為力,所以最穩妥的方式是,把所有視頻轉為基本所有版本的 Windows 和 Office 都支持的格式——wmv。

我用過各種 online 的網頁版轉碼工具,需要上傳下載太麻煩,還有文件大小限制。Windows 下面的 Movie Maker 免費,勉強可用,還是不順手,而且除了 4:3 和 16:9,沒法直接輸出和原視頻相同的畫面比例。

之後在 Linux 下用 RecordMyDesktop 錄屏,也面臨把 .ogv 格式的視頻轉成其他格式,以及剪切視頻片段的問題。在 Ubuntu Software Center 下載推薦度比較高的兩個軟件,還是不順手,最終發現了終極解決方案: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

參考:ffmpeg.org

合並

把兩個視頻文件合並成一個。

簡單地使用 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

參考:stackoverflow; ffmpeg.org。

調整播放速度

加速四倍:

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

四倍慢速:

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

參考:bogotobogo。

使用愉快!

FFmpeg:視頻轉碼、剪切、合並、播放速調整