聲音音量調整、淡入淡出
這篇文章會介紹使用 Python 的 pydub 第三方函式庫,實現聲音的音量調整,以及做出聲音淡入淡出的效果。
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
安裝 pydub 函式庫
輸入下列指令,就能安裝 pydub 函式庫 ( 依據每個人的作業環境不同,可使用 pip 或 pip3 或 pipenv )。
!pip install pydub
如果是使用 Anaconda 的環境,要額外輸入下列指令安裝 ffmpeg 和 ffprobe,不然執行後會發生找不到 ffprobe 的錯誤訊息 ( 使用 Colab 完全不用安裝額外套件 )。
conda install ffmpeg
!pip install ffprobe
調整聲音音量
使用 pydub AudioSegment 模組讀取 mp3 檔案 ( 參考「如何讀取聲音?」 ),就可以使用兩種方法調整聲音的音量:
音樂來源使用 Google 音樂庫:https://www.youtube.com/audiolibrary
針對聲音陣列,增加或減少數值
from pydub import AudioSegment import os os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用 song = AudioSegment.from_mp3("oxxostudio.mp3") # 讀取 mp3 output1 = song[:] + 10 # 將所有陣列中的資料增加 10 ( 變大聲 ) output2 = song[:] - 10 # 將所有陣列中的資料減少 10 ( 變小聲 ) output1.export('output1.mp3') # 輸出聲音 output2.export('output2.mp3') print('ok')
使用 apply_gain() 方法
from pydub import AudioSegment import os os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用 song = AudioSegment.from_mp3("oxxostudio.mp3") output1 = song.apply_gain(10) # 將音量增加 10 ( 變大聲 ) output2 = song.apply_gain(-10) # 將音量減少 10 ( 變小聲 ) output1.export('output1.mp3') output2.export('output2.mp3') print('ok')
音量淡入淡出
聲音的淡入是指從無聲慢慢變大聲,淡出則是指從大聲慢慢變小到無聲,透過 pydub AudioSegment 模組的 fade()、fade_in() 和 fade_out() 方法,就能實現淡入淡出的效果。
fade_in()、fade_out()
「fade_in() 淡入」和「fade_out() 淡出」可以快速進行淡入和淡出的效果,使用方法會包含一個「時間」參數,單位是毫秒,設定 3000 表示 3 秒。
from pydub import AudioSegment import os os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用 song = AudioSegment.from_mp3("oxxostudio.mp3") output1 = song.fade_in(3000) # 開頭三秒 ( 3000ms ) 淡入 output2 = song.fade_out(3000) # 結尾三秒 ( 3000ms ) 淡出 output1.export('output1.mp3') output2.export('output2.mp3') print('ok')
fade()
fade() 方法提供更為彈性的淡入淡出調整方式,使用方法會包含 to_gain ( 淡入或淡出結束的音量 )、start/end ( 開始或結束的秒數 ) 和 duration ( 持續時間 ) 參數。
from pydub import AudioSegment import os os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用 song = AudioSegment.from_mp3("oxxostudio.mp3") output1 = song.fade(to_gain=15, start=1000, duration=2000) # 從 1 秒的位置開始,慢慢變大聲到增加 15,過程持續 2 秒 output2 = song.fade(to_gain=-30, end=3000, duration=2000) # 從 1 秒的位置開始 ( 3000-2000 ),慢慢變小聲到減少 30,過程持續 2 秒 output1.export('output1.mp3') output2.export('output2.mp3') print('ok')
參考資料
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~