這篇文章會介紹使用 Python 的 pydub 第三方函式庫,實現聲音的音量調整、聲音淡入淡出、以及改變聲音播放速度的效果。
原文參考:聲音音量調整、淡入淡出、改變聲音速度
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
輸入下列指令,就能安裝 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')
參考「How to change audio playback speed using Pydub」的做法,定義聲音加速和減速的函式,就能將改變聲音檔案的速度。
音樂來源使用 Google 音樂庫:https://www.youtube.com/audiolibrary
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from pydub import AudioSegment
song = AudioSegment.from_mp3("test.mp3") # 讀取聲音檔案
# 定義加速與減速的函式
def speed_change(sound, speed=1.0):
rate = sound._spawn(sound.raw_data, overrides={
"frame_rate": int(sound.frame_rate * speed)
})
return rate.set_frame_rate(sound.frame_rate)
song_slow = speed_change(song, 0.75) # 聲音減速
song_fast = speed_change(song, 2.0) # 聲音加速
song_slow.export('song_slow.mp3')
song_fast.export('song_fast.mp3')
大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我已經寫了超過 400 篇 Python 的教學,有興趣可以參考下方連結呦~ ^_^