我已经使用 python-vlc 模块编写了一个实验,它可以流畅地播放我的视频,并且可以按预期全屏播放。现在我想将屏幕上显示的每一帧的时间记录到一个文件中。实际上日志文件来自另一台机器,日志部分通过一个简单的函数来解决。我需要的是访问实际显示在屏幕上的帧的时间。模块中是否有可以帮助解决此问题的功能?
问问题
33 次
2 回答
0
简短的回答是不,在 Vlc 中无法访问帧。
事实上,你会很幸运能够在时间本身上获得超过 1/4 秒的粒度。
但是,您可以根据当前播放时间和每秒的帧数来计算帧数。计算这一点的最佳选择是如下函数:
def mspf(self):
# Milliseconds per frame.
return int(1000 // (self.player.get_fps() or 25))
然后根据当前播放时间(以秒为单位),您可以计算出大概的帧数。
于 2021-12-02T14:20:16.300 回答
0
您可以通过get_time()获取当前帧时间。
查看 API 文档 ( https://www.olivieraubert.net/vlc/python-ctypes/doc/ )
从上面,
libvlc_media_player_get_time(p_mi)
获取当前电影时间(以毫秒为单位)。
参数:
p_mi - the Media Player.
回报:
the movie time (in ms), or -1 if there is no media.
这是一个简单的例子。
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-02T02:10:09.603 回答