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

PHP调用含ffmpeg的Python脚本失败,终端运行正常求解决

解决PHP调用Python混音脚本时Pydub找不到FFmpeg的问题

核心原因

PHP运行进程(通常为www-data用户)的环境变量PATH与终端用户不一致,导致Pydub无法自动定位FFmpeg;或Python脚本未明确指定FFmpeg路径。

具体解决方案

  • 直接在Python脚本中指定FFmpeg路径
    跳过环境变量检测,手动给Pydub指定FFmpeg的绝对路径(先通过终端which ffmpeg确认实际路径):

    from pydub import AudioSegment
    # 替换为你的FFmpeg实际路径,比如/usr/bin/ffmpeg
    AudioSegment.converter = "/usr/bin/ffmpeg"
    
  • 修正PHP执行时的PATH环境变量
    不要单独设置FFmpeg路径,而是将FFmpeg所在目录追加到PATH中:

    // 先获取原有PATH,再追加FFmpeg所在目录
    putenv("PATH=" . getenv("PATH") . ":/usr/bin");
    // 再执行Python脚本
    exec("python3 /path/to/your/mix_script.py", $output, $return_code);
    

    或者直接在执行命令前临时设置PATH:

    $command = 'PATH=$PATH:/usr/bin python3 /path/to/your/mix_script.py';
    exec($command, $output, $return_code);
    
  • 验证PHP运行环境的路径与权限
    写一个测试PHP脚本,确认当前PHP进程能找到FFmpeg:

    <?php
    echo "当前PATH: " . getenv("PATH") . "\n";
    exec("which ffmpeg 2>&1", $ffmpeg_path);
    echo "FFmpeg路径检测结果: ";
    print_r($ffmpeg_path);
    ?>
    

    如果输出为空或报错,说明FFmpeg所在目录未被PHP的PATH包含,需调整PATH设置。

  • 确保调用的Python版本与终端一致
    终端执行which python3获取绝对路径,PHP中使用该路径调用脚本,避免用错Python环境:

    // 比如终端输出为/usr/local/bin/python3
    exec("/usr/local/bin/python3 /path/to/your/mix_script.py", $output, $return_code);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:40:02