当使用 gdigrab 捕获的窗口关闭时停止编码所有输出(ffmpeg)

当使用 gdigrab 捕获的窗口关闭时停止编码所有输出(ffmpeg)

我正在尝试在 Windows 上同时捕获和编码两个流 - 网络摄像头图像和桌面捕获(特定窗口)ffmpeg。我想出了以下命令来实现此目的:

ffmpeg -f gdigrab -i title="<window>" -f dshow -i video="<camera>" \
    -map 0:v -codec:v libx264 -crf 24 -preset ultrafast -shortest out1.mp4 \
    -map 1:v -codec:v libx264 -crf 24 -preset ultrafast -shortest out2.mp4

诀窍是我希望两个录制都同时开始和停止,这样例如如果我为两个输出设置相同的帧速率,我就会得到相同数量的帧(假设硬件可以跟上)。上面的命令可以做到这一点,但前提是我手动退出(按Q)。如果我关闭正在录制的窗口,则相关编码会在以下消息后停止:

[gdigrab @ 0000022c31d4b700] Can't find window '<window>', aborting.

但是,网络摄像头录制仍在继续。那么我的问题是 - 是否可以让它在同一时间自动停止。我认为这就是该-shortest选项的作用,但它似乎在这里不起作用。我也考虑过用一个公共音频输入将两个输出绑定在一起,但这似乎是一个很大的解决方法。顺便问一句 - 关闭正在录制的窗口真的可以接受吗?

—马特乌斯

答案1

这是一种方法。两个输出持续时间不保证相同,但它们会接近。

ffmpeg -f gdigrab -i title="<window>" -f dshow -i video="<camera>" \
       -map 0:v -map 1:v -flags +global_header -c:v libx264 -crf 24 -preset ultrafast \
       -shortest -f tee "[select=\'v:0\']out1.mp4|[select=\'v:1\']out2.mp4"

相关内容