You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确使用GStreamer的interlace元素实现逐行转隔行?

GStreamer interlace元素未生成预期隔行场的问题解决

你遇到的问题根源在于interlace元素的默认行为不是拆分场为独立缓冲区,而是将逐行帧打包为交织式隔行帧(interleaved)——两个场合并在同一个缓冲区里,保持原分辨率和缓冲区数量,所以两条管道输出结果一致。

正确的解决方案

要实现将一帧逐行帧拆分为两个独立的场缓冲区,需要明确指定interlace元素的输出格式为场模式(field),并通过caps过滤器强制GStreamer生成独立的场缓冲区:

gst-launch-1.0 -v videotestsrc pattern=ball num-buffers=10 ! video/x-raw,format=YUY2,width=640,height=480,framerate=30/1 ! interlace ! video/x-raw,interlace-mode=field,framerate=60/1,width=640,height=240 ! multifilesink location=c:\x_%d.raw

关键说明

  • 原输入videotestsrc默认帧率为30/1,10帧逐行帧拆分为20个场后,帧率需对应翻倍为60/1,确保caps协商成功。
  • 通过video/x-raw,interlace-mode=field,height=240强制输出独立场缓冲区,每个缓冲区仅包含奇数行或偶数行,高度为原帧的一半(240),文件大小变为6402402=307200字节。
  • 未指定输出caps时,interlace默认输出interleaved模式的隔行帧,缓冲区仍保持原分辨率和数量,因此无法得到预期的20个小文件。

内容的提问来源于stack exchange,提问作者Vincentz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:02:12