Я пытаюсь преобразовать аудиофайл mp3 из формата .mp3 и многоканального звука в формат .flac и одноканальный звук в моем приложении на колбу Python. В настоящее время я использую оболочку Python для ffmpeg с именем ffmpy. Вот мой код.
from ffmpy import FFmpeg
ff = FFmpeg(
#executable = '/ffmpeg-20190304-db33283-macos64-static/bin/ffmpeg',
inputs = {<Input File.mp3>: None},
outputs = {'<output file.flac>': ['-ac 1']}
)
ff.run()
С этим сегментом кода мы столкнулись с множеством ошибок при развертывании приложения фляги на heroku (кажется, что код работает локально). Ошибка, с которой я сталкиваюсь - это исключение
ffmpy.FFExecutableNotFoundError: Executable 'ffmpeg' not found
. Чтобы это исправить, я попытался загрузить
ffmpeg build и установить его как свой исполняемый файл (см. Комментарий в моем коде выше). Я перетащил это в каталог моего проекта и добавил приведенный выше код, но выдает ту же ошибку, за исключением того, что сказано:
ffmpy.FFExecutableNotFoundError: Executable 'ffmpeg-20190304-db33283-macos64-static/bin/ffmpeg not found
. Имя файла было исполняемым файлом, не найденным в случае, если это было неясно. Затем мы попытались добавить пакеты сборки из следующих двух репозиториев github:
https://github.com/HYPERHYPER/heroku-buildpack-ffmpeg и
https://github.com/integricho/heroku-buildpack-python-ffmpeg, но ни один из пакетов сборки не решил проблему. Когда мы запустили
heroku run bash
и набрали
ffmpeg
, мы получили команду not found. Затем я попытался установить его с
apt-get install ffmpeg
на Heroku Bash, но это также не удалось. Это мой файл require.txt.
Flask==1.0.2
Flask-Cors==3.0.4
gcloud==0.18.3
google-api-core==1.7.0
google-auth==1.6.2
google-cloud-core==0.29.1
google-cloud-speech==0.36.3
google-cloud-storage==1.14.0
google-resumable-media==0.3.2
googleapis-common-protos==1.5.6
gunicorn==19.9.0
matplotlib==2.2.2
lib==3.0.0
grpcio==1.13.0rc3
SpeechRecognition==3.8.1
watson-developer-cloud==2.8.0
wordcloud==1.5.0
Werkzeug==0.14.1
python-docx==0.8.10
sox==1.3.7
redis==3.2.0
requests==2.21.0
rq==0.13.0
ffmpeg==1.4
ffmpeg-python==0.1.17
ffmpy==0.2.2
sox==1.3.7
`Мы также пытались запустить подпроцесс с помощью команды sox:
import subprocess
subprocess.call(['sox', <inputfile.mp3>, '-r', '44100', '<outputfile.flac', 'remix', '1,2'], shell=True)
Это продолжало говорить <inputfile.mp3> sox: not found
, и поэтому я развернулся к ffmpeg. Если есть более эффективный способ сделать это преобразование, пожалуйста, дайте мне знать, так как я новичок и в python, и в heroku. Любая помощь приветствуется.