2022年4月25日 星期一

FFmpeg : 在聲音檔前面加一小段靜音

2022年4月25日 星期一

 如果想要幫 mp3 音檔的前面,加上一段靜音,怎麼處理。用 FFmpeg 是一定可以的。底下這個討論串中,有好幾種方法:

我選擇使用

adelay filter

例如想將 in.mp3 的最前面加上 250微秒的靜音,就用:

ffmpeg -i in.mp3 -af "adelay=250|250" output.mp3

詳細的用法可以參考 FFmpeg 網站的使用手冊:

在 Windows 中,如何將整個目錄中的 mp3 檔案批次加上靜音呢?

在批次檔中,我們可以利用 FOR 來取得指定路徑中的所有檔名。FOR 怎麼用,可以參考這個討論串:

再套上前面 ffmpeg 的語法,就可以完成囉!寫了個批次檔,記錄如下:

@ECHO OFF
REM ffmpeg 的路徑設定
set ffmpegPath=ffmpeg

REM 在前面加幾微秒的靜音
set silenceMilliSeconds=250

if %1test==test goto error

REM 抓第一個參數為 mp3 資料夾
set sourceFolderName=%1

REM 輸出的資料夾名稱
set outputFolderName=%1\new

REM 建新的資料夾以存放處理好的檔案
mkdir %outputFolderName%

setlocal enabledelayedexpansion
for %%f in (%sourceFolderName%\*.mp3) do (
  rem echo %%f 
  rem echo %outputFolderName%\%%~nf%%~xf
  %ffmpegPath% -i %%f -af "adelay=%silenceMilliSeconds%|%silenceMilliSeconds%" %outputFolderName%\%%~nf%%~xf
)
@echo ON
@echo.
@echo check %outputFolderName%
@echo.
goto end 

:error
@echo ON
@echo.
@echo %0 MP3_folder_name
@echo.

:end

假設上面的指令稿儲存到 convert.bat 中,而 mp3 的檔案都放在 source 資料夾中了,只要執行這樣的指令:

convert.bat source

加好靜音片段的新檔案,都會儲存到 source\new 中。

批次檔中的指令,關鍵在如何取出所有 mp3 檔名:

for %%f in (%sourceFolderName%\*.mp3)  do (

幾個重點如下:

  • 「in」後面接的是指定的路徑,取得的檔名會放到 %%f
  • %%~nf 是取出主檔名
  • %%~xf 是取出副檔名

有了這些,其它就是不同字串間的組合了。


沒有留言:

張貼留言

 
雄::gsyan © 2009. Design by Pocket