這篇文章會介紹使用 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 檔案 ( 參考「如何讀取聲音?」 ),接著使用串列的方式取出 1500~5500 毫秒的內容,輸出成為 output.mp3。
音樂來源使用 Google 音樂庫:https://www.youtube.com/audiolibrary
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from pydub import AudioSegment # 載入 pydub 的 AudioSegment 模組
song = AudioSegment.from_mp3("oxxostudio.mp3") # 讀取 mp3 檔案
song[1500:5500].export('output.mp3') # 取出 1500 毫秒~5500 毫秒長度的聲音,輸出為 output.mp3
print('ok') # 輸出後印出 ok
讀取聲音後,使用「相加」的方式,就能將不同的聲音串接成同一段聲音,下方的例子會將兩段聲音組合成一段聲音輸出。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from pydub import AudioSegment
song1 = AudioSegment.from_mp3("oxxo1.mp3") # 讀取第一個 mp3 檔案
song2 = AudioSegment.from_mp3("oxxo2.mp3") # 讀取第二個 mp3 檔案
output = song1 + song2 # 串接兩段聲音
output.export('output.mp3') # 輸出為 output.mp3
print('ok') # 輸出後印出 ok
因為讀取的聲音本質已是用串列的方式呈現,所以也能夠使用「串列相乘」的方式,將某一段聲音變成重複多次,下方的例子會將讀取的聲音乘以 3,就會重複三次。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from pydub import AudioSegment
song = AudioSegment.from_mp3("oxxostudio.mp3") # 讀取 mp3 檔案
output = song*3 # 乘以 3,重複三次變成三倍長
output.export('output.mp3')
print('ok')
透過 overlay 方法混合聲音,使用方法如下:
output = sound1.overlay(sound2, position, gain_during_overlay, loop, times)
# output 輸出聲音
# sound1 主聲音
# sound2 要混合的聲音
# position 從 sound1 的何處開始混合,單位毫秒 ( 針對主聲音 )
# gain_during_overlay 混合時 sound1 的音量變化 ( 針對主聲音 )
# loop 如果 sound2 不夠長,是否要不斷重複,True 或 False
# times 如果 sound2 不夠長,指定 sound2 要重複幾次
下方的例子,會將說話的聲音,和一段背景音樂進行混合,由於背景音樂不夠長,使用 loop 參數將音樂不斷重複,直到說話聲音結束為止 ( 如果說話聲音比音樂短,則說話聲音結束時,音樂也會跟著結束 )
音樂來源使用 Google 音樂庫:https://www.youtube.com/audiolibrary
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from pydub import AudioSegment # 載入 pydub 的 AudioSegment 模組
song = AudioSegment.from_mp3("oxxostudio.mp3") # 讀取背景音樂 mp3 檔案
voice = AudioSegment.from_mp3("voice.mp3") # 讀取說話聲音 mp3 檔案
output = voice.overlay(song, loop=True) # 混合說話聲音和背景音樂
output.export('output.mp3')
透過 reverse 方法反轉聲音,產生趣味的效果:
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
from pydub import AudioSegment # 載入 pydub 的 AudioSegment 模組
voice = AudioSegment.from_mp3("voice.mp3") # 讀取說話聲音 mp3 檔案
output = voice.reverse() # 反轉說話聲音
output.export('output.mp3')
大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我已經寫了超過 400 篇 Python 的教學,有興趣可以參考下方連結呦~ ^_^