Как конвертировать wav в flac из python?

Я только начал использовать Python и использовать PyAudio и Wave модули, чтобы взять звук с моего микрофона и преобразовать его в .

то, что я пытаюсь сделать, это преобразовать это .wav до .flac. Я видел несколько способов сделать это, все из которых включают установку конвертера и размещение его в моем экологическом пути и вызов его через os.system.

есть ли другие способы преобразования .wav до .flac через Python? Решение я ищу для потребностей работать как на Windows, так и на Linux.

3 ответов


может быть вы ищете Инструменты Python Audio.

кажется, ПЭТ может делать все, что вы хотите.


Я не тестировал это решение, но вы можете использовать pydub

    from pydub import AudioSegment
    song = AudioSegment.from_wav("test.wav")
    song.export("testme.flac",format = "flac")

преобразование поддерживается многочисленными форматами файлов (см. список поддерживаемых форматов файлов ffmpeg здесьhttps://ffmpeg.org/general.html#Audio-Codecs


вот пример кода с использованием библиотеки Python Python Audio Tools преобразование до :

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 Audio Tools:http://audiotools.sourceforge.net/install.html

enter image description here

https://wiki.python.org/moin/Audio/ (зеркала) пытается перечислить все полезные библиотеки Python для работы со звуком в сочетании с Питон.


больше скрипт Python для multithreadedly пакетного преобразования 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)