我已经使用python-vlc模块编写了一个实验,它可以像预期的那样流畅地全屏播放我的视频。现在我想将屏幕上显示的每一帧的时间记录到一个文件中。实际上,日志文件来自另一台机器,日志记录部分用一个简单的函数来解决。我需要的是访问屏幕上实际显示的帧的时间。模块中有没有一个函数可以在这方面提供帮助?
发布于 2021-12-02 02:10:10
您可以通过get_time()获取当前帧时间。
查看API文档(https://www.olivieraubert.net/vlc/python-ctypes/doc/)
从上面看,
libvlc_media_player_get_time(p_mi)
获取当前电影时间,单位为ms。
参数:
p_mi -媒体播放器。
返回:
电影时间(毫秒),如果没有媒体,则为-1。
这里有一个简单的例子。
import vlc
import time
# Get VLC instance and load a video
vlc_instance = vlc.Instance()
player = vlc_instance.media_player_new()
media = vlc.Media("YOUR VIDEO PATH")
player.set_media(media)
player.play()
time.sleep(0.1)
# Check out the current play time periodically
while player.get_state() == vlc.State.Playing:
t = player.get_time()
print(t) # Treat t as you need
time.sleep(1/120) # adjust a check out period我通常在子线程中运行上面的while循环部分,并比较前一次和当前时间,以避免重复。
发布于 2021-12-02 14:20:16
简短的答案是否,在Vlc中不能访问帧。
事实上,在时间本身上获得超过1/4秒的粒度将是幸运的。
但是,您可以根据当前播放时间和每秒帧数来计算帧数。计算此函数的最佳方法是如下所示:
def mspf(self):
# Milliseconds per frame.
return int(1000 // (self.player.get_fps() or 25))然后根据当前播放时间(以秒为单位),可以计算出大概的帧数。
https://stackoverflow.com/questions/70193227
复制相似问题