如何使用FFmpeg同时录制两个窗口并输出到单个文件
实现方案
场景1:输出文件包含两路独立视频流(可在播放器切换查看)
直接新增第二个gdigrab输入源,通过-map参数指定保留两路视频流即可,将命令中title="你的第二个窗口标题"替换为你实际要捕获的窗口标题:
ffmpeg -f gdigrab -framerate 30 -i title="Chrome" -f gdigrab -framerate 30 -i title="你的第二个窗口标题" -map 0:v -b:v:0 3M -map 1:v -b:v:1 3M output.flv
参数说明:-map 0:v对应取用第一个输入(Chrome窗口)的视频流,-map 1:v对应取用第二个输入的视频流,-b:v:0和-b:v:1分别为两路流设置独立码率。
场景2:将两个窗口画面拼接为单路视频输出
如果你需要把两个窗口的画面合并为同一个画面输出,可以用ffmpeg的内置滤镜实现拼接:
- 左右拼接命令示例:
ffmpeg -f gdigrab -framerate 30 -i title="Chrome" -f gdigrab -framerate 30 -i title="你的第二个窗口标题" -filter_complex "[0:v][1:v]hstack=inputs=2[v]" -map "[v]" -b:v 6M output.flv
- 上下拼接只需将滤镜中的
hstack替换为vstack即可。 - 如果两个窗口分辨率不一致,可先通过scale滤镜统一尺寸再拼接,比如统一高度为720p的写法:
ffmpeg -f gdigrab -framerate 30 -i title="Chrome" -f gdigrab -framerate 30 -i title="你的第二个窗口标题" -filter_complex "[0:v]scale=-1:720[v0];[1:v]scale=-1:720[v1];[v0][v1]hstack=inputs=2[v]" -map "[v]" -b:v 6M output.flv
注意事项
- 两个窗口的标题要完全匹配,不要出现重复标题的窗口,否则gdigrab会随机匹配其中一个
- 两路捕获的帧率建议保持一致,避免出现画面不同步的问题
- 如果需要同时捕获系统音频或麦克风音频,可额外添加音频输入参数并指定音频映射规则
内容的提问来源于stack exchange,提问作者user12733526
相关产品推荐
相关产品推荐

