使用python-vlc能否记录视频每一帧在屏幕上的显示时间?
python-vlc获取帧实际显示时间的可用接口说明
python-vlc完全覆盖了libvlc的相关核心接口,有多个方法可以满足你获取帧实际屏幕显示时间的需求,相关接口和使用方式如下:
- 直接读取接口:
media_player.get_time()
该函数返回当前已渲染到屏幕的帧对应的播放时间戳,单位为毫秒,是最直接的调用方式,适合主动轮询读取的场景。 - 事件触发式获取:绑定
vlc.EventType.MediaPlayerTimeChanged事件
每当新的帧渲染到屏幕、播放时间更新时,该事件会自动触发,你可以在绑定的回调函数中直接读取当前显示时间写入日志,相比轮询效率更高、延迟更低。 - 补充参考接口:
media_player.get_position()
该函数返回0-1区间的相对播放进度,你可以结合视频总时长media.get_duration()计算得到当前显示时间,精度和get_time()一致。
最简实现示例
import vlc # 初始化播放器实例 vlc_instance = vlc.Instance() media_player = vlc_instance.media_player_new() video_media = vlc_instance.media_new_path("目标视频路径") media_player.set_media(video_media) # 自定义时间更新回调,直接写入日志即可 def on_frame_display(event): current_display_ms = media_player.get_time() # 调用你已实现的日志写入函数 your_log_write_func(current_display_ms) # 绑定播放时间更新事件 event_mgr = media_player.event_manager() event_mgr.event_attach(vlc.EventType.MediaPlayerTimeChanged, on_frame_display) # 启动全屏播放 media_player.set_fullscreen(True) media_player.play()
注意事项:不要使用帧解码回调获取时间戳,解码队列和渲染队列存在固定缓冲差值,得到的时间并非帧实际显示在屏幕的时间,不满足实验精度需求。
内容的提问来源于stack exchange,提问作者Constantino Dragicevic
相关产品推荐
相关产品推荐

