聲音剪輯與串接
這篇文章會介紹使用 Python 的 pydub 第三方函式庫,實現聲音剪輯的功能 ( 從音樂或聲音裡,剪輯出一段指定秒數長度的聲音,儲存為 mp3 或 wav )。
本篇使用的 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 檔案 ( 參考「如何讀取聲音?」 ),接著使用串列的方式取出 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')
參考資料
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~