# 视频场景 **Repository Path**: HDLang/VideoAutoScene ## Basic Information - **Project Name**: 视频场景 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-20 - **Last Updated**: 2025-06-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 视频场景一键分镜与剪映草稿生成系统 ## 项目概述 这是一个帮助视频创作者快速处理视频素材的工具。它可以自动分析视频内容,识别并分割不同的场景,生成分镜预览,并导出为剪映草稿文件,从而提高视频制作的效率。 ## 目标用户 - 视频创作者,特别是需要快速处理大量视频素材的用户 - 使用剪映进行视频编辑的用户 - 需要将解说稿与视频内容匹配的用户 ## 技术选型 - 开发框架: PyQt6 - 数据持久化: SQLite3 - UI风格: 采用科技风现代简约设计 ## 应用结构 ``` src/ ├── main.py # 应用程序入口 ├── ui/ # UI模块 │ ├── main_window.py # 主窗口 │ ├── styles.py # 全局样式 │ └── views/ # 视图模块 │ ├── video_import_view.py # 视频导入视图 │ ├── scene_detection_view.py # 场景检测视图 │ ├── storyboard_view.py # 分镜预览视图 │ └── export_view.py # 导出视图 ├── core/ # 核心功能模块 ├── utils/ # 工具模块 └── resources/ # 资源文件 ``` ## 页面结构 | 页面/视图名称 | 用途 | 核心功能 | 技术实现 | 导航/用户流程 | 建议文件路径 | |:--------:|:----:|:--------:|:--------:|:--------:|:--------:| | MainWindow | 主窗口 | 提供整体导航和布局 | PyQt6 QMainWindow | 应用程序入口 | `src/ui/main_window.py` | | VideoImportView | 视频导入 | 支持拖放导入、批量导入 | PyQt6 QWidget | 从主窗口导航进入 | `src/ui/views/video_import_view.py` | | SceneDetectionView | 场景检测 | 多算法检测、参数调整 | PyQt6 QWidget | 从视频导入进入 | `src/ui/views/scene_detection_view.py` | | StoryboardView | 分镜预览 | 场景预览、排序、导出 | PyQt6 QWidget | 从场景检测进入 | `src/ui/views/storyboard_view.py` | | ExportView | 导出设置 | 多种格式导出、参数设置 | PyQt6 QWidget | 从分镜预览进入 | `src/ui/views/export_view.py` | ## 数据模型 - 视频文件信息 - 文件路径 - 时长 - 分辨率 - 帧率 - 编码格式 - 场景信息 - 场景编号 - 开始时间 - 结束时间 - 时长 - 预览图路径 - 场景类型 - 场景描述 - 导出配置 - 导出格式 - 导出选项 - 导出路径 - 视频质量 ## 技术实现细节 ### MainWindow #### UI设计方案 - 采用深色主题,搭配霓虹渐变色调 - 左侧导航面板,右侧内容区域 - 顶部菜单栏和工具栏 - 底部状态栏 #### 数据管理方案 - 使用单例模式管理应用状态 - 通过信号槽机制实现组件间通信 - 使用QSettings保存用户配置 #### 交互实现 - 支持拖放文件导入 - 提供键盘快捷键 - 显示操作进度反馈 - 提供工具提示 #### Python特性利用 - 使用PyQt6的现代特性 - 异步处理耗时操作 - 多线程处理视频分析 #### 可访问性考虑 - 支持键盘导航 - 提供清晰的视觉反馈 - 适配高DPI显示 #### 组件复用 - 自定义导航组件 - 自定义状态显示组件 - 统一风格的对话框 ### VideoImportView #### UI设计方案 - 大型拖放区域 - 视频文件列表 - 进度显示 - 操作按钮 #### 数据管理方案 - 管理视频文件列表 - 处理文件导入进度 - 验证文件格式 #### 交互实现 - 支持拖放导入 - 支持批量选择 - 显示导入进度 - 提供文件管理操作 ### SceneDetectionView #### UI设计方案 - 算法选择区域 - 参数设置区域 - 高级选项区域 - 进度显示 #### 数据管理方案 - 管理检测算法配置 - 处理检测进度 - 保存检测结果 #### 交互实现 - 实时参数调整 - 算法切换 - 进度反馈 - 结果预览 ### StoryboardView #### UI设计方案 - 场景网格显示 - 工具栏 - 排序和过滤选项 - 导出按钮 #### 数据管理方案 - 管理场景数据 - 处理排序和过滤 - 生成预览图 #### 交互实现 - 场景预览 - 排序和过滤 - 批量操作 - 导出功能 ### ExportView #### UI设计方案 - 格式选择 - 选项设置 - 路径选择 - 进度显示 #### 数据管理方案 - 管理导出配置 - 处理导出进度 - 保存导出结果 #### 交互实现 - 格式切换 - 参数设置 - 路径选择 - 进度反馈 ### VideoLoaderView #### UI设计方案 - 视频预览功能 #### 数据管理方案 - 管理视频路径 - 处理视频加载 - 保存视频信息 #### 交互实现 - 显示视频预览 - 加载视频 - 更新视频信息 ## 开发状态跟踪 | 页面/组件名称 | 开发状态 | 文件路径 | |:-------------:|:--------:|:--------:| | MainWindow | 已完成 | `src/ui/main_window.py` | | VideoImportView | 已完成 | `src/ui/views/video_import_view.py` | | SceneDetectionView | 已完成 | `src/ui/views/scene_detection_view.py` | | StoryboardView | 已完成 | `src/ui/views/storyboard_view.py` | | ExportView | 已完成 | `src/ui/views/export_view.py` | | 全局样式 | 已完成 | `src/ui/styles.py` | | 应用程序入口 | 已完成 | `src/main.py` | # 视频场景检测工具 一个基于Python和OpenCV的视频场景检测工具,可以自动检测视频中的场景变化,并支持导出场景帧。 ## 功能特点 - 支持多种视频格式(MP4、AVI、MKV等) - 自动检测视频场景变化 - 可调节场景检测参数(阈值、最小场景长度) - 实时预览视频和场景 - 支持导出场景帧 - 简洁直观的用户界面 ## 系统要求 - Python 3.8+ - OpenCV 4.7+ - PyQt6 6.4+ ## 安装 1. 克隆仓库: ```bash git clone https://github.com/yourusername/video-scene-detector.git cd video-scene-detector ``` 2. 安装依赖: ```bash pip install -r requirements.txt ``` ## 使用方法 1. 运行程序: ```bash python src/main.py ``` 2. 使用步骤: - 点击"打开视频"按钮选择要处理的视频文件 - 调整场景检测参数(可选) - 点击"开始检测"按钮开始场景检测 - 在场景列表中查看检测结果 - 点击场景列表项预览对应场景 - 点击"导出场景"按钮导出场景帧 ## 项目结构 ``` video-scene-detector/ ├── src/ │ ├── ui/ │ │ ├── main_window.py # 主窗口 │ │ ├── video_view.py # 视频预览组件 │ │ └── scene_list.py # 场景列表组件 │ ├── video_processor.py # 视频处理核心 │ └── main.py # 程序入口 ├── tests/ │ └── test_video_processor.py # 单元测试 ├── logs/ # 日志目录 ├── requirements.txt # 依赖列表 └── README.md # 项目说明 ``` ## 开发说明 ### 视频处理模块 视频处理模块(`video_processor.py`)提供了以下核心功能: - 视频加载和基本信息获取 - 场景检测算法实现 - 场景帧提取 - 资源管理 ### UI模块 UI模块包含以下组件: - 主窗口(`main_window.py`):整体布局和功能控制 - 视频预览(`video_view.py`):视频播放和场景预览 - 场景列表(`scene_list.py`):场景信息展示和选择 ## 测试 运行单元测试: ```bash python -m unittest tests/test_video_processor.py ``` ## 日志 程序运行日志保存在 `logs/app.log` 文件中,包含以下信息: - 程序启动和退出 - 视频加载和处理 - 错误和异常信息 ## 贡献 欢迎提交 Issue 和 Pull Request! ## 许可证 MIT License def update_info(self, info: dict): # 添加文件大小显示 file_size = os.path.getsize(self.video_path) size_mb = file_size / (1024 * 1024) self.info_labels["size"].setText(f"文件大小: {size_mb:.2f} MB") def load_video(self): # 添加超时处理 self.load_timer = QTimer() self.load_timer.setSingleShot(True) self.load_timer.timeout.connect(self.handle_timeout) self.load_timer.start(30000) # 30秒超时 def show_preview(self): # 添加视频预览功能 if self.video_path: # 获取第一帧作为预览 cap = cv2.VideoCapture(self.video_path) ret, frame = cap.read() if ret: # 显示预览图 self.preview_label.setPixmap(self.frame_to_pixmap(frame)) cap.release() def save_recent_file(self): # 保存最近打开的文件 recent_files = self.settings.value("recent_files", []) if self.video_path not in recent_files: recent_files.insert(0, self.video_path) recent_files = recent_files[:5] # 只保留最近5个 self.settings.setValue("recent_files", recent_files) def validate_video_file(self, file_path): # 添加更详细的文件格式验证 if not os.path.exists(file_path): return False, "文件不存在" if not os.path.isfile(file_path): return False, "不是有效的文件" if not file_path.lower().endswith(('.mp4', '.avi', '.mkv', '.mov')): return False, "不支持的视频格式" return True, ""