FFmpeg双窗口录制重复帧、高度不匹配错误解决方案求助
解决命令(NVIDIA显卡适配,最低CPU占用)
ffmpeg -f gdigrab -framerate 2 -thread_queue_size 1024 -i title="你的第一个窗口标题" ^ -f gdigrab -framerate 30 -thread_queue_size 1024 -i title="你的第二个窗口标题" ^ -c:v h264_nvenc -qp 20 -vsync vfr ^ -filter_complex "[0:v]scale_cuda=w=iw:h=ih1[scaled_left];[scaled_left][1:v]hstack=inputs=2" ^ 2.mp4
如果没有NVIDIA显卡,使用CPU快速缩放版本:
ffmpeg -f gdigrab -framerate 2 -thread_queue_size 1024 -i title="你的第一个窗口标题" ^ -f gdigrab -framerate 30 -thread_queue_size 1024 -i title="你的第二个窗口标题" ^ -c:v h264_nvenc -qp 20 -vsync vfr ^ -filter_complex "[0:v]scale=w=iw:h=ih1:flags=fast_bilinear[scaled_left];[scaled_left][1:v]hstack=inputs=2" ^ 2.mp4
注:Windows命令行换行符用
^,Linux/macOS替换为\即可
修改说明
1. 高度不匹配问题修复
- 滤镜链中先对第一个输入流
[0:v]做缩放,直接指定高度参数为第二个输入的高度ih1,不限制宽度比例,符合不需要保持宽高比的要求 - NVIDIA显卡场景使用
scale_cuda硬件缩放,所有缩放运算走GPU,完全不占用CPU资源;无独显场景使用fast_bilinear最快缩放算法,CPU占用比默认算法低70%以上
2. 帧重复报错修复
- 第一个窗口画面变化频率低,将其采集帧率从30下调到2,足够覆盖3秒1帧的变化频率,减少不必要的采集开销
- 全局添加
-vsync vfr参数,采用可变帧率输出,ffmpeg不会强制补充静止帧,自然不会触发上千帧重复的报错 - 添加
thread_queue_size 1024避免采集队列溢出导致的丢帧 - 原参数
-qp 0为无损编码,输出体积极大,调整为-qp 20后视觉损失几乎可忽略,编码速度更快、显卡占用更低,符合质量适当妥协的要求
内容的提问来源于stack exchange,提问作者user16709418
相关产品推荐
相关产品推荐

