< python音頻庫:Windows下pydub安裝配置、過程出現的問題及經常使用API >

< python音頻庫:Windows下pydub安裝配置、過程出現的問題及經常使用API >

背景

  • 剛從B站上看過倒放挑戰以後也想體驗下,心血來潮一個晚上完成了基本的實現。其中倒放與播放部分使用了pydub這個音頻庫,十分快捷方便,可是它完整一套的配置讓我仍是踩了幾個坑。特將其配置過程記錄於此,方便你們。python

  • Windows10系統git

  • < Pydub in Github >github

安裝Pydub

  • Anaconda:打開Anaconda promptactivate切換至工做環境下,鍵入pip install pydubwindows

  • Pycharmsettingproject,將pydub安裝進pip環境api

安裝FFmpeg(或選擇libav

  1. 下載FFmpeg
    • < FFmpeg官網 > :找到對應的系統版本下載。app

    • 將壓縮包解壓到任意目錄。3d

    • 將安裝安裝目錄下的bin文件夾添加到系統的Path環境變量中。code

    • 若是添加環境變量成功後,打開cmd,鍵入ffmpeg -version,就能夠看到版本信息。orm

  2. 下載FFmpeg
    • 除了按完成以上下載以外,還須要在python中導入FFmpegip

    • 同上Pydub包導入 - pip install FFmpeg

安裝Pyaudio

  • 能夠僅使用純Pydub打開或保存WAV文件。爲了打開或保存非WAV文件——好比MP3——你須要ffmepg或是libav。而若是須要播放音頻,則須要安裝如下包:
    • simpleaudio

    • pyaudio

    • ffplay (一般隨ffmpeg安裝)

    • avplay ((一般隨libav安裝)

  • 官網是強烈推薦安裝simpleaudio,而我選擇的是pyaudio,由於以後程序的其餘部分還須要用到,因此就直接選擇了pyaudio

  • 包安裝同上Pydub - pip install pyaudio

  • 至此安裝配置工做完成,可試驗如下代碼看是否能運行。
from pydub import AudioSegment
from pydub.playback import play

sound = AudioSegment.from_file("0.mp3", "mp3")
play(sound)

問題:[Errno 13] Permission denied

  • 安裝了pydubffmpeg,可是缺乏播放音頻的包,安裝後再也不顯示。

問題 [WinError 2] 系統找不到指定的文件

  • 安裝了ffmpeg其中的一項,還缺乏另一項,安裝後再也不顯示。

經常使用API

打開一個XXX類型文件:

mp4_version = AudioSegment.from_file("never_gonna_give_you_up.mp3", "mp3")
wma_version = AudioSegment.from_file("never_gonna_give_you_up.wav", "wav")
aac_version = AudioSegment.from_file("never_gonna_give_you_up.mp4", "mp4")

對音頻段切片

# pydub作任何操做的時間尺度都是毫秒
ten_seconds = 10 * 1000

first_10_seconds = song[:ten_seconds]
last_5_seconds = song[-5000:]

鏈接音頻段

without_the_middle = beginning + end

讓開頭更響和讓結束更弱

# 聲音增益6dB
beginning = first_10_seconds + 6

# 聲音減弱3dB
end = last_5_seconds - 3

重複

# 將片斷重複兩遍
do_it_over = with_style * 2

倒放

# 讀取想要倒放的音頻文件
ted = AudioSegment.from_file("ted.mp3")
# 將音頻倒放賦給變量 backwards
backwards = ted.reverse()

保存結果 / 音頻格式轉換

awesome.export("mashup.mp3", format="mp3")

批量處理音頻

from pydub import AudioSegment

# i 從 0 到 9 取值
for i in range(10):
    # 按順序讀取 00i.m4a 文件
    temp = AudioSegment.from_file(f"00{i}.m4a")
    # 將 00i.m4a 轉換爲 答案00i.mp3
    temp.export(f"答案00{i}.mp3")
    # 將音頻倒放
    backplay = temp.reverse()
    # 將倒放音頻存爲 音謎00i.mp3
    backplay.export(f"音謎00{i}.mp3")
# 打印個 done 提示完成
print("done")

舉個例子:

from glob import glob
from pydub import AudioSegment

playlist_songs = [AudioSegment.from_mp3(mp3_file) for mp3_file in glob("*.mp3")]

first_song = playlist_songs.pop(0)

# 讓咱們只包含第一首歌的前30秒 (切片以毫秒爲單位)
beginning_of_song = first_song[:30*1000]

playlist = beginning_of_song
for song in playlist_songs:
    # 咱們不想讓結尾聽起來像是忽然中止,因此咱們給它加上10秒的淡化
    playlist = playlist.append(song, crossfade=(10 * 1000))

# 讓咱們給最後一首歌的結尾加上淡出
playlist = playlist.fade_out(30)

# 唔……我還想知道它有多長( len(audio_segment)返回值一樣是以毫秒計的 )
playlist_length = len(playlist) / (1000*60)

# 如今保存下來!
out_f = open("%s_minute_playlist.mp3" % playlist_length, 'wb')

playlist.export(out_f, format='mp3')
相關文章
相關標籤/搜索