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

查看 229|回复 21
Haku
OP
  
@somebody1 啥?我觉得你可能没理解,我这里指我的服务器收到了视频文件,然后我不希望把他写入到硬盘中,而是直接将传输过来的文件进行视频帧提取。
stebest   
额,这个倒是跟视频没啥关系,不就是想用 bytesIO 嘛。
somebody1   
@Haku #10
那就是 11 楼的答案了
mightybruce   
看起来你对 opencv 和 ffmpeg 都不熟悉,先说说你传来的视频流是什么协议吧
stebest   
@stebest 挺简单的,给个示例吧 import numpy as np
import cv2 as cv
import io
image_stream = io.BytesIO()
image_stream.write(connection.read(image_len))
image_stream.seek(0)
file_bytes = np.asarray(bytearray(image_stream.read()), dtype=np.uint8)
img = cv.imdecode(file_bytes, cv.IMREAD_COLOR)
mightybruce   
直接读完整的视频就是 bytesIO 二进制流了, 转换一下变成 numpy array 就行
Haku
OP
  
@stebest 好的谢谢,我试试。
Haku
OP
  
@stebest @mightybruce
谢谢两位,可能是我一开始哪里搞错了,我用 cv2 和 ffmpeg 去进行提取时,都报错了,网上查询也没找到一个很好的方法。
NessajCN   
Python 这语言本来就不适用于直接对内存进行操作
建议换 C 或 Rust
https://ffmpeg.org/doxygen/6.1/group__lavc__decoding.html#ga11e6542c4e66d3028668788a1a74217c
你可能想要这个方法
cooljiang   
@stebest 确实这个是正解,创建一个 io 字节流。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部