如何让gst-launch-1.0双流合成窗口全屏并解决视频裁剪问题
解决GStreamer合成流全屏显示裁剪问题
你的问题核心是合成后的视频尺寸与屏幕分辨率不匹配,直接修改单流尺寸只会让局部内容超出屏幕导致裁剪,需要从合成输出尺寸适配和显示端全屏控制两方面调整:
方法1:拉伸填充全屏(无黑边,允许比例变形)
通过关闭显示端的宽高比强制约束,让合成后的视频直接拉伸适配屏幕:
/usr/bin/gst-launch-1.0 -e \ videomixer name=mix background=0 sink_1::xpos=0 sink_1::ypos=0 sink_2::xpos=500 sink_2::ypos=0 \ ! autovideosink fullscreen=true force-aspect-ratio=false \ uridecodebin uri=https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm ! videoscale ! video/x-raw,width=500,height=400 ! mix.sink_1 \ uridecodebin uri=https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm ! videoscale ! video/x-raw,width=500,height=400 ! mix.sink_2
方法2:保持比例无裁剪(会出现黑边)
保留合成视频的原始比例,通过缩放适配屏幕,避免内容裁剪:
/usr/bin/gst-launch-1.0 -e \ videomixer name=mix background=0 sink_1::xpos=0 sink_1::ypos=0 sink_2::xpos=500 sink_2::ypos=0 \ ! videoscale ! video/x-raw,width=1920,height=1080,force-aspect-ratio=true \ ! autovideosink fullscreen=true \ uridecodebin uri=https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm ! videoscale ! video/x-raw,width=500,height=400 ! mix.sink_1 \ uridecodebin uri=https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm ! videoscale ! video/x-raw,width=500,height=400 ! mix.sink_2
注:将
1920,height=1080替换为你的实际屏幕分辨率
方法3:适配屏幕比例的完美拼接
调整单流尺寸,让合成后的视频比例与屏幕一致,实现无变形、无黑边的全屏显示(以16:9屏幕为例):
/usr/bin/gst-launch-1.0 -e \ videomixer name=mix background=0 sink_1::xpos=0 sink_1::ypos=0 sink_2::xpos=960 sink_2::ypos=0 \ ! autovideosink fullscreen=true \ uridecodebin uri=https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm ! videoscale ! video/x-raw,width=960,height=540 ! mix.sink_1 \ uridecodebin uri=https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm ! videoscale ! video/x-raw,width=960,height=540 ! mix.sink_2
注:960x540是1920x1080屏幕的单半尺寸,其他比例屏幕需按对应比例计算单流尺寸
关键参数说明
fullscreen=true:强制autovideosink窗口全屏显示force-aspect-ratio:控制是否保持视频宽高比,false允许拉伸,true强制保留比例videoscale:用于动态调整视频流尺寸,适配合成或显示需求
内容的提问来源于stack exchange,提问作者Evan Krause
相关产品推荐
相关产品推荐

