python 進行音頻處理,單聲道變雙聲道,提升音量

  1. 準備條件,安裝ffmpeg
    ffmpeg官網
    1
    在這裏插入圖片描述2
    在這裏插入圖片描述將下載下來的zip解壓,添加環境變量
  2. 使用AudioSegment進行格式轉換爲wav
  3. 使用wave進行單聲道轉換爲雙聲道
  4. 使用AudioSegment進行格式轉換並提高音量
import wave
from pydub import AudioSegment
import os
import numpy as np
import struct
from concurrent.futures import ThreadPoolExecutor


def open_file(path):
    file = open(path, 'rb')
    file_tuple = os.path.splitext(os.path.basename(file.name))
    file.close()
    song = AudioSegment.from_mp3(path)
    song.export("E:/music/temp/%s%s" % (file_tuple[0], '.wav'), format="wav")
    wf = wave.open("E:/music/temp/%s%s" % (file_tuple[0], '.wav'), 'rb')
    frames = wf.getnframes()
    framerate = wf.getframerate()
    str_data = wf.readframes(frames)
    sample_width = wf.getsampwidth()
    wf.close()
    wave_data = np.fromstring(str_data, dtype=np.short)
    wave_data.shape = (-1, 2)
    wave_data = wave_data.T
    mono_wave = (wave_data[0]+wave_data[1])/2
    wf_mono = wave.open("E:/music/temp/%s%s" % (file_tuple[0], '.wav'), 'wb')
    wf_mono.setnchannels(1)
    wf_mono.setframerate(framerate)
    wf_mono.setsampwidth(sample_width)
    for i in mono_wave:
        data = struct.pack('<h', int(i))
        wf_mono.writeframesraw(data)
    wf_mono.close()
    new_song = AudioSegment.from_wav("E:/music/temp/%s%s" % (file_tuple[0], '.wav'))
    new_song = new_song + 20
    new_song.export("E:/music/dst/%s%s" % (file_tuple[0], '.mp3'), format="mp3")


if __name__ == '__main__':
    with ThreadPoolExecutor(10) as executor:
        for root, dirs, files in os.walk("E:\music\src"):
            for name in files:
                executor.submit(open_file, os.path.join(root, name))

git資源庫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章