OpenCV捕获在线视频以便进一步处理,无需使用Python下载文件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了OpenCV捕获在线视频以便进一步处理,无需使用Python下载文件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2557字,纯文字阅读大概需要4分钟。
内容图文
![OpenCV捕获在线视频以便进一步处理,无需使用Python下载文件](/upload/InfoBanner/zyjiaocheng/703/08ae94544ddf412abc82c50029ce5483.jpg)
鉴于其链接,我想捕获一个在线视频(例如来自YouTube)进行进一步处理,而无需将其下载到磁盘上.我的意思是,我想尽可能将它直接加载到内存中.根据这些链接:
http://answers.opencv.org/question/24012/reading-video-stream-from-ip-camera-in-opencv-java/#24013
http://answers.opencv.org/question/24154/how-to-using-opencv-api-get-web-video-stream/#24156
http://answers.opencv.org/question/133/how-do-i-access-an-ip-camera/
https://pypi.org/project/pafy/
它应该是可行的.我的尝试看起来像这样:
import cv2
import pafy
vid = pafy.new("https://www.youtube.com/watch?v=QuELiw8tbx8")
vid_cap = cv2.VideoCapture()
vid_cap.open(vid.getbest(preftype="webm").url)
但它失败并出现错误
(python:12925): GLib-GObject-CRITICAL **: 14:48:56.168: g_object_set: assertion 'G_IS_OBJECT (object)' failed
False
如何使用python实现我的目标?
解决方法:
您可以使用youtube-dl和ffmpeg实现此目的:
>安装最新版本的youtube-dl.
>然后执行sudo pip install –upgrade youtube_dl
>使用HTTPS支持构建ffmpeg.您可以在turning on the --enable-gnutls option之前完成此操作.
一旦安装完成,就可以在终端中测试youtube-dl了.我们将使用this youtube video进行测试.
首先,我们获取此视频可用的格式列表:
youtube-dl --list-formats https://www.youtube.com/watch?v=HECa3bAFAYk
选择您选择的格式代码.我想要144p分辨率,所以我选择160.
接下来,我们通过以下方式获取我们选择格式的视频网址:
youtube-dl --format 160 --get-url https://www.youtube.com/watch?v=HECa3bAFAYk
07004
最后,我们可以在ffplay或vlc中播放此视频网址.但是,我们可以在一个命令中执行此操作,而不是复制和粘贴:
ffplay -i $(youtube-dl --format 160 --get-url https://www.youtube.com/watch?v=HECa3bAFAYk)
现在我们已经确认youtube-dl和ffmpeg有效,我们可以编写一个Python脚本来处理OpenCV中的帧.有关更多Python选项,请参阅this link.
import cv2
import numpy as np
import youtube_dl
if __name__ == '__main__':
video_url = 'https://www.youtube.com/watch?v=HECa3bAFAYkq'
ydl_opts = {}
# create youtube-dl object
ydl = youtube_dl.YoutubeDL(ydl_opts)
# set video url, extract video information
info_dict = ydl.extract_info(video_url, download=False)
# get video formats available
formats = info_dict.get('formats',None)
for f in formats:
# I want the lowest resolution, so I set resolution as 144p
if f.get('format_note',None) == '144p':
#get the video url
url = f.get('url',None)
# open url with opencv
cap = cv2.VideoCapture(url)
# check if url was opened
if not cap.isOpened():
print('video not opened')
exit(-1)
while True:
# read frame
ret, frame = cap.read()
# check if frame is empty
if not ret:
break
# display frame
cv2.imshow('frame', frame)
if cv2.waitKey(30)&0xFF == ord('q'):
break
# release VideoCapture
cap.release()
cv2.destroyAllWindows()
内容总结
以上是互联网集市为您收集整理的OpenCV捕获在线视频以便进一步处理,无需使用Python下载文件全部内容,希望文章能够帮你解决OpenCV捕获在线视频以便进一步处理,无需使用Python下载文件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。