gpt4 book ai didi

-list_devices 和 -list_options 的 ffmpeg 意外退出代码 1

转载 作者:行者123 更新时间:2023-12-04 23:10:34 24 4
gpt4 key购买 nike

描述
如果我从 examples in the documentation 运行以下任何命令, 使用 ffmpeg 4.2.2 在Windows 10上,请求的信息在控制台成功显示,但进程退出,退出码1 , 而不是预期的 0 (成功)。

ffmpeg -list_devices true -f dshow -i dummy

ffmpeg -list_options true -f dshow -i video="MyCamera"
据我所知,退出代码 1在 Windows 上意味着 "Incorrect function" ,所以我认为这种行为是出乎意料的。
如果我将相机输入流式传输到磁盘,例如使用 ffmpeg -f dshow -i video="MyCamera" "myfile.mp4" ,然后停止使用 q,退出代码为 0 ,正如预期的那样。
问题
是否退出代码 1构成 ffmpeg 的正常行为,还是我做错了什么?
关联
从命令行手动运行命令时,退出代码没有太大区别,只要显示请求的信息即可。
但是,以编程方式运行命令时,可能会引起麻烦。例如,使用 Python 的 subprocess.run(..., check=True) ,非零退出代码会导致 CalledProcessError .
当然有解决这个问题的方法,例如使用 check=False ,但关键是如果 ffmpeg表现如预期,即返回 0 .

最佳答案

退出代码 1同时列出带有 dshow 的设备是预期的输出,因为在这种情况下,代码使用 AVERROR_EXIT 立即退出并且不产生媒体输出。

if (ctx->list_devices) {
av_log(avctx, AV_LOG_INFO, "DirectShow video devices (some may be both video and audio devices)\n");
dshow_cycle_devices(avctx, devenum, VideoDevice, VideoSourceDevice, NULL, NULL);
av_log(avctx, AV_LOG_INFO, "DirectShow audio devices\n");
dshow_cycle_devices(avctx, devenum, AudioDevice, AudioSourceDevice, NULL, NULL);
ret = AVERROR_EXIT;
goto error;
}
您应该会看到 dummy: Immediate exit requested在日志中。
您当然可以轻松修改 libavdevice/dshow.c并进行干净的退出,但您必须编译自己的版本。

关于-list_devices 和 -list_options 的 ffmpeg 意外退出代码 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70064040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com