首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python-vlc,我可以将视频的每一帧显示在屏幕上的时间记录到文件中吗?

使用python-vlc,我可以将视频的每一帧显示在屏幕上的时间记录到文件中吗?
EN

Stack Overflow用户
提问于 2021-12-02 01:31:58
回答 2查看 33关注 0票数 0

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

EN

回答 2

Stack Overflow用户

发布于 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。

这里有一个简单的例子。

代码语言:javascript
复制
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循环部分,并比较前一次和当前时间,以避免重复。

票数 0
EN

Stack Overflow用户

发布于 2021-12-02 14:20:16

简短的答案是否,在Vlc中不能访问帧。

事实上,在时间本身上获得超过1/4秒的粒度将是幸运的。

但是,您可以根据当前播放时间和每秒帧数来计算帧数。计算此函数的最佳方法是如下所示:

代码语言:javascript
复制
def mspf(self):
    # Milliseconds per frame.
    return int(1000 // (self.player.get_fps() or 25))

然后根据当前播放时间(以秒为单位),可以计算出大概的帧数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70193227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档