如何配置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
相关产品推荐
相关产品推荐

