视频抽帧处理笔记
630 字
3 分钟
视频抽帧处理笔记
视频抽帧处理笔记
视频抽帧是制作视觉数据集的常见方法,但直接每帧都保存会产生大量重复图片。抽帧策略要根据目标变化速度和标注成本来定。
抽得太密,数据重复;抽得太稀,容易错过关键动作。
按间隔抽帧
import cv2from pathlib import Path
video = cv2.VideoCapture("demo.mp4")out_dir = Path("frames")out_dir.mkdir(exist_ok=True)
frame_id = 0saved = 0while True: ok, frame = video.read() if not ok: break if frame_id % 30 == 0: cv2.imwrite(str(out_dir / f"frame_{frame_id:06d}.jpg"), frame) saved += 1 frame_id += 1
print("frames", frame_id, "saved", saved)命名要可追溯
文件名最好包含视频名和帧号,例如 camera01_000300.jpg。以后发现某张图有问题,可以回到原视频定位。
抽帧后去重
固定间隔抽帧仍然可能产生大量相似图。可以先按场景或时间段抽样查看,再决定是否需要感知哈希去重。
质量检查
-
是否有黑屏、花屏、模糊帧。
-
目标是否足够清晰。
-
不同场景是否覆盖。
-
抽帧数量是否和标注人力匹配。
实战复盘
把《视频抽帧处理笔记》用于真实视觉项目时,我会先做可视化抽查。图像任务里很多错误不会抛异常,例如颜色通道反了、检测框偏移、标签和图片不同步,但一张可视化结果就能暴露。
每个处理步骤都应该保存少量中间结果:原图、处理后图片、mask、绘制框图片或预测输出。不要只保存最终模型指标,因为指标无法告诉你是哪一步把数据处理坏了。
如果文章涉及批量处理,还要记录成功数量、失败数量和失败样本路径。视觉项目的数据量一大,没有失败清单就很难复查。
最小验收样例
验收《视频抽帧处理笔记》时,我会固定三张图片:一张正常样例、一张边界样例、一张容易失败的样例。每次改代码都用这三张图跑一遍,并保存输出结果。
视觉流程的验收必须能用眼睛确认。只打印数组 shape 或命令成功不够,至少要保存一张中间结果图或最终可视化图,确认处理效果和预期一致。
小结
视频抽帧要在覆盖场景和控制重复之间取平衡。命名可追溯、抽样检查清楚,后续标注才不会失控。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!













