最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何使用 OpenCV 在 Python 中录制视频
时间:2026-07-01 11:08:52 编辑:袖梨 来源:一聚教程网
本文详解如何基于 opencv 实现实时视频录制功能,包括初始化 videowriter、逐帧写入、资源释放等关键步骤,并适配 flask web 应用场景。
本文详解如何基于 opencv 实现实时视频录制功能,包括初始化 videowriter、逐帧写入、资源释放等关键步骤,并适配 flask web 应用场景。
在 Python 中使用 OpenCV 录制视频,核心在于结合 cv2.VideoCapture(捕获帧)与 cv2.VideoWriter(写入帧)协同工作。不同于仅显示视频流的场景,录制需持续接收每一帧并写入磁盘文件,最终生成标准视频格式(如 AVI、MP4)。以下为完整、可落地的实现方案。
✅ 正确初始化 VideoWriter
cv2.VideoWriter 需要四个关键参数:输出文件路径、编码器(FourCC)、帧率(FPS)和帧尺寸(宽×高)。注意:帧尺寸必须与实际采集帧一致,否则写入失败且无报错。常见编码器如下:
| 编码器 | 说明 | 兼容性 |
|---|---|---|
| 'XVID' | 跨平台通用,生成 .avi 文件 | ✅ Windows/Linux/macOS |
| 'mp4v' | MP4 容器推荐,生成 .mp4 文件 | ✅(需 OpenCV ≥ 3.0,部分系统需 FFmpeg 支持) |
| 'avc1' | H.264 编码(需系统支持) | ⚠️ 依赖底层编解码器 |
示例初始化(假设摄像头分辨率为 640×480):
self.fourcc = cv2.VideoWriter_fourcc(*'XVID')self.out = cv2.VideoWriter('output.avi', self.fourcc, 20.0, (640, 480))
? 提示:可通过 self.video.get(cv2.CAP_PROP_FRAME_WIDTH) 和 self.video.get(cv2.CAP_PROP_FRAME_HEIGHT) 动态获取实际分辨率,增强健壮性。
立即学习“Python免费学习笔记(深入)”;
✅ 修改 get_frame() 实现边预览边录制
每帧读取后,先写入视频文件,再编码为 JPEG 供 Web 流传输:
def get_frame(self): ret, frame = self.video.read() if ret: # 确保尺寸匹配(关键!) if frame.shape[1] != 640 or frame.shape[0] != 480: frame = cv2.resize(frame, (640, 480)) # 统一分辨率 self.out.write(frame) # 写入视频文件 ret, jpeg = cv2.imencode('.jpg', frame) return jpeg.tobytes() return None
✅ 安全释放资源(避免文件损坏)
务必在对象销毁时调用 release(),否则视频文件可能不完整或无法播放:
def __del__(self): self.video.release() self.out.release() # 必须显式调用!
⚠️ 注意事项与最佳实践
- 不要在多线程/多请求中复用同一 VideoWriter 实例:Flask 多 worker 场景下,应确保每个录制会话独占一个 VideoCamera 实例,或通过全局锁控制写入。
-
文件命名需唯一:若多次访问 /Record,建议用时间戳动态生成文件名,例如:
import datetimetimestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")self.out = cv2.VideoWriter(f'output_{timestamp}.avi', self.fourcc, 20.0, (640, 480)) - MP4 支持问题:若使用 'mp4v' 却生成空文件,请确认 OpenCV 是否链接了 FFmpeg(运行 cv2.getBuildInformation() 查看 ffmpeg: YES);否则降级使用 'XVID' + .avi。
- 性能考量:高分辨率(如 1080p)+ 高帧率(30 FPS)下,磁盘 I/O 可能成为瓶颈,建议在 SSD 环境运行或降低帧率/分辨率。
完成以上修改后,重启 Flask 应用,访问 /video_feed 即可实时预览并同步录制至本地 output.avi。录制结束后,该文件可直接用 VLC、PotPlayer 或系统默认播放器打开验证。
相关文章
- 迷你世界怎样找到桃林的位置 07-01
- 三角洲行动s10拾荒者4任务攻略详解 07-01
- 狗狗币2025年7月能涨到多少价位 07-01
- 金砖弱网怎样彻底卸载-金砖弱网残留文件如何清理 07-01
- 快影怎样制作短视频 07-01
- 上海交警怎么处理他人车辆违章-上海交警非本人车辆违法代扣分如何办理 07-01