2022年5月30日 星期一

FFmpeg : 更改 mp3 的速度

2022年5月30日 星期一

 利用之前這篇「雄 : 透過 Colab 批次下載 FreeTTS mp3」下載回來的全成語音,有些聲音語速滿快的,雖然我們可以在播放時,再透過程式來調整,總覺得乾脆批次處理,一次解決比較俐落。因此,強大的 ffmpeg 又可以出場了!

我們可以使用 ffmpeg 的 atempo 來調整影音的速度:

例如:

ffmpeg -i source.mp3 -filter:a "atempo=0.75" output.mp3

上面的指令,可以將 source.mp3 的速度變成原來的 0.75 倍後,輸出成 output.mp3。

那如果想結合之前「雄 : FFmpeg : 在聲音檔前面加一小段靜音」中的 adelay filter ,在 mp3 前面加上 0.5 秒的靜音,例如:

ffmpeg -i source.mp3 -af "adelay=500|500" output.mp3

是不是直接這樣子,加分號串接?(ffmpeg 要用多種效果時用分號)

ffmpeg -i source.mp3 -filter:a "atempo=0.75; adelay=500|500" output.mp3

哈!要是像上面用,會出現類似底下的錯誤訊息啦!

Simple filtergraph 'atempo=0.75; adelay=500|500' was expected to have exactly 1 input and 1 output. However, it had >1 input(s) and >1 output(s). Please adjust, or use a complex filtergraph (-filter_complex) instead.
Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument
Error while processing the decoded data for stream #0:0
Conversion failed!

錯誤訊息中有個關鍵字「-filter_complex」,就照這個方向試著改改看,變成:

ffmpeg -i source.mp3 -filter_complex "atempo=0.75 [temp]; [temp] adelay=500|500" output.mp3

有改變的部份,主要是使用 ffmpeg 的 Filtergraph

簡單的說明一下,source.mp3 先用 atempo 改變速度,處理完的結果用 [temp] 這個標籤代表;接著 [temp] 再用 adelay 在最前上加上 0.5 秒的靜音;最後輸出到 output.mp3。

這部份的技巧在「雄 : FFmpeg : 影片剪接與加馬賽克」中的影片處理中也使用過。

知道如何用 ffmpeg 來同時更改 mp3 的速度及在最前面加上一小段靜音,接下來只要再結合批次檔,就可以一次處理整個資料夾的語音檔囉!

相關文章


沒有留言:

張貼留言

 
雄::gsyan © 2009. Design by Pocket