当前位置: 首页 > news >正文

每秒钟提取视频25帧

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)
http://www.cnnetsun.cn/news/89709.html

相关文章:

  • 前端开发必备:JavaScript 核心事件详解与实战
  • 为什么你的服务总崩溃?:Docker MCP 网关负载均衡未正确配置的3大隐患
  • 专利检索漏查1个参数,千万研发卡壳量产线
  • 自动化测试团队效率提升指南
  • LobeChat能否通过等保测评?国内合规性达标
  • paperzz 降重 / 降 AIGC:从重复率超标到学术合规,高校生论文 “隐形风险” 的解决逻辑
  • paperzz AI 期刊论文功能实测:从 “标题输入” 到 “期刊适配提纲”,学术写作如何少走格式与逻辑的弯路?
  • Linux系统安装nginx
  • Dify Docker部署与模型集成指南
  • @所有科技企业:点击链接直达CES Asia2026奖项申报页,错过免费期成本增加3倍
  • Agent概况
  • 13. 搜索引擎-ES-自动补全
  • 36、基础Web服务器与邮件服务配置指南
  • 永磁同步电机三闭环控制Simulink仿真 电流内环 转速 位置外环 参数已经调好 原理与双闭...
  • ISIS路由的基本配置
  • Unloop:为ADHD与神经多样性人群打造的可视化模式映射工具 | ProductHunt 今日热榜 - 12月16日
  • LED显示屏视频会议价格
  • Kamailio 怎样使用 STIR/SHAKEN
  • COMSOL光学仿真:光镊与光力模型专题解析(三个模型详解、近似算法与张量算法探讨)
  • 北斗导航系统在实际应用中总会遇到各种干扰,尤其是脉冲干扰和窄带干扰特别烦人。今天咱们用Matlab仿真几种典型抗干扰方法,顺便看看代码咋写
  • Qwen3-8B大模型快速部署与实战体验
  • AI 时代,数据湖的“拐点”与展望
  • 使用 TensorRT-LLM 高性能部署大语言模型
  • A/B测试在功能验证中的应用:从理论到实践
  • 创建一个rust写的python库[signatures和错误处理]
  • 震撼!这家全景效果企业如何颠覆传统,让客户体验飙升!
  • JVM性能分析
  • 商家福音!用PHP对接快递鸟接口,一键搞定单号所属快递识别
  • YT29B凿岩机吕梁精准检测稳定性能解析
  • 26、网络连接与安全全解析