Python 中如何在内存中优雅地提取视频帧?

查看 230|回复 21
作者:Haku   
通过网络传输过来的视频,如何在不保存为文件的情况下,用工具提取视频帧呢?
一开始以为很容易,但是找了很久发现 Opencv 和 ffmpeg 都没有直接从内存中提取的方法,都需要通过一个临时文件才能提取。而目目前需求上需要优化处理视频的时间,所以想着修改这个步骤。
Doraismydora   
·sws_sacle· 把 ·AVFrame· 转成 rgb32 ,然后弄一个 ·cv::Mat· 复制过去
qsnow6   
用虚拟文件交换就行了
Latin   
网络传输中原先的格式是什么链路
Haku
OP
  
@Latin 以 HTTP 的方式将整段视频以二进制字节流完整的传输过来。
SenseHu   
场景没描述清, 提取之后是被谁消费, 落盘? 其他程序用? 其他程序是什么框架
Haku
OP
  
@SenseHu 提取之后会由 AI 进行处理,所以还会被转换成对应的图片格式保存在内存中。整个过程都在 Python 上处理。
Huelse   
直接用内存映射不就行了,然后就是正常的 IO 操作
somebody1   
你能访问视频程序的内存内容,那别的程序不一样能访问,那你的内存不就成了透明的嘛!
这最基础的访问限制都闹不明白吗!!!
sweelia   
@Haku 可以参考 https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/avio_read_callback.c ,主要是 read_packet 函数,buffer 的装载逻辑( av_file_map )换成你自己的,可以流式加载,不用一次性读完。如果对 c 不熟悉,可以找个 python binding 来使用。decode 之后拿到 AVFrame ,随便玩
您需要登录后才可以回帖 登录 | 立即注册

返回顶部