我正在编写一个Flask应用程序,并将一个芹菜任务用于一个长时间运行的任务。基本上,这个长时间运行的任务使用ffmpeg-python模块来处理视频。当我通过flask API正常运行代码时,代码运行良好,但当我试图通过celele worker执行该任务时,它无法识别FFmpeg。请帮助
@celery.task(bind=True)
def process_upload(self, file_name):
self.update_state(state='PROGRESS',
meta={'current': 1, 'total': 4,
'status': "extracting audio"})
get_audio(file_name=file_name)
return {'current': -1, 'total': 4, 'status': 'Task completed!'}
@app.route('/process_upload', methods=['POST'])
def processupload():
task = process_upload.apply_async(args=['output1'])
return jsonify({'task_id': task.id}), 202,
def get_audio(file_name):
from os.path import exists
import ffmpeg
try:
if not exists(file_name + '.mp3'):
video = ffmpeg.input(file_name + '.mp4')
output = ffmpeg.output(video.audio, f'{file_name}.mp3')
ffmpeg.run(output)
return True
except Exception as e:
raise e
芹菜错误附加
看起来您不是在与Flask应用程序相同的Python环境中运行Celery任务。你能仔细检查一下你的Flask应用程序是否正在使用/home/adil/.local/lib/python3.10
作为python解释器运行吗?
基本上,在浏览了FFmpeg支持材料后,我知道FFmpeg python需要在机器上安装FFmpeg,并正确设置env变量,从而解决了问题。
在Ubuntu、上安装FFmpeg的命令
sudo apt安装ffmpeg