Python音頻處理庫pydub的使用教程詳解
1. 安裝
使用pip安裝即可(還需安裝ffmpeg依賴,建議使用conda命令安裝,則不需要配置環(huán)境):
pip install pydub
2. 導入和讀取音頻文件
from pydub import AudioSegment audio = AudioSegment.from_file("path/to/file")
3. 播放音頻
from pydub.playback import play play(audio)
4. 音頻時長
duration = audio.duration_seconds # 單位為秒
5. 音頻切割
# 前10秒 audio = audio[:10000] # 后10秒 audio = audio[-10000:] # 從第10秒開始到第20秒結束 audio = audio[10000:20000] # 從第10秒開始到結尾 audio = audio[10000:] # 從開始到第10秒audio = audio[:10000]
6. 音頻合并
audio1 = AudioSegment.from_file("path/to/file1") audio2 = AudioSegment.from_file("path/to/file2") audio_combined = audio1 + audio2
7. 音頻轉換
audio.export("path/to/new/file", format="mp3")
8. 調整音量
# 增加10分貝 louder_audio = audio + 10 # 減小10分貝 quieter_audio = audio - 10
9. 等分分割音頻
# 等分分割,按大概每三分鐘進行分割 for i in range(1, 1000): if 3.3 >= (audio.duration_seconds / (60 * i)) >= 2.8: number = i break chunks = audio[::int(audio.duration_seconds / number * 1000 + 1)] # 切割 # 保存分割后的音頻 for i, chunk in enumerate(chunks): chunk.export("path/to/new/file{}.wav".format(title,i), format="wav")
10. 完整代碼
下面是一段完整的代碼,用于對音頻進行前后切割,并將音頻分割成合適長度的小段進行保存。
from pydub import AudioSegment # 讀取音頻文件 audio = AudioSegment.from_file("path/to/file") # 輸出視頻時長 print('視頻時長:', audio.duration_seconds / 60) # 前后切割 start = int(input('前切割n秒,不切割輸入0'))*1000 end = int(input('后切割n秒,不切割輸入0'))*1000 if start: audio = audio[start:-end] # 計算合適的分割長度 for i in range(1, 1000): if 3.3 >= (audio.duration_seconds / (60 * i)) >= 2.8: number = i break chunks = audio[::int(audio.duration_seconds / number * 1000 + 1)] # 保存分割后的音頻 for i, chunk in enumerate(chunks): print('分割后的時長:', chunk.duration_seconds / 60) chunk.export("path/to/new/file{}.wav".format(i), format="wav")
以上就是pydub的主要知識點和一個完整的實例。通過pydub,我們可以方便地對音頻進行處理和轉換,讓我們的音頻處理更加高效和便捷。
另外,下面還列舉了一些pydub的其他應用案例。
應用案例
1. 將音頻文件轉換為指定格式
from pydub import AudioSegment # 讀取音頻文件 audio = AudioSegment.from_file("path/to/file") # 轉換為mp3格式并保存 audio.export("path/to/new/file.mp3", format="mp3")
2. 將多個音頻文件合并為一個文件
from pydub import AudioSegment # 讀取音頻文件 audio1 = AudioSegment.from_file("path/to/file1") audio2 = AudioSegment.from_file("path/to/file2") # 合并音頻文件并保存 combined_audio = audio1 + audio2 combined_audio.export("path/to/new/file", format="wav")
3. 制作鈴聲
from pydub import AudioSegment # 讀取音頻文件 audio = AudioSegment.from_file("path/to/file") # 切割并保存 start = 10000 end = 15000 ringtone = audio[start:end] ringtone.export("path/to/new/file", format="mp3")
4. 調整音頻音量
from pydub import AudioSegment # 讀取音頻文件 audio = AudioSegment.from_file("path/to/file") # 增加10分貝 louder_audio = audio + 10 # 減小10分貝 quieter_audio = audio - 10 # 保存調整后的音頻 louder_audio.export("path/to/new/file", format="wav") quieter_audio.export("path/to/new/file", format="wav")
案例:通過識別空白音,分割音頻中的歌曲
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)} 段,繼續(xù)嘗試")
首先,我們使用AudioSegment.from_file()方法讀取音頻文件,并設置分割參數min_silence_len、silence_thresh和keep_silence分別表示最小靜音長度、靜音閾值和保留靜音長度。其中,靜音閾值越小,分割出的小段越多,但可能會出現誤分割的情況;反之,靜音閾值越大,分割出的小段越少,但可能會出現漏分割的情況。
然后,我們計算分割數量num_segments,即將音頻文件分割成多少段。這里我們假設每首歌曲大概三分鐘,計算出總共需要分割成多少段。
最后,我們使用split_on_silence()方法對音頻文件進行分割,設置分割參數,并通過循環(huán)來不斷調整靜音閾值,直到分割出的小段數量符合預期為止。如果分割成功,則跳出循環(huán);否則,繼續(xù)嘗試。
總而言之,pydub是一個非常實用的音頻處理庫,可以方便地進行音頻處理、轉換、合并等操作。同時,pydub還有豐富的應用場景,如制作鈴聲、調整音量等。值得注意的是,在使用pydub的過程中,需要注意音頻格式的兼容性問題。
此外,還可以通過pydub對音頻進行編解碼、混音、重采樣等操作。下面是一些常見的操作示例。
編解碼、混音、重采樣
1. 編解碼
from pydub import AudioSegment # 讀取音頻文件 audio = AudioSegment.from_file("path/to/file") # 編碼 encoded_audio = audio.set_frame_rate(16000).set_sample_width(2).set_channels(1) # 解碼 decoded_audio = encoded_audio.set_frame_rate(44100).set_sample_width(4).set_channels(2)
2. 混音
from pydub import AudioSegment # 讀取音頻文件 audio1 = AudioSegment.from_file("path/to/file1") audio2 = AudioSegment.from_file("path/to/file2") # 混音 mixed_audio = audio1.overlay(audio2) # 保存混音后的音頻 mixed_audio.export("path/to/new/file", format="wav")
3. 重采樣
from pydub import AudioSegment # 讀取音頻文件 audio =AudioSegment.from_file("path/to/file") # 重采樣為44100Hz resampled_audio = audio.set_frame_rate(44100) # 保存重采樣后的音頻 resampled_audio.export("path/to/new/file", format="wav")
通過pydub,我們可以方便地進行音頻編解碼、混音、重采樣等操作,進一步擴展了pydub的應用場景。需要注意的是,在進行音頻混音操作時,需要保證兩個音頻文件的采樣率、采樣位數和聲道數相同。
最后,總結一下pydub的優(yōu)點和缺點。
優(yōu)點:
輕量級:pydub是一個輕量級的音頻處理庫,安裝方便,使用簡單。
功能豐富:pydub提供了豐富的音頻處理功能,包括切割、合并、轉換、調整音量、編解碼、混音、重采樣等。
應用廣泛:pydub的應用場景非常廣泛,包括音頻處理、鈴聲制作、音頻格式轉換、語音識別等等。
缺點:
對格式的兼容性有限:pydub對音頻格式的兼容性有限,不支持所有的音頻格式,需要先將音頻轉換為支持的格式后才能進行處理。
性能一般:pydub在處理大文件時,性能可能會比較一般,需要耗費一定的時間和計算資源。
不支持流式處理:pydub不支持流式處理,需要將整個音頻文件讀取到內存中,導致內存占用較大。
綜上所述,pydub是一個功能豐富、應用廣泛的音頻處理庫。在使用pydub時,需要注意音頻格式的兼容性問題,并注意處理大文件時的性能和內存占用。如果需要處理更復雜的音頻任務,可以考慮使用其他更專業(yè)的音頻處理庫。
總結
博客介紹了如何使用Python的pydub庫將音頻文件分割成多個小段。我們首先讀取音頻文件,然后設置分割參數,并計算分割數量。最后,通過循環(huán)來不斷調整靜音閾值,直到分割出的小段數量符合預期為止。這種方法可以用于對音頻進行處理和分析,例如語音識別、音樂推薦等。
需要注意的是,音頻分割的效果受到分割參數的影響,需要根據具體情況進行調整。另外,分割出的小段可能存在誤分割和漏分割的情況,需要進行后續(xù)的檢查和處理。
以上就是Python音頻處理庫pydub的使用教程詳解的詳細內容,更多關于Python音頻處理庫pydub的資料請關注腳本之家其它相關文章!
相關文章
Python列表list操作符實例分析【標準類型操作符、切片、連接字符、列表解析、重復操作等】
這篇文章主要介紹了Python列表list操作符,結合實例形式分析了標準類型操作符、切片、連接字符、列表解析、重復操作等使用技巧,需要的朋友可以參考下2017-07-07Python開發(fā)微信公眾平臺的方法詳解【基于weixin-knife】
這篇文章主要介紹了Python開發(fā)微信公眾平臺的方法,結合實例形式分析了Python基于weixin-knife針對微信公眾平臺消息、接口調用及事件處理的基本操作技巧與相關注意事項,需要的朋友可以參考下2017-07-07動態(tài)規(guī)劃之矩陣連乘問題Python實現方法
這篇文章主要介紹了動態(tài)規(guī)劃之矩陣連乘問題Python實現方法,較為詳細的分析了矩陣連乘問題的概念、原理并結合實例形式分析了Python相關實現技巧,需要的朋友可以參考下2017-11-11python xmind 包使用詳解(其中解決導出的xmind文件 xmind8可以打開 xmind2020及之后版本打
xmind8 可以打開xmind2020 報錯,如何解決這個問題呢?下面小編給大家?guī)砹藀ython xmind 包使用(其中解決導出的xmind文件 xmind8可以打開 xmind2020及之后版本打開報錯問題),感興趣的朋友一起看看吧2021-10-10