我想拍摄一个视频文件并覆盖淡入淡出的字幕。
我刚刚开始学习如何使用 Gstreamer。
到目前为止,我已经设法将一个管道组合在一起,该管道将textrender元素绘制的字幕流合成到带有videomixer元素的原始视频流上。不幸的是,textrender 及其姊妹元素textoverlay没有淡入/淡出功能。
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() 获取任何命名元素,然后使用该值访问焊盘“sink_1”。
一旦我做到了这一点,我是否能够从接收计时器事件的事件处理程序中动态修改该 alpha 值?videomixer 元素会立即响应该垫属性的变化吗?有没有其他人这样做过?
我在这里找到了部分答案:https ://stackoverflow.com/a/17331845/270511但他们没有告诉我这在管道运行后是否会起作用。