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

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

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

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


person Charles W    schedule 29.05.2014    source источник


Ответы (3)


Возможно, вы ищете Python Audio Tools.

Кажется, что PAT может делать все, что вы хотите.

person valignatev    schedule 29.05.2014
comment
Знаете ли вы, как Python Audio Tools сравнивается по скорости с subprocess.popen(flac_converter)? - person Charles W; 29.05.2014
comment
Я знаю, что PAT может использовать несколько ядер процессора для преобразования. Это довольно быстро. И скорость subprocess.popen(converter) очень зависит от скорости стороннего аудио программного обеспечения. - person valignatev; 29.05.2014

Я не тестировал это решение, но вы можете использовать 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

person GodSaveTheDucks    schedule 25.10.2015
comment
чтобы получить pydub, используйте pip: (sudo) pip install pydub - person GodSaveTheDucks; 25.10.2015
comment
это полностью помещает аудиофайл в память? Если да, то есть ли способ сделать это более потоковым? - person Joe.Zeppy; 11.01.2017

Вот пример кода с использованием библиотеки 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 Audio Tools: 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)
person Franck Dernoncourt    schedule 01.01.2018
comment
Могу ли я просто передать wav-файл этому скрипту Python? то есть python pythonsciptwavtoflacConverter.py myfile.wav (предположим, что указанный выше скрипт назван: pythonscriptwavtoflacConverter. - person Stryker; 19.01.2018