我正在尝试在 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"