溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python音頻處理庫pydub如何使用

發(fā)布時間:2023-03-22 09:24:39 來源:億速云 閱讀:171 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“Python音頻處理庫pydub如何使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Python音頻處理庫pydub如何使用”吧!

    1. 安裝

    使用pip安裝即可(還需安裝ffmpeg依賴,建議使用conda命令安裝,則不需要配置環(huán)境):

    pip install pydub

    2. 導(dǎo)入和讀取音頻文件

    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秒結(jié)束
    audio = audio[10000:20000]
    
    # 從第10秒開始到結(jié)尾
    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. 音頻轉(zhuǎn)換

    audio.export("path/to/new/file", format="mp3")

    8. 調(diào)整音量

    # 增加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,我們可以方便地對音頻進行處理和轉(zhuǎn)換,讓我們的音頻處理更加高效和便捷。
    另外,下面還列舉了一些pydub的其他應(yīng)用案例。

    應(yīng)用案例

    1. 將音頻文件轉(zhuǎn)換為指定格式

    from pydub import AudioSegment
    
    # 讀取音頻文件
    audio = AudioSegment.from_file("path/to/file")
    
    # 轉(zhuǎn)換為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. 調(diào)整音頻音量

    from pydub import AudioSegment
    
    # 讀取音頻文件
    audio = AudioSegment.from_file("path/to/file")
    
    # 增加10分貝
    louder_audio = audio + 10
    
    # 減小10分貝
    quieter_audio = audio - 10
    
    # 保存調(diào)整后的音頻
    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")
    
    # 設(shè)置分割參數(shù)
    min_silence_len = 700  # 最小靜音長度
    silence_thresh =-10  # 靜音閾值,越小越嚴(yán)格
    keep_silence = 600  # 保留靜音長度
    
    # 計算分割數(shù)量
    num_segments = int(audio.duration_seconds/60/3)  # 每首歌曲大概三分鐘,計算歌曲數(shù)量
    
    # 分割音頻文件
    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"當(dāng)前閾值為 {i},分割出 {len(segments)} 段,繼續(xù)嘗試")

    首先,我們使用AudioSegment.from_file()方法讀取音頻文件,并設(shè)置分割參數(shù)min_silence_len、silence_thresh和keep_silence分別表示最小靜音長度、靜音閾值和保留靜音長度。其中,靜音閾值越小,分割出的小段越多,但可能會出現(xiàn)誤分割的情況;反之,靜音閾值越大,分割出的小段越少,但可能會出現(xiàn)漏分割的情況。

    然后,我們計算分割數(shù)量num_segments,即將音頻文件分割成多少段。這里我們假設(shè)每首歌曲大概三分鐘,計算出總共需要分割成多少段。

    最后,我們使用split_on_silence()方法對音頻文件進行分割,設(shè)置分割參數(shù),并通過循環(huán)來不斷調(diào)整靜音閾值,直到分割出的小段數(shù)量符合預(yù)期為止。如果分割成功,則跳出循環(huán);否則,繼續(xù)嘗試。

    總而言之,pydub是一個非常實用的音頻處理庫,可以方便地進行音頻處理、轉(zhuǎn)換、合并等操作。同時,pydub還有豐富的應(yīng)用場景,如制作鈴聲、調(diào)整音量等。值得注意的是,在使用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的應(yīng)用場景。需要注意的是,在進行音頻混音操作時,需要保證兩個音頻文件的采樣率、采樣位數(shù)和聲道數(shù)相同。

    最后,總結(jié)一下pydub的優(yōu)點和缺點。

    優(yōu)點:

    輕量級:pydub是一個輕量級的音頻處理庫,安裝方便,使用簡單。

    功能豐富:pydub提供了豐富的音頻處理功能,包括切割、合并、轉(zhuǎn)換、調(diào)整音量、編解碼、混音、重采樣等。

    應(yīng)用廣泛:pydub的應(yīng)用場景非常廣泛,包括音頻處理、鈴聲制作、音頻格式轉(zhuǎn)換、語音識別等等。

    缺點:

    對格式的兼容性有限:pydub對音頻格式的兼容性有限,不支持所有的音頻格式,需要先將音頻轉(zhuǎn)換為支持的格式后才能進行處理。

    性能一般:pydub在處理大文件時,性能可能會比較一般,需要耗費一定的時間和計算資源。

    不支持流式處理:pydub不支持流式處理,需要將整個音頻文件讀取到內(nèi)存中,導(dǎo)致內(nèi)存占用較大。

    綜上所述,pydub是一個功能豐富、應(yīng)用廣泛的音頻處理庫。在使用pydub時,需要注意音頻格式的兼容性問題,并注意處理大文件時的性能和內(nèi)存占用。如果需要處理更復(fù)雜的音頻任務(wù),可以考慮使用其他更專業(yè)的音頻處理庫。

    到此,相信大家對“Python音頻處理庫pydub如何使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

    向AI問一下細節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI