如何动态修改 videomixer sink pad alpha 值
How to modify videomixer sink pad alpha value dynamically
我想拍摄一个视频文件并叠加淡入淡出的字幕。
我刚刚开始学习如何使用 Gstreamer。
到目前为止,我已经设法将一个管道组合在一起,该管道将 textrender 元素绘制的字幕流合成到带有 videomixer 的原始视频流中 元素。不幸的是,textrender 及其姊妹元素 textoverlay 没有 fade-in/fade-out 功能。
videomixer sink pad 确实有一个 alpha 属性。现在,我已将名为 videomixer.sink_1 的 pad 的 alpha 值设置为 1.0。这是该管道的命令行版本:
#!/bin/bash
gst-launch-1.0 \
filesrc location=sample_videos/my-video.mp4 ! decodebin ! mixer.sink_0 \
filesrc location=subtitles.srt ! subparse ! textrender ! mixer.sink_1 \
videomixer name=mixer sink_0::zorder=2 sink_1::zorder=3 sink_1::ypos=-25 sink_1::alpha=1 \
! video/x-raw, height=540 \
! videoconvert ! autovideosink
我正在寻找一种随时间动态修改该 alpha 值的方法,以便我可以使字幕组件在适当的时间淡入淡出。 (我将单独解析 SRT 文件以确定淡入淡出的开始和结束时间。)
我正在研究GstBin C API(我的实际代码在Python)。我认为在使用 Gst.parse_launch() 创建管道后,我可以使用 gst_get_bin_by_name() 获取任何命名元素,然后使用该值访问 pad "sink_1".
一旦我做到这一点,我是否能够从接收计时器事件的事件处理程序动态修改该 alpha 值? videomixer 元素会立即响应 pad 的 属性 的变化吗?还有其他人这样做吗?
我在这里找到了部分答案: 但他们没有告诉我在管道 运行.
之后这是否可行
是的,它会起作用。
videomixer pad 动态响应变化;我已经使用 alpha 和 position 属性完成了此操作。可以使用
更改焊盘属性
g_object_set (mix_sink_pad, "alpha", 0.5, NULL);
我使用的是 C,但是您的 python 访问 bin 和 pad 的策略听起来是正确的。我的 gstreamer 代码根据来自 udp 套接字的输入进行响应,但计时器事件将工作得很好。例如,如果你想每 100 毫秒更改一次 alpha 值,你可以这样做
g_timeout_add_seconds (100, alpha_changer_cb, loop);
然后您可以在回调中使用 g_object_set 更改 alpha 属性;会动态更新,看起来很流畅
我成功了。您可以在 post 中阅读:https://westside-consulting.blogspot.com/2017/03/getting-to-know-gstreamer-part-4.html
我想拍摄一个视频文件并叠加淡入淡出的字幕。
我刚刚开始学习如何使用 Gstreamer。
到目前为止,我已经设法将一个管道组合在一起,该管道将 textrender 元素绘制的字幕流合成到带有 videomixer 的原始视频流中 元素。不幸的是,textrender 及其姊妹元素 textoverlay 没有 fade-in/fade-out 功能。
videomixer sink pad 确实有一个 alpha 属性。现在,我已将名为 videomixer.sink_1 的 pad 的 alpha 值设置为 1.0。这是该管道的命令行版本:
#!/bin/bash
gst-launch-1.0 \
filesrc location=sample_videos/my-video.mp4 ! decodebin ! mixer.sink_0 \
filesrc location=subtitles.srt ! subparse ! textrender ! mixer.sink_1 \
videomixer name=mixer sink_0::zorder=2 sink_1::zorder=3 sink_1::ypos=-25 sink_1::alpha=1 \
! video/x-raw, height=540 \
! videoconvert ! autovideosink
我正在寻找一种随时间动态修改该 alpha 值的方法,以便我可以使字幕组件在适当的时间淡入淡出。 (我将单独解析 SRT 文件以确定淡入淡出的开始和结束时间。)
我正在研究GstBin C API(我的实际代码在Python)。我认为在使用 Gst.parse_launch() 创建管道后,我可以使用 gst_get_bin_by_name() 获取任何命名元素,然后使用该值访问 pad "sink_1".
一旦我做到这一点,我是否能够从接收计时器事件的事件处理程序动态修改该 alpha 值? videomixer 元素会立即响应 pad 的 属性 的变化吗?还有其他人这样做吗?
我在这里找到了部分答案: 但他们没有告诉我在管道 运行.
之后这是否可行是的,它会起作用。
videomixer pad 动态响应变化;我已经使用 alpha 和 position 属性完成了此操作。可以使用
更改焊盘属性 g_object_set (mix_sink_pad, "alpha", 0.5, NULL);
我使用的是 C,但是您的 python 访问 bin 和 pad 的策略听起来是正确的。我的 gstreamer 代码根据来自 udp 套接字的输入进行响应,但计时器事件将工作得很好。例如,如果你想每 100 毫秒更改一次 alpha 值,你可以这样做
g_timeout_add_seconds (100, alpha_changer_cb, loop);
然后您可以在回调中使用 g_object_set 更改 alpha 属性;会动态更新,看起来很流畅
我成功了。您可以在 post 中阅读:https://westside-consulting.blogspot.com/2017/03/getting-to-know-gstreamer-part-4.html