ffmpeg执行-list_devices、-list_options命令时意外返回退出码1问题咨询
结论
这是FFmpeg dshow模块查询类命令的正常预期行为,不属于使用错误。
原因说明
你运行的-list_devices、-list_options属于纯查询类命令,不需要执行实际的音视频流处理、也没有指定输出目标。dshow模块完成枚举查询后,会主动触发终止流程,FFmpeg的全局运行逻辑会将这种「无有效流可处理的主动终止」判定为普通错误,因此返回退出码1,该表现从FFmpeg 3.x版本开始就长期存在,并非Windows平台独有问题。
正常执行录屏、录制摄像头的命令时,因为有明确的输出目标、完整的流处理流程,正常退出就会返回0,和你测试的结果一致。
解决方案
两种处理方式可选:
- 不修改命令:调用时关闭返回码校验,从stderr输出中提取设备、参数信息,只要输出内容完整即可判定执行成功,比如Python中设置
subprocess.run(..., check=False),再校验输出内容是否包含目标信息。 - 修改命令获取0退出码:在查询命令末尾添加
-f null -参数,指定空输出目标,让FFmpeg走正常完成流程,即可返回符合预期的0退出码,修改后的命令示例:
ffmpeg -list_devices true -f dshow -i dummy -f null - ffmpeg -list_options true -f dshow -i video="MyCamera" -f null -
内容的提问来源于stack exchange,提问作者djvg
相关产品推荐
相关产品推荐

