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

如何配置FFmpeg在媒体转换完成后生成日志文件?

解决FFmpeg转换后无法生成日志文件的问题

我来帮你排查下FFmpeg日志生成失败的问题,先从你提供的命令里找最明显的问题,再给你几个实用的优化建议:

1. 修复日志路径的绝对路径缺失

你命令里的日志输出路径写的是2> var/www/html/logs/' . $id . '.txt,这里少了开头的/,变成了相对路径。而PHP的exec()函数执行时的工作目录不一定是你预期的根目录,这会导致日志文件可能生成在脚本所在的目录(比如/var/www/html/下的某个子文件夹),而不是你指定的/var/www/html/logs/目录里。

修正后的完整代码应该是:

$convert = '/usr/bin/ffmpeg -i /var/www/html/videos/' . $fileNormal . '.mp4 -vn -sn -c:a mp3 -ab 192k /var/www/html/audio/' . $fileFixed . '.mp3 2> /var/www/html/logs/' . $id . '.txt';
exec($convert);

2. 检查日志目录的权限

确保/var/www/html/logs/目录的权限允许web服务器用户(通常是www-data)读写:

# 更改目录所属用户组
sudo chown www-data:www-data /var/www/html/logs/
# 设置合适的读写权限
sudo chmod 755 /var/www/html/logs/

3. 验证FFmpeg命令的执行状态

可以给exec()添加参数,获取命令的执行返回值和输出,方便排查转换是否真的成功:

$convert = '/usr/bin/ffmpeg -i /var/www/html/videos/' . $fileNormal . '.mp4 -vn -sn -c:a mp3 -ab 192k /var/www/html/audio/' . $fileFixed . '.mp3 2> /var/www/html/logs/' . $id . '.txt';
exec($convert, $output, $return_var);

// 判断执行状态:0表示成功,非0表示失败
if ($return_var !== 0) {
    echo "FFmpeg转换失败,日志已写入 /var/www/html/logs/$id.txt";
} else {
    echo "转换完成,日志已生成";
}

4. 可选:生成更详细的日志

如果需要更详细的转换日志(比如排查音频编码问题),可以给FFmpeg添加-v verbose参数:

$convert = '/usr/bin/ffmpeg -v verbose -i /var/www/html/videos/' . $fileNormal . '.mp4 -vn -sn -c:a mp3 -ab 192k /var/www/html/audio/' . $fileFixed . '.mp3 2> /var/www/html/logs/' . $id . '.txt';
exec($convert);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:01:29