Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从vlc媒体播放器获取帧_Python_Opencv_Vlc - Fatal编程技术网

Python 如何从vlc媒体播放器获取帧

Python 如何从vlc媒体播放器获取帧,python,opencv,vlc,Python,Opencv,Vlc,我目前正在使用用于python的vlc库(PythonVLC)从sdp流中获取视频流,该sdp流使用sdp文件进行描述。我现在使用的代码是: import vlc import time instance = vlc.Instance() player = instance.media_player_new() media = instance.media_new("./bebop.sdp") player.set_media(media) player.play() time.sleep

我目前正在使用用于python的vlc库(PythonVLC)从sdp流中获取视频流,该sdp流使用sdp文件进行描述。我现在使用的代码是:

import vlc
import time 

instance = vlc.Instance()
player = instance.media_player_new()
media = instance.media_new("./bebop.sdp")
player.set_media(media)

player.play()
time.sleep(10)
它可以很好地显示视频。但我不想只显示它,我想使用视频中的每一帧对其进行一些图像处理,然后显示修改后的帧

我已经阅读了几乎所有的文档和论坛上各种各样的帖子,但我找不到一个方法来做到这一点


我使用vlc来获取视频流,因为OpenCV由于ffmpeg错误而无法打开它

从视频中获取每秒帧数或将默认值设置为25作为合理猜测,然后逐步浏览暂停的视频,每次向前跳转时使用每秒帧数

# -*- coding: utf-8 -*-

import vlc
import time 

def mspf(mp):
    """Milliseconds per frame"""
    return int(1000 // (mp.get_fps() or 25))


if __name__ == "__main__":
    instance = vlc.Instance()
    player = instance.media_player_new()
    media = instance.media_new("1.m4v")
    player.set_media(media)

    player.play()

    """Play 800th frames"""
    new_time = 800 * mspf(player)
    player.set_time(new_time)

    time.sleep(10)
import vlc
import time

instance = vlc.Instance('--no-xlib --quiet')
player = instance.media_player_new()
media = instance.media_new("./bebop.sdp"")
player.set_media(media)
player.play()
mfps = int(1000 / (player.get_fps() or 25))
player.set_time(30000) # start at 30 seconds
player.pause()
t = player.get_time()
for iter in range(30):
    t += mfps
    player.set_time(t)
    if player.get_state() == 3:
        player.pause()
    time.sleep(0.5)
在这里,我从30秒开始,然后只前进30次。

您可能希望继续前进,直到
player.get_state()==6
指示视频已完成。[状态3=播放]

从视频中获取每秒帧数,或将其默认为25作为合理猜测,然后逐步浏览暂停的视频,每次向前跳转时使用每秒帧数

import vlc
import time

instance = vlc.Instance('--no-xlib --quiet')
player = instance.media_player_new()
media = instance.media_new("./bebop.sdp"")
player.set_media(media)
player.play()
mfps = int(1000 / (player.get_fps() or 25))
player.set_time(30000) # start at 30 seconds
player.pause()
t = player.get_time()
for iter in range(30):
    t += mfps
    player.set_time(t)
    if player.get_state() == 3:
        player.pause()
    time.sleep(0.5)
在这里,我从30秒开始,然后只前进30次。

您可能希望继续前进,直到
player.get_state()==6
指示视频已完成。[state 3=playing]

您需要使用一组libvlc调用,不确定python包装器中的调用是什么,但它们应该在mediaplayer对象上公开


您需要设置并使用这些回调。C#使用这些API的示例:

您需要使用一组libvlc调用,不确定python包装器中的调用是什么,但它们应该在mediaplayer对象上公开


您需要设置并使用这些回调。C#使用这些API的示例:

这段代码只是在特定时间播放视频,不是吗?我不知道它如何帮助我使用特定的帧。这个代码只是在特定的时间播放视频没有?我不知道它如何帮助我使用特定的框架。