You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask中Celery任务无法识别FFmpeg-python问题求助

Celery Worker执行FFmpeg任务无法识别的解决方案

问题根源

Celery Worker的运行环境与Flask主进程环境不一致,导致FFmpeg未被Worker识别。常见诱因包括:

  • Worker的PATH环境变量未包含FFmpeg安装路径
  • 虚拟环境未在Worker启动时激活
  • 分布式部署场景下,Worker所在机器未安装FFmpeg

具体解决办法

1. 显式指定FFmpeg绝对路径

修改get_audio函数,直接传入FFmpeg可执行文件的绝对路径,绕过环境变量依赖:

def get_audio(file_name):
    from os.path import exists
    import ffmpeg
    try:
        # 替换为你的FFmpeg实际路径,Windows示例:"C:/ffmpeg/bin/ffmpeg.exe",Linux示例:"/usr/bin/ffmpeg"
        ffmpeg_executable = "/usr/bin/ffmpeg"
        if not exists(f"{file_name}.mp3"):
            video = ffmpeg.input(f"{file_name}.mp4")
            output = ffmpeg.output(video.audio, f"{file_name}.mp3")
            ffmpeg.run(output, cmd=ffmpeg_executable)
        return True
    except Exception as e:
        raise e

2. 对齐Worker与主进程的运行环境

  • 激活虚拟环境启动Worker:
    如果使用虚拟环境,启动Worker前先激活环境:
    # Linux/macOS
    source /path/to/your/venv/bin/activate && celery -A your_flask_app worker --loglevel=info
    
    # Windows
    \path\to\your\venv\Scripts\activate && celery -A your_flask_app worker --loglevel=info
    
  • 检查并补充Worker的PATH变量:
    可以先在Worker中打印PATH排查:
    import os
    @celery.task
    def debug_path():
        print(os.environ.get('PATH'))
    
    若输出未包含FFmpeg目录,在Celery初始化时手动添加:
    import os
    from celery import Celery
    
    celery = Celery('your_flask_app')
    # 替换为FFmpeg所在目录
    ffmpeg_dir = "/usr/bin"
    if ffmpeg_dir not in os.environ['PATH']:
        os.environ['PATH'] += os.pathsep + ffmpeg_dir
    

3. 验证Worker机器的FFmpeg安装

如果是分布式部署,确保Worker运行的机器上已安装FFmpeg,执行以下命令确认:

ffmpeg -version

若命令失败,先在该机器上安装FFmpeg。

额外排查方向

  • 确认视频文件路径:改用绝对路径传递file_name,避免Worker进程找不到文件
  • 检查文件权限:确保Worker进程拥有读取源视频和写入音频文件的权限

内容的提问来源于stack exchange,提问作者Adil Rao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 08:30:50