如何在bat文件中获取ffmpeg volumedetect输出并提取mean_volume参数
实现方法
完全可以实现,ffmpeg默认将滤镜日志输出到标准错误流(stderr)而非标准输出流(stdout),因此只需添加流重定向规则即可捕获输出内容,再进行字符串筛选就能把参数存入变量。
完整批处理脚本示例
@echo off setlocal enabledelayedexpansion :: 定义待处理视频路径 set "INPUT_VIDEO=C:\Users\Nate\Videos\VideoClips\1080p-47243316.mp4" :: 执行volumedetect检测,重定向stderr到stdout,筛选目标参数行存入临时文件 ffmpeg -i "%INPUT_VIDEO%" -filter:a volumedetect -f null NUL 2>&1 | findstr /r /c:"mean_volume" /c:"max_volume" > vol_temp.txt :: 提取平均音量数值存入变量 for /f "tokens=2 delims= " %%a in ('type vol_temp.txt ^| findstr "mean_volume"') do set "mean_volume=%%a" :: 提取最大音量数值存入变量 for /f "tokens=2 delims= " %%a in ('type vol_temp.txt ^| findstr "max_volume"') do set "max_volume=%%a" :: 清理临时文件 del vol_temp.txt :: 测试打印变量,可根据需求修改为其他业务逻辑 echo 平均音量:%mean_volume% echo 最大音量:%max_volume% endlocal
关键逻辑说明
- 流重定向:命令里的
2>&1表示将标准错误流的输出重定向到标准输出流,这样后续的文本筛选命令才能捕获到volumedetect的输出内容 - Windows适配:将原命令中的
/dev/null替换为Windows系统对应的空设备NUL,避免路径不存在报错 - 扩展参数提取:如果需要提取volumedetect输出的其他参数,只需修改
findstr的匹配关键词即可
内容的提问来源于stack exchange,提问作者NTProductions
相关产品推荐
相关产品推荐

