天天看點

使用 ffmpeg 轉換視訊格式

ffmpeg 是 *nix 系統下最流行的音視訊處理庫,功能強大,并且提供了豐富的終端指令,實是日常視訊處理的一大利器!
使用 ffmpeg 轉換視訊格式

執行個體

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 的方格中。