求助:编写脚本时无法将ffmpeg错误输出重定向至文件
解决FFmpeg错误输出无法重定向到文件的问题
问题根源在于:FFmpeg的错误信息是输出到标准错误流(stderr,句柄2),而Windows批处理中默认的>或>>仅重定向标准输出流(stdout,句柄1),所以错误信息会直接显示在控制台,不会写入日志文件。
下面提供两种针对性的解决方案:
方案1:将所有输出(包括控制台提示和错误)写入日志文件
修改脚本,在调用日志函数时同时重定向stdout和stderr到日志:
@echo off set LOGFILE=error_check.log call :LOG > %LOGFILE% 2>&1 exit /B :LOG for /r %%A IN (*.mp4) DO ( echo "%%A" ffmpeg.exe -hwaccel auto -v error -i "%%A" -f null - ) exit /B
2>&1的作用是把标准错误流的输出合并到标准输出流的目标文件,实现所有内容写入日志。
方案2:仅将FFmpeg错误写入日志,保留控制台提示
如果希望控制台显示正在检查的文件名,仅把错误信息写入日志,可以单独重定向FFmpeg的stderr:
@echo off set LOGFILE=error_check.log :: 可选:清空日志文件,避免重复追加旧内容 echo. > %LOGFILE% for /r %%A IN (*.mp4) DO ( echo "%%A" ffmpeg.exe -hwaccel auto -v error -i "%%A" -f null - 2>>%LOGFILE% ) exit /B
2>>表示将标准错误流的内容追加到日志文件,而echo "%%A"的内容会正常显示在控制台。- 若不需要清空日志,删除
echo. > %LOGFILE%即可。
说明:你之前尝试的>>无效,是因为它默认只处理stdout,而FFmpeg的错误在stderr,必须明确指定2>>才能捕获错误信息。无需使用-report选项,-v error已经足够只输出错误内容。
内容的提问来源于stack exchange,提问作者Netch
相关产品推荐
相关产品推荐

