是否可以使用OpenCV将视频从https://(例如YouTube)流到python中?

2024-09-25 10:27:46 发布

您现在位置:Python中文网/ 问答频道 /正文

关于如何使用python的OpenCV库cv2将数据从相机流到python shell中,有一个很好的例子。我想做一些实验,并希望使用以下YouTube视频源:https://www.youtube.com/watch?v=oCUqsPLvYBQ

我试着把这个例子改编成如下:

import numpy as np
import cv2

cap = cv2.VideoCapture('https://www.youtube.com/watch?v=oCUqsPLvYBQ')

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Display the resulting frame
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

从而产生错误:

WARNING: Couldn't read movie file https://www.youtube.com/watch?v=oCUqsPLvYBQ
OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /tmp/opencv20160107-29960-t5glvv/opencv-2.4.12/modules/highgui/src/window.cpp, line 261

有没有一个简单的修复方法可以让我通过cv2将这个视频提要流到python shell中?如果有其他库可以实现相同的目的,那么也不能完全致力于cv2


Tags: httpsimportcomread视频youtubewwwshell
3条回答

在pafy(https://pypi.python.org/pypi/pafy)中是可能的

import cv2, pafy

url = "https://www.youtube.com/watch?v=aKX8uaoy9c8"
videoPafy = pafy.new(url)
best = videoPafy.getbest(preftype="webm")

video=cv2.VideoCapture(best.url)

@incBrain建议将youtube视频下载到本地mp4,这是一个不错的选择。下面是我在EC2上设置远程服务器环境的步骤,通过X11转发将输出管道传输到本地计算机:

  • ssh -X -i "<ssh_key.pem>" ubuntu@<IP-address>.compute-1.amazonaws.com(注意-X选项是这里的一个重要附加选项。我们使用它将输出从EC-2服务器传递到本地X11客户端)
  • sudo pip install --upgrade youtube_dl(我知道,sudo pip不好。我责怪现场指示)
  • 将youtube视频下载到本地文件:youtube-dl https://www.youtube.com/watch?v=VUjF1fRw9sA -o motocross.mp4
  • ^{}

X11转发可能很棘手。如果你在那里遇到任何问题,this post可能对你也有帮助。

你需要安装两件东西

  1. pafy(pip安装pafy)
  2. youtube_dl(sudo pip install——升级youtube_dl)

安装完这两个包后,您可以使用youtube url播放youtube上的流媒体视频。 请参考下面的代码

url = 'https://youtu.be/W1yKqFZ34y4'
vPafy = pafy.new(url)
play = vPafy.getbest(preftype="webm")

#start the video
cap = cv2.VideoCapture(play.url)
while (True):
    ret,frame = cap.read()
    """
    your code here
    """
    cv2.imshow('frame',frame)
    if cv2.waitKey(20) & 0xFF == ord('q'):
        break    

cap.release()
cv2.destroyAllWindows()

相关问题 更多 >