我刚刚开始使用Python并使用PyAudio
和Wave
模块从我的麦克风中获取声音并将其转换为.wav
文件。
我正在尝试做的是现在将.wav
转换为.flac
。我已经看到了一些方法,这些方法都涉及安装转换器并将其放置在我的环境路径中并通过os.system
调用它。
有没有其他方法可以通过Python将.wav
转换为.flac
?我正在寻找的解决方案需要在Windows和Linux上运行。
也许你正在寻找Python Audio Tools.
似乎PAT可以做任何你想做的事情。
我没有测试过这个解决方案,但你可以使用pydub
from pydub import AudioSegment
song = AudioSegment.from_wav("test.wav")
song.export("testme.flac",format = "flac")
许多文件格式都支持转换(请参阅ffmpeg支持的文件格式列表herehttps://ffmpeg.org/general.html#Audio-Codecs
下面是一个使用Python库Python Audio Tools将.wav
文件转换为.flac
文件的代码示例:
import audiotools
filepath_wav = 'music.wav'
filepath_flac = filepath_wav.replace(".wav", ".flac")
audiotools.open(filepath_wav).convert(filepath_flac,
audiotools.FlacAudio, compression_quality)
要安装Python音频工具:http://audiotools.sourceforge.net/install.html
https://wiki.python.org/moin/Audio/(mirror)尝试列出所有有用的Python库,以便与Python结合使用音频。
一个较长的Python脚本,用于多线程批量转换wav文件到FLAC文件,来自http://magento4newbies.blogspot.com/2014/11/converting-wav-files-to-flac-with.html
from Queue import Queue
import logging
import os
from threading import Thread
import audiotools
from audiotools.wav import InvalidWave
"""
Wave 2 Flac converter script
using audiotools
From http://magento4newbies.blogspot.com/2014/11/converting-wav-files-to-flac-with.html
"""
class W2F:
logger = ''
def __init__(self):
global logger
# create logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# create a file handler
handler = logging.FileHandler('converter.log')
handler.setLevel(logging.INFO)
# create a logging format
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(handler)
def convert(self):
global logger
file_queue = Queue()
num_converter_threads = 5
# collect files to be converted
for root, dirs, files in os.walk("/Volumes/music"):
for file in files:
if file.endswith(".wav"):
file_wav = os.path.join(root, file)
file_flac = file_wav.replace(".wav", ".flac")
if (os.path.exists(file_flac)):
logger.debug(''.join(["File ",file_flac, " already exists."]))
else:
file_queue.put(file_wav)
logger.info("Start converting: %s files", str(file_queue.qsize()))
# Set up some threads to convert files
for i in range(num_converter_threads):
worker = Thread(target=self.process, args=(file_queue,))
worker.setDaemon(True)
worker.start()
file_queue.join()
def process(self, q):
"""This is the worker thread function.
It processes files in the queue one after
another. These daemon threads go into an
infinite loop, and only exit when
the main thread ends.
"""
while True:
global logger
compression_quality = '0' #min compression
file_wav = q.get()
file_flac = file_wav.replace(".wav", ".flac")
try:
audiotools.open(file_wav).convert(file_flac,audiotools.FlacAudio, compression_quality)
logger.info(''.join(["Converted ", file_wav, " to: ", file_flac]))
q.task_done()
except InvalidWave:
logger.error(''.join(["Failed to open file ", file_wav, " to: ", file_flac," failed."]), exc_info=True)
except Exception, e:
logger.error('ExFailed to open file', exc_info=True)