ffmpeg 是 *nix 系統下最流行的音視訊處理庫,功能強大,并且提供了豐富的終端指令,實是日常視訊處理的一大利器! |
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISM9AnYldnJwAzN9c3PnBnau4mQuFWdJRFTwATeaRHbHRmdBRVT2dGVNdXS6xkeSdVW2h3RjFTODRWdWdEZ1ljMZRXQzQmdwIjYqVzUalWOtN2dohFZ1x2RiV3YzQ2M5kHT20ESjBjUIF2Lc12bj5SYphXa5VWen5WY35iclN3Ztl2Lc9CX6MHc0RHaiojIsJye.jpg)
執行個體
flac 格式轉 mp3
音頻格式轉換非常簡單:
ffmpeg -i input.flac -acodec libmp3lame output.mp3
ffmpeg 将會使用 libmp3lame 解碼器将 input.flac 檔案轉換為 mp3 格式的 output.mp3 檔案。
批量格式轉換
想要批量轉換 flac 檔案也是很常見的需求,我們可以結合 bash 指令來完成:
find . -name "*.flac" -exec bash -c \'ffmpeg -i "{}" -y "${0/.flac}.wav"\' {} \;
webm 轉 gif 格式
webm 是 Google 提出的多媒體檔案格式,包含了 VP8 影片軌和 Ogg Vorbis 音軌,按照 BSD 格式開源。webm 能夠提供更高品質的線上視訊,但是其支援程度并不如存在已久的 mp4 和動态圖檔格式 gif,是以有時候會有将其轉換為 gif 格式的需求。我們用到的指令是:
ffmpeg -i input.webm -vf "scale=400:-1,fps=10" output.gif
其作用是将 input.webm 格式的視訊轉換為橫向寬度為 400px,縱向寬度保持比例的每秒 10 幀的 output.gif 圖檔。
當然,也可以将 gif 轉換為 webm 格式:
ffmpeg -i output.gif -c:v libvpx -auto-alt-ref 0 input.webm
如果出現“Unknown encoder libvpx”的問題,需要重新在重新編譯安裝 ffmpeg 以支援 libvpx 編碼器:
brew reinstall ffmpeg --with-libvpx
轉換為 mp4 格式:
ffmpeg -i input.webm -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" output.mp4
這裡 vf 參數的意義是,将視訊的長寬強制轉換為偶數,否則可能遇到“width not divisible by 2”的問題。
生成視訊縮略圖
生成封面
使用視訊的第一幀作為封面:
ffmpeg -i your-video.mp4 -ss 00:00:00 -vframes 1 thumb.png
每 xx 秒生成一個縮略圖
每分鐘一張:
ffmpeg -i your-video.mp4 -vf fps=1/60 your-video-%03d.png
再将其合并:
ffmpeg -i your-video-%03d.png -filter_complex scale=-1:-1,tile=99x1:margin=10:padding=4 output.png
這裡的 tile 長度設定為 99,應當改為縮略圖的總數。
一步到位:
ffmpeg -ss 00:00:00 -i your-video.mp4 -vf \'select=not(mod(n\,24)),scale=-1:-1,tile=99*1\' out.png
意思是從視訊的 00:00:00 處開始,每 24 幀(一般動換都是 24 幀的)取一張圖檔,長寬不進行壓縮,最後合成在 99*1 的方格中。