Python中的GStreamer时间同步

0 投票
1 回答
977 浏览
提问于 2025-04-18 13:15

在我的Python程序中,我使用GStreamer的playbintextoverlay来播放视频文件,并在视频上方显示一些文字。这一切都很顺利:如果我改变textoverlaytext属性,新的文字就会显示出来。

但现在我想根据视频的当前播放位置/时间来设置文字(就像字幕一样)。

我了解了一些关于管道时钟、缓冲区时间戳、段事件和外部定时器的知识,这些定时器每隔一段时间就会查询当前时间。但是,怎样才能最好地获取时间变化的信息,以便我能尽快显示正确的文字呢?

1 个回答

0

要让视频和其他内容完美同步,最好的办法是使用像cairooverlay这样的元素,然后直接在处理流程中自己进行渲染,这样可以根据每一帧的实际时间戳来操作。或者,你也可以自己写一个元素来实现这个功能。

如果你对时间的准确性要求不高,最简单的办法就是使用处理流程的时钟。在处理流程启动后,你可以获取这个时钟,然后为你想要的时间或间隔创建单次(或定期)时钟ID。接着,可以在这个时钟上使用async_wait()方法。

如果你想要获取与处理流程中1秒位置对应的时钟时间,你只需在处理流程的基础时间上加上1秒(也就是1000000000纳秒)。然后在创建时钟ID时就可以使用这个值。

撰写回答