import cv2 import os from pathlib import Path def extract_frames(video_path, output_dir=None, frames_per_second=25): """ 从视频中提取帧图像 Parameters: video_path (str): 视频文件路径 output_dir (str): 输出目录,默认为视频同名文件夹 frames_per_second (int): 每秒提取的帧数 """ # 创建输出目录 if output_dir is None: video_name = Path(video_path).stem output_dir = f"E:\BaiduNetdiskDownload\\{video_name}_frames" os.makedirs(output_dir, exist_ok=True) # 打开视频文件 cap = cv2.VideoCapture(video_path) if not cap.isOpened(): print(f"无法打开视频文件: {video_path}") return # 获取视频基本信息 fps = cap.get(cv2.CAP_PROP_FPS) total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) duration = total_frames / fps print(f"视频信息:") print(f" 路径: {video_path}") print(f" FPS: {fps}") print(f" 总帧数: {total_frames}") print(f" 时长: {duration:.2f} 秒") print(f" 每秒提取帧数: {frames_per_second}") # 计算提取间隔 frame_interval = fps / frames_per_second print(f" 提取间隔: 每 {frame_interval} 帧提取一次") frame_count = 0 saved_count = 0 while True: ret, frame = cap.read() if not ret: break # 更精确的帧采样判断 expected_frame_number = round(saved_count * (fps / frames_per_second)) if frame_count >= expected_frame_number: # 生成文件名 timestamp = frame_count / fps filename = f"frame_{saved_count:06d}_{timestamp:.3f}s.jpg" filepath = os.path.join(output_dir, filename) # 保存高质量JPEG图像 cv2.imwrite(filepath, frame, [cv2.IMWRITE_JPEG_QUALITY, 95]) saved_count += 1 # 显示进度 progress = (frame_count / total_frames) * 100 print(f"\r处理进度: {progress:.1f}% ({saved_count} 帧已保存)", end='') frame_count += 1 # 释放资源 cap.release() print(f"\n完成! 共提取 {saved_count} 帧图像到目录: {output_dir}") if __name__ == "__main__": # 设置视频路径 video_path = r"E:\BaiduNetdiskDownload\mmexport1765869882377.mp4" # 提取帧,每秒25帧 extract_frames(video_path, frames_per_second=25)每秒钟提取视频25帧
张小明
前端开发工程师
降低“输入摩擦”,是我今年提升效率最大的收获
在技术工作中,我们经常关注:算法是否高效架构是否合理工具是否顺手但我最近意识到一个被忽略的点: 输入摩擦,其实是效率杀手。无论是写技术文档、需求说明,还是复盘总结, 大量时间并不是花在“思考”&#…
Qwen3大模型训练全流程:从预训练到模型蒸馏技术详解
文章详细介绍了Qwen3大模型的完整训练流程,包括三阶段预训练(通用知识、推理能力、长上下文)、思维链冷启动、推理强化学习、思维模式融合和通用强化学习,最后通过模型蒸馏技术优化性能。文章还展示了关键技术参数和训练效果&…
QPointF 数组去重
// 不去重但保持原始顺序 std::vector<QPointF> removeDuplicates3b(const std::vector<QPointF>& points) {std::vector<QPointF> result;for (const auto& p : points) {auto it std::find_if(result.begin(), result.end(),[&p](const QPoin…
【珍藏版】AI大模型学习路线大全:从入门到精通,附104G免费资源包
本文提供从入门到高级的完整AI学习路线,分为四大阶段:入门(基础数学编程)、中级(算法实践)、进阶(NLP/计算机视觉)和高级(深度强化学习/生成模型)。特别详细介绍了大模型七大学习阶段,从系统设计到平台应用开发,并强调AI可提高开发…
机器人也有 App Store了!宇树科技让人人都能玩转人形机器人
如果你还觉得人形机器人是只能看不能玩的 “科技展品”,那宇树科技刚上线的人形机器人 App Store,绝对能颠覆你的认知。12 月 13 日,这款堪称机器人界 “应用市场” 的平台正式发布,把原本需要专业团队协作数周的复杂动作开发&…
在ubuntu中下载yolo
在使用相机的时候 模型识别是必不可少的 1.进入yolov8github网站 并下载源码 没有网站的可以点击这个网站https://github.com/ultralytics/ultralytics 进入后点击code 再复制网址链接 随后再在工作空间下克隆代码 git clone https://github.com/ultralytics/ultraly…