Files
video_probe/README.md
accusys f3e2d2dca7 Initial implementation of video_probe (Rust)
Core modules:
- probe.rs: ffprobe execution logic
- parser.rs: JSON parsing logic
- output.rs: Output formatting
- lib.rs: Library interface
- main.rs: CLI entry point

Features:
- Extract video metadata using ffprobe
- Parse video/audio/subtitle streams
- Save to JSON file
- Console summary output

Documentation:
- Added QUICKSTART.md
- Added ENVIRONMENT_SETUP_REPORT.md
2026-03-07 10:10:19 +08:00

341 lines
7.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Video YOLO Player - 使用说明
版本: 2.0.0
构建时间: 2026-03-06 12:00:00
## 概述
Video YOLO Player 是一个模块化的视频播放器,支持 YOLO 对象检测叠加显示。采用三步工作流程:
1. **视频分析** - 提取视频元数据
2. **对象预扫描** - 使用 YOLO 预处理视频
3. **播放** - 播放视频并显示检测结果
## 文件结构
```
video_yolo_player/
├── video_probe.py # 视频元数据提取工具
├── video_yolo_object_prescan.py # YOLO 对象预扫描工具
├── video_yolo_player.py # 主播放器
├── yolov8n.pt # YOLO 模型文件
└── README.md # 本文档
```
## 安装依赖
```bash
pip install opencv-python ultralytics numpy
```
确保已安装 `ffprobe``ffplay`(通常随 FFmpeg 安装):
- macOS: `brew install ffmpeg`
- Linux: `sudo apt-get install ffmpeg`
- Windows: 从 https://ffmpeg.org 下载
## 使用流程
### 1. 提取视频元数据
```bash
python3 video_probe.py <video_path>
```
**输出**: `<video_name>.probe.json`
**示例**:
```bash
python3 video_probe.py my_video.mp4
```
**生成文件**: `my_video.probe.json`
包含信息:
- 视频格式、编码器
- 分辨率、帧率
- 时长、比特率
- 音频流、字幕流信息
### 2. 预扫描视频(可选但推荐)
```bash
python3 video_yolo_object_prescan.py <video_path> <yolo_model> [--save-interval SECONDS]
```
**输出**: `<video_name>.yolo.json`
**参数**:
- `--save-interval SECONDS`: 自动保存间隔(默认: 30 秒)
- 范围: 5-300 秒
- 推荐值:
- 短视频 (< 5 分钟): 15 秒
- 中等视频 (5-15 分钟): 30 秒(默认)
- 长视频 (15-30 分钟): 60 秒
- 超长视频 (> 30 分钟): 120 秒
**示例**:
```bash
# 默认 30 秒自动保存
python3 video_yolo_object_prescan.py my_video.mp4 yolov8n.pt
```
**生成文件**: `my_video.yolo.json`
包含信息:
- 每帧的检测结果
- 对象类别、 置信度
- 边界框坐标
- 自动保存次数和- 状态跟踪 (in_progress/interrupted/completed)
- 最后保存时间
**处理时间**: 取决于视频长度和硬件(约 0.05-0.1 秒/帧)
- 自动保存会增加少量开销(静默保存)
- 自动保存可以防止意外断电导致数据丢失
- 断点续传功能可以在中断后继续处理
### 3. 播放视频
```bash
python3 video_yolo_player.py <video_path> <yolo_model>
```
**示例**:
```bash
python3 video_yolo_player.py my_video.mp4 yolov8n.pt
```
## 播放器控制
### 键盘快捷键
| 按键 | 功能 |
|------|------|
| `y` / `Y` | 切换实时 YOLO 检测(蓝色框) |
| `p` / `P` | 切换预扫描 YOLO 数据(绿色框) |
| `i` / `I` | 显示视频探测信息 |
| `Space` | 暂停/继续 |
| `s` / `S` | 切换声音 |
| `b` / `B` | 切换状态栏 |
| `h` / `H` | 隐藏当前窗口 |
| `1` | 切换原始视频窗口 |
| `2` | 切换 YOLO 检测窗口 |
| `3` | 切换命令窗口 |
| `←` | 后退 5 秒 |
| `→` | 前进 5 秒 |
| `Shift+←` | 后退 30 秒 |
| `Shift+→` | 前进 30 秒 |
| `q` / `ESC` | 退出 |
### 命令输入
在命令窗口中输入以下命令并按 Enter
| 命令 | 说明 | 示例 |
|------|------|------|
| `<帧号>` | 跳转到指定帧 | `1234` |
| `<时间码>` | 跳转到指定时间 | `00:01:30` |
| `<时间码.帧>` | 跳转到精确时间 | `00:01:30.15` |
| `+<秒数>` | 前进指定秒数 | `+10` |
| `-<秒数>` | 后退指定秒数 | `-5` |
| `i` | 显示视频探测信息 | `i` |
## 窗口布局
```
┌─────────────────┐ ┌─────────────────┐
│ 1: Original │ │ 2: YOLO │
│ Video │ │ Detection │
│ │ │ │
└─────────────────┘ └─────────────────┘
┌──────────────────────────────────────┐
│ 3: Command Window │
│ [Build Info] │
│ Examples: 123 | 00:01:30 | +10 | i │
│ > _ │
└──────────────────────────────────────┘
```
- **窗口 1**: 原始视频
- **窗口 2**: YOLO 检测叠加(可显示实时和预扫描结果)
- **窗口 3**: 命令输入和状态显示
## 检测模式
### Live YOLO实时检测
-`y` 激活
- **蓝色**边界框
- 实时计算,需要 GPU/CPU 性能
- 适合测试和调试
### Pre-scanned YOLO预扫描
-`p` 激活
- **绿色**边界框
-`.yolo.json` 加载,无性能开销
- 适合流畅播放和详细分析
### 双模式叠加
可以同时激活 `y``p`,对比实时检测和预扫描结果:
- 绿色框:预扫描结果
- 蓝色框:实时检测结果
## JSON 文件格式
### .probe.json 结构
```json
{
"video_path": "/path/to/video.mp4",
"probed_at": "2026-03-06T12:00:00",
"format": {
"format_name": "mov,mp4,m4a,3gp,3g2,mj2",
"duration": 120.5,
"size": 52428800,
"bit_rate": 3473408
},
"video_stream": {
"codec_name": "h264",
"width": 1920,
"height": 1080,
"r_frame_rate": "30/1"
},
"audio_streams": [...]
}
```
### .yolo.json 结构
```json
{
"metadata": {
"video_path": "/path/to/video.mp4",
"model_path": "/path/to/yolov8n.pt",
"width": 1920,
"height": 1080,
"fps": 30.0,
"total_frames": 3615,
"total_duration": 120.5,
"processed_at": "2026-03-06T12:00:00",
"processing_time": 180.5,
"total_detections": 7230
},
"frames": {
"1": {
"frame_number": 1,
"time_seconds": 0.033,
"time_formatted": "00:00:00",
"detections": [
{
"class_id": 0,
"class_name": "person",
"confidence": 0.89,
"x1": 100.5,
"y1": 200.3,
"x2": 300.7,
"y2": 600.9
}
]
}
}
}
```
## 性能优化建议
1. **预扫描优先**: 使用 `video_yolo_object_prescan.py` 预处理,播放时零性能开销
2. **GPU 加速**: 确保 YOLO 模型使用 GPU自动检测
3. **小模型**: `yolov8n.pt` 最快,`yolov8s/m/l/x.pt` 更准确但更慢
4. **分辨率**: 高分辨率视频需要更多处理时间
## 故障排除
### ffprobe 未找到
```bash
# macOS
brew install ffmpeg
# Linux
sudo apt-get install ffmpeg
# 验证安装
ffprobe -version
```
### YOLO 模型加载失败
```bash
# 下载 YOLOv8 模型
wget https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt
```
### 视频无法打开
检查文件路径和权限:
```bash
ls -la /path/to/video.mp4
```
### 性能问题
- 使用预扫描模式 (`p`) 代替实时检测 (`y`)
- 降低视频分辨率
- 使用更小的 YOLO 模型
## 完整示例
```bash
# 1. 分析视频
python3 video_probe.py /path/to/video.mp4
# 2. 预扫描对象
python3 video_yolo_object_prescan.py /path/to/video.mp4 yolov8n.pt
# 3. 播放视频
python3 video_yolo_player.py /path/to/video.mp4 yolov8n.pt
# 播放时:
# - 按 p 激活预扫描数据(绿色框)
# - 按 y 激活实时检测(蓝色框)
# - 按 i 查看视频信息
# - 输入 00:01:30 跳转到 1分30秒
```
## 更新日志
### v2.0.0 (2026-03-06)
**重大架构重构**:
- ✅ 模块化设计:分离 probe、prescan、player
- ✅ 移除 .txt 支持,统一使用 JSON
- ✅ 新增 y/Y 命令:实时 YOLO 检测(蓝色)
- ✅ 新增 p/P 命令:预扫描数据(绿色)
- ✅ 新增 i/I 命令:查看视频探测信息
- ✅ 延迟加载 YOLO 模型(仅在需要时加载)
- ✅ 改进焦点模式:输入命令时禁用单键快捷键
- ✅ 自动屏幕分辨率检测和窗口布局
### v1.0.0 (2026-03-06)
- 初始版本
- 基本视频播放和 YOLO 检测
- .txt 格式支持
## 许可证
MIT License
## 作者
Video YOLO Player Team
## 贡献
欢迎提交 Issue 和 Pull Request