在视频播放器上设置时间触发器

时间:2019-07-01 09:56:38

标签: video ffmpeg libvlc

背景

每隔一定间隔播放视频时,我都会在文本框中显示一些文本,例如(00:02:00-00:04:00 "Hello there")

仅在视频以特定间隔播放时,才显示这些文本框。如果我倒带或将视频跳过到另一个时间,则应根据当前时间是否在该时间间隔内来生成/销毁文本框。

我已经在文档中搜索了ffplay和vlc以实现此功能。

我尝试过的事情

ffplay:我的策略是继续轮询ffplay转储到STDERR中的视频的当前时间,并检查当前时间是否在间隔内。

LibVLC: LibVLC支持异步事件,但不支持取决于视频播放时间的事件。

我的问题

1。是否建议继续轮询当前视频时间或设置回调/触发功能?

2。是否可以将视频的当前播放时间作为变量并相应地创建回调函数?

注意::我知道字幕具有相同的作用,但是我希望文本位于不同的窗口中。文本框应与我使用的视频播放器分离。

2 个答案:

答案 0 :(得分:2)

如果您只对当前视频时间或位置感兴趣,则可以很好地进行轮询。 LibVLC确实为Media Player Position ChangedMedia Player Time Changed实现了回调,但是对于非常定期执行的操作(例如每秒查询时间),将其作为异步事件处理没有太多价值。 / p>

设置计时器以每秒查询一次(或半秒,具体取决于您想要的精度)并调用:

libvlc_time_t current = libvlc_media_player_get_time(my_player);

请注意,结果以毫秒为单位。而且您显然必须保留对您的my_player的引用,但是我想您已经做到了。另请注意,以我的经验,libvlc_media_player_get_time报告的时间可能并不总是很准确。但是对于播放来说应该没问题。

答案 1 :(得分:0)

您可以仅使用subtitle文件,例如
具有您的视频名称但结尾为.srt

的文件

Myvideo.srt包含:

1
00:02:00,001 --> 00:04:00,001
Hello There!

Vlc应该会自动将其拾取。

ffplay可能需要被告知。

ffplay -ss 00:01:55.00 -i Myvideo.mp4 -vf subtitles="./Myvideo.srt `