-list_devices 和 -list_options 的 ffmpeg 意外退出代码 1
ffmpeg unexpected exit code 1 for -list_devices and -list_options
描述
如果我运行以下任何命令来自examples in the documentation,使用ffmpeg
4.2.2 on Windows 10,请求的信息 成功显示在控制台中, 但是 进程退出时退出代码为 1
,而不是预期的 0
(成功)。
ffmpeg -list_devices true -f dshow -i dummy
ffmpeg -list_options true -f dshow -i video="MyCamera"
据我所知,Windows 上的退出代码 1
暗示 "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
并直接退出,但您必须编译自己的版本。
描述
如果我运行以下任何命令来自examples in the documentation,使用ffmpeg
4.2.2 on Windows 10,请求的信息 成功显示在控制台中, 但是 进程退出时退出代码为 1
,而不是预期的 0
(成功)。
ffmpeg -list_devices true -f dshow -i dummy
ffmpeg -list_options true -f dshow -i video="MyCamera"
据我所知,Windows 上的退出代码 1
暗示 "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
并直接退出,但您必须编译自己的版本。