Is it possible to stream video from https:// (e.g. YouTube) into python with OpenCV?

you need to have 2 things installed

  1. pafy (pip install pafy)
  2. youtube_dl (sudo pip install --upgrade youtube_dl)

after installing these two packages you can use the youtube url to play the streaming videos from youtube. Please refer the code below

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()

it is possible with 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's suggestion to download the youtube video to local mp4 was the way to go here. Here were the steps that I used to set up a remote server environment on EC2, with output piped into my local computer via X11 forwarding:

  • ssh -X -i "<ssh_key.pem>" ubuntu@<IP-address>.compute-1.amazonaws.com (Note the -X option is an important addition here. It's what we use to pass output from the EC-2 server to a local X11 client)
  • sudo pip install --upgrade youtube_dl (I know, sudo pip is bad. I blame the site instructions)
  • Download youtube video to local file: youtube-dl https://www.youtube.com/watch?v=VUjF1fRw9sA -o motocross.mp4
  • python demo_cv.py

X11 forwarding can be tricky. If you run into any hangups there this post might be helpful to you also.