0

我已经使用 python-vlc 模块编写了一个实验,它可以流畅地播放我的视频,并且可以按预期全屏播放。现在我想将屏幕上显示的每一帧的时间记录到一个文件中。实际上日志文件来自另一台机器,日志部分通过一个简单的函数来解决。我需要的是访问实际显示在屏幕上的帧的时间。模块中是否有可以帮助解决此问题的功能?

4

2 回答 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 回答