Python конвертировать mp3 в WAV с Pydub
Хорошо, теперь я застрял в преобразовании mp3 в WAV. Я видел разные ответы, но я думаю, что я бы пошел на один из Pydub, который я уже сделал, используя эти несколько строк
from pydub import AudioSegment
AudioSegment.from_mp3("/input/file.mp3").export("/output/file.wav", format="wav")
но когда я запускаю приведенный выше код, я получаю следующую ошибку
C:\Python27\lib\site-packages\pydub-0.14.2-py2.7.egg\pydub\utils.py:165: RuntimeWarning: не удалось найти ffmpeg или avconv - по умолчанию ffmpeg, но может не работать
Трассировка (последний вызов был последним): файл "C:/Users/phourlhar/Desktop/VoiceDetector/yeah.py", строка 7, в stereo_to_mono()
Файл "C:\Users\phourlhar\Desktop\VoiceDetector\utils.py", строка 25, в stereo_to_mono
sound = AudioSegment.from_mp3(PROJECT_DIR+'\\files\\rec'+str(c)+'.mp3')
Файл "build\bdist.win32\egg\pydub\audio_segment.py", строка 346, в файле from_file
Файл "C:\Python27\lib\subprocess.py", строка 711, в init errread, errwrite)
Файл "C:\Python27\lib\subprocess.py", строка 948, в _execute_child startupinfo)
WindowsError: [Ошибка 2] Система не может найти указанный файл
Я не знаю, почему возникает эта ошибка, так как я уверен, что файл существует. Хотя у меня есть ответы, предлагающие установку ffmpeg, но я не знаю, повлияет ли это на развертывание приложения каким-либо образом позже
2 ответа
pydub
модуль использует либо ffmpeg
или же avconf
программы, чтобы сделать фактическое преобразование. Таким образом, вы должны установить ffmpeg
чтобы сделать эту работу.
Но если вам не нужно pydub
для всего остального, вы можете просто использовать встроенный subprocess
модуль для вызова программы конвертера, как ffmpeg
как это:
import subprocess
subprocess.call(['ffmpeg', '-i', '/input/file.mp3',
'/output/file.wav'])
Между прочим, это требует, чтобы бинарный файл ffmpeg находился в вашей папке $PATH.
Изменить: с ffmeg
Насколько я знаю, вы не можете конвертировать стерео в моно. Вы можете выбрать только левый или правый канал. Я предполагаю, что это не то, что вы хотите.
sox
Программа может конвертировать стерео в моно:
import subprocess
subprocess.call(['sox', '/input/file.mp3', '-e', 'mu-law',
'-r', '16k', '/output/file.wav', 'remix', '1,2'])
Это будет выборка на частоте 16 кГц, с 8 битами на выборку, что даст вам 16 кбит / с.
Вы должны пойти на Pydub, это отличный модуль для операций, связанных с аудиофайлами.
НОТА. Не забудьте установить ffmpeg перед использованием pydub.
Для получения справки по установке ffmpeg вы можете воспользоваться этой ссылкой.
Затем, чтобы установить pydub, просто откройте командную строку и введите
pip install pydub
Затем для конвертации любого файла из mp3 в wav просто используйте pydub как
import pydub
sound = pydub.AudioSegment.from_mp3("D:/example/apple.mp3")
sound.export("D:/example/apple.wav", format="wav")
Проблема связана с отсутствием ffmpeg
. Pydub требует, чтобы он выполнял операции преобразования формата. Для решения проблемы есть 2 способа:
Просто установите pydub с помощью conda , а не pip (несмотря на предложение на странице Pydub на GitHub)
conda install -c conda-forge pydub
Это должно работать нормально. Причина неизвестна, возможно, из-за несовместимости.
Другое решение (если вы уже использовали pip для установки Pydub, и он не работает) - установить недостающий
ffmpeg
пакет. Здесь возникает еще одна проблема. Хотя мы можем найти пакет с именемffmpeg
как на pypi, так и на anaconda, если мы установили только один из источников, мы, вероятно, увидим ошибку, напримерIn [1]: import ffmpeg --------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) <ipython-input-1-16f5f3b4de71> in <module> ----> 1 import ffmpeg ModuleNotFoundError: No module named 'ffmpeg'
После нескольких тестов я обнаружил, что оба должны быть установлены, чтобы пакет ffmpeg
работать (другими словами, установить дважды). В противном случае Python каким-то образом не может найти пакет, даже если он был установлен через pip или anaconda. Так что просто введите
pip install ffmpeg
conda install ffmpeg
Теперь попробуйте импортировать ffmpeg
в питоне. Если ошибки нет, проблема уже должна быть решена.
ОБРАТИТЕ ВНИМАНИЕ, что при загрузке вручнуюffmpeg
с веб-сайта FFmpeg и добавьтеbin
путь к sys.path
может не помочь с этой проблемой. Точно так же вручную указав путь к исполняемому файлуffmpeg
(в Windows это ffmpeg.exe
) тоже может не решить проблему.