如何裁剪与叠加dshow?求助FFmpeg调整1080P摄像头分辨率
解决FFmpeg摄像头画面尺寸无法调整的问题
你的问题核心是**-video_size参数位置错误**,该参数不能嵌套在滤镜链(filter_complex)的字符串中,且需针对摄像头输入单独设置尺寸,或通过滤镜完成画面缩放。以下是两种可行的修正方案:
方案1:直接指定摄像头输入尺寸
在dshow输入参数中添加-video_size 200x200,让摄像头直接输出目标分辨率的画面,修改后的完整命令:
ffmpeg -y -rtbufsize 100M -thread_queue_size 9400 -f dshow -video_size 200x200 -i video="USB Live Camera":audio="Microphone (2- Trust GXT 232 Microphone)" -thread_queue_size 9400 -f gdigrab -draw_mouse 0 -i desktop -filter_complex "[1:v]pad=height=ih+10:color=black[b]; [b][0:v]overlay=(main_w-overlay_w):main_h-overlay_h[v]" -map "[v]" -map 0:a -r 20 -preset ultrafast -tune zerolatency -c:v libx264 -b:v 10M -c:a aac -crf 30 -pix_fmt yuv420p -fflags nobuffer -f flv rtmp://localhost/hls/stream6
- 关键调整:将
-video_size 200x200移至dshow的-i参数前,直接控制摄像头的输出分辨率。 - 额外优化:整理了原命令中重复的编码参数(如多次出现的
-c:v libx264、-c:a aac),避免冗余配置。
方案2:用滤镜缩放摄像头画面
若摄像头硬件不支持直接输出指定尺寸(部分老旧设备存在此限制),可通过scale滤镜对摄像头画面进行强制缩放,修改后的命令:
ffmpeg -y -rtbufsize 100M -thread_queue_size 9400 -f dshow -i video="USB Live Camera":audio="Microphone (2- Trust GXT 232 Microphone)" -thread_queue_size 9400 -f gdigrab -draw_mouse 0 -i desktop -filter_complex "[0:v]scale=200x200[cam_scaled]; [1:v]pad=height=ih+10:color=black[b]; [b][cam_scaled]overlay=(main_w-overlay_w):main_h-overlay_h[v]" -map "[v]" -map 0:a -r 20 -preset ultrafast -tune zerolatency -c:v libx264 -b:v 10M -c:a aac -crf 30 -pix_fmt yuv420p -fflags nobuffer -f flv rtmp://localhost/hls/stream6
- 关键调整:在滤镜链开头添加
[0:v]scale=200x200[cam_scaled],将摄像头画面(流0:v)缩放到200x200,后续叠加时使用缩放后的流[cam_scaled]。
内容的提问来源于stack exchange,提问作者Yac Ine
相关产品推荐
相关产品推荐

