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

FFMPEG终端运行正常但PHP脚本调用转MP4失败如何解决

问题排查与解决方案

1. 排查权限问题

  • 确认ffmpeg路径正确性:终端执行which ffmpeg,对比输出路径是否和代码里的/usr/bin/ffmpeg一致
  • 测试web运行用户的ffmpeg执行权限:假设你的web服务运行用户是www-data,终端执行sudo -u www-data /usr/bin/ffmpeg -version,如果无法输出版本信息,执行chmod +x /usr/bin/ffmpeg添加执行权限
  • 确认上传目录权限:给uploadvideo目录开放web用户的读写权限,执行chown -R www-data:www-data uploadvideo和chmod 755 uploadvideo,避免转码后输出文件无法写入

2. 排查PHP函数禁用

查看php.ini配置文件中的disable_functions项,确认exec函数没有被列入禁用列表,如果被禁用需要移除后重启PHP-FPM或web服务。

3. 修正命令拼接逻辑

你当前的命令拼接没有对文件名做转义,当上传的文件名包含空格、特殊字符、中文时会导致命令执行失败,同时缺失音频编码参数可能导致MP4文件兼容性问题,修改exec相关代码如下:

// 转义文件名参数避免特殊字符报错
$input_file = escapeshellarg($uploaded_file);
$output_file = escapeshellarg("./uploadvideo/".$video_mp4);
// 增加音频编码参数,同时接收执行返回状态
exec($ffmpeg . ' -i ' . $input_file . ' -c:v libx264 -c:a aac ' . $output_file . ' -y 1>convert.txt 2>&1', $output_arr, $return_code);

// 后续可以通过返回值判断执行结果
if ($return_code === 0 && file_exists($output_file) && filesize($output_file) > 0) {
    // 转码成功逻辑
} else {
    // 转码失败,可查看convert.txt文件中的具体报错信息
}

4. 错误排查技巧

如果修改后仍然无法执行,直接打开根目录下的convert.txt文件,里面会记录ffmpeg执行的完整日志,可根据具体报错信息定位问题,比如缺少libx264编码依赖、源视频文件损坏等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:36:03