gpt4 book ai didi

python - 使用 url 作为参数时,opencv videocapture 如何工作?

转载 作者:行者123 更新时间:2023-12-02 17:58:46 25 4
gpt4 key购买 nike

我目前正在开发一个 python 项目,该项目必须处理网络上的许多视频。让这些视频的列表为 url_list,即

url_list = ['sample_url1.mp4', ..., 'sample_url_n.mp4']
出于性能原因,我决定使用 ThreadPool 来异步获取视频。
代码是这样的:
from concurrent.futures import ThreadPoolExecutor
import cv2

def get_video(url):
cap = cv2.VideoCapture(url)
if hasattr(cap, 'isOpened') and cap.isOpened():
return cap


with ThreadPoolExecutor() as executor:
caps = executor.map(get_video, url_list)

# video processing section
for cap in caps:
while cap.isOpened():
ret, frame = cap.read()
if ret:
do_something_with(frame)
这是我的问题。
  • cv2.VideoCapture到底是怎么回事?使用 url 作为参数时工作?它是否从 cap = cv2.VideoCapture(url) 的 URL 一次下载(在内存中)整个视频?部分?还是它像来自 url 的视频流一样工作?
    换句话说,如果网络在视频处理部分断开连接,其余代码是否可以工作?
    (我测试了几次[在视频处理部分断开互联网],它可以工作。但我不是 100% 确定它可以安全使用。)
  • cv2.VideoCapture与多线程和多处理一起使用是否安全?

  • 提前致谢!
    编辑
    我正在使用 ffmpeg 作为后端。
    编辑2
    我用一个大尺寸的 mp4 文件进行了测试,但它没有通过连接测试。所以我假设 VideoCapture 不会读取整个视频,而只会读取其中的一部分。它将在 cap.read() 中读取其余部分.如果这是错误的,欢迎任何更正。

    最佳答案

    OpenCV4 videoio模块使用多平台库,例如 ffmpeg, gstreamer, Media SDK , 特定平台,例如 WINRT, AVFOUNDATION, MSMF/DSHOW, V4L/V4L2作为后端来操作文件或 url。当打开一个文件/url(VideoCapture::open)时,它将遍历所有注册的后端,直到成功打开。以 FFMPEG 为例,如果实现了响应协议(protocol)(如 RTMP),则可以读取 url、hls。
    cv2.VideoCapture与使用多线程相同,但注意仅在主线程中显示帧。这是一个例子:How to capture Multi camera with Opencv Multi threading (python)

    关于python - 使用 url 作为参数时,opencv videocapture 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64086105/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com