You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中直接从内存处理Plotly Dash上传的Base64视频方法

直接从内存处理Dash上传的视频(无需写入磁盘)

可以通过将解码后的视频字节转换为内存缓冲区,直接用OpenCV读取,完全跳过磁盘写入步骤,具体实现如下:

修改后的代码

import io
import numpy as np
import base64
import cv2

def process_motion(contents, filename):
    print("Processing video: " + filename)
    content_type, content_string = contents.split(',')

    decoded = base64.b64decode(content_string)
    
    # 将解码后的字节包装为内存流
    video_stream = io.BytesIO(decoded)
    # 转换为OpenCV可识别的numpy uint8缓冲区
    video_buffer = np.frombuffer(video_stream.getvalue(), dtype=np.uint8)
    
    # 从内存初始化VideoCapture,依赖FFMPEG后端
    cap = cv2.VideoCapture()
    success = cap.open(video_buffer, cv2.CAP_FFMPEG)
    
    if not success:
        print(f"无法读取视频 {filename}")
        return
    
    frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)
    fps = cap.get(cv2.CAP_PROP_FPS)
    
    # 示例:遍历处理每一帧
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break
        # 在这里添加你的帧处理逻辑,比如运动检测等
    
    cap.release()

关键说明

  • 内存流包装:用io.BytesIO把base64解码后的字节转换成类文件对象,完全在内存中操作
  • 缓冲区转换:通过np.frombuffer将字节流转为numpy数组,这是OpenCV能直接读取的内存格式
  • FFMPEG后端依赖:OpenCV通过FFMPEG实现内存视频读取,大多数预编译的OpenCV包都默认包含FFMPEG支持,若不确定可运行cv2.getBuildInformation()查看编译配置

注意事项

  • 大视频文件会占用较多内存,需根据实际场景评估内存负载
  • 部分老旧或特殊编码的视频可能无法通过内存流正常解析,此时可临时 fallback 到原有的临时文件方案

内容的提问来源于stack exchange,提问作者Turing22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:00:56