Python利用Pydub實現自動分割音頻
隨著短視頻應用的普及,越來越多人開始瞭解並嘗試制作自己的短視頻作品。而在制作短視頻時,背景音樂的選擇和使用也是非常重要的一步。很多人喜歡選擇一首長音樂,再通過剪輯軟件將其剪成多段來使用,這種做法雖然可行,但效率較低。
在這種情況下,我們可以使用音頻分割技術來快速剪輯出需要的音頻段,以便於在短視頻中使用。在 Python 中,我們可以使用 Pydub 庫來進行音頻分割。
I. 簡介
pydub是Python的一個音頻處理庫,可以處理各種音頻格式,如mp3、wav、flv等等。它是一個輕量級、快速且易於使用的庫。silence庫是pydub的一個擴展庫,可以在音頻文件中根據靜默部分進行分割,非常方便。
II. 安裝
使用pip安裝pydub庫:
pip install pydub
III. 使用
下面是一個使用pydub=分割音頻文件的示例代碼:
from pydub import AudioSegment from pydub.silence import split_on_silence # 讀取音頻文件 audio = AudioSegment.from_file("audio.mp3", format="mp3") # 設置分割參數 min_silence_len = 700 # 最小靜音長度 silence_thresh =-10 # 靜音閾值,越小越嚴格 keep_silence = 600 # 保留靜音長度 # 識別計算分割歌曲數量 num_segments = int(audio.duration_seconds/60/3) # 每首歌曲大概三分鐘,計算歌曲數量 # 分割音頻文件 for i in range(-10, 0): segments = split_on_silence(audio, min_silence_len=min_silence_len, silence_thresh=i, keep_silence=keep_silence) if len(segments) <= num_segments: print(f"分割成功,共分割出 {len(segments)} 段") break else: print(f"當前閾值為 {i},分割出 {len(segments)} 段,繼續嘗試")
上面的代碼首先使用AudioSegment類從audio.mp3文件中讀取音頻數據,然後設置瞭分割參數min_silence_len、silence_thresh和keep_silence。min_silence_len是最小靜音長度,silence_thresh是靜音閾值,keep_silence是保留靜音長度。這些參數的具體含義可以根據實際情況進行調整。最後,根據分割參數使用split_on_silence函數對音頻文件進行分割。
分割成功後,我們可以輸出分割後的音頻文件,驗證是否達到瞭我們預期的效果。至此,我們就完成瞭音頻文件的自動分割,可以將分割後的文件用於其他需要使用的場景瞭。
補充
除瞭利用Pydub實現自動分割音頻,本文還為大傢整理瞭其他Python實現音頻分割的方法,希望對大傢有所幫助
方法一:
from pydub import AudioSegment from pydub.utils import make_chunks import os, re # # 循環目錄下所有文件 for each in os.listdir("D:/PycharmProjects/拾音器/"): # 循環目錄 filename = re.findall(r"(.*?)\.mp3", each) # 取出.mp3後綴的文件名 print(each) if each: mp3 = AudioSegment.from_file('D:/PycharmProjects/拾音器//{}'.format(each), "mp3") # 打開mp3文件 # # # mp3[17*1000+500:].export(filename[0], format="mp3") # 切割前17.5秒並覆蓋保存,與以下代碼不可同時使用 size = 10000 # 切割的毫秒數 10s=10000 chunks = make_chunks(mp3, size) # 將文件切割為10s一塊 for i, chunk in enumerate(chunks): chunk_name = "{}-{}.mp3".format(each.split(".")[0], i) # 也可以自定義名字 print(chunk_name) chunk.export('D:/PycharmProjects/拾音器2/{}'.format(chunk_name), format="mp3") # 新建的保存文件夾
方法二:
""" 把原音頻,按csv中的標註結果分割成幾個音頻,如text是無,忽略。否則從sDate到eDate 進行分割。 """ import os import pandas as pd import json from pydub import AudioSegment csv_url = "D:\csv\\" wav_url = "D:\標註音頻與示例\\" save_wav = "D:\wav\\new_wav\\" for path in os.listdir(csv_url): data_frame = pd.read_csv(csv_url + path, encoding='utf-8') name_list = data_frame["storeFileName"] result_list = data_frame["finalResult"] for nl, rl in zip(name_list, result_list): new_wav_url = save_wav + nl.split(".")[0] + "\\" if not os.path.exists(new_wav_url): os.makedirs(new_wav_url) result = json.loads(rl) txt_url = new_wav_url + nl.split(".")[0]+".txt" with open(txt_url, "w", encoding='utf-8') as fn: fn.write(nl+"\n") fn.write(rl) fn.close() audio = AudioSegment.from_wav(wav_url + nl) for text in result['text']: if text['defData']['text'] != '無': sTime = text['defData']['sTime'] * 1000 dTime = text['defData']['dTime'] * 1000 eTime = sTime + dTime # 音頻切割按開始時間到結束時間切割 audio_chunk = audio[sTime:eTime] audio_chunk.export(new_wav_url + nl.split(".")[0] + "-" + str(text['id']) + ".wav", format="wav")
到此這篇關於Python利用Pydub實現自動分割音頻的文章就介紹到這瞭,更多相關Python Pydub分割音頻內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 利用Python+Excel制作一個視頻下載器
- Python實戰之多種音樂格式批量轉換
- Python使用pydub模塊轉換音頻格式以及對音頻進行剪輯
- 使用Python實現音頻雙通道分離
- Jmeter並發執行Python 腳本的完整流程