剛從B站上看過倒放挑戰以後也想體驗下,心血來潮一個晚上完成了基本的實現。其中倒放與播放部分使用了pydub這個音頻庫,十分快捷方便,可是它完整一套的配置讓我仍是踩了幾個坑。特將其配置過程記錄於此,方便你們。python
Windows10
系統git
< Pydub in Github >github
Pydub
Anaconda
:打開Anaconda prompt
,activate
切換至工做環境下,鍵入pip install pydub
windows
Pycharm
:setting
下project
,將pydub
安裝進pip
環境api
FFmpeg
(或選擇libav
)FFmpeg
< FFmpeg官網 > :找到對應的系統版本下載。app
將壓縮包解壓到任意目錄。3d
將安裝安裝目錄下的bin
文件夾添加到系統的Path
環境變量中。code
若是添加環境變量成功後,打開cmd
,鍵入ffmpeg -version
,就能夠看到版本信息。orm
FFmpeg
包
除了按完成以上下載以外,還須要在python
中導入FFmpeg
包ip
同上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)
pydub
和ffmpeg
,可是缺乏播放音頻的包,安裝後再也不顯示。ffmpeg
其中的一項,還缺乏另一項,安裝後再也不顯示。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')