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
5.9 KiB
5.9 KiB
video_probe (Rust) - 完整开发资源包
📚 文档清单
已创建以下开发文档:
1. VIDEO_PROBE_RUST_DEVELOPMENT.md (详细开发计划)
- ✅ 完整的开发步骤(8个阶段)
- ✅ 代码示例和模板
- ✅ 依赖清单
- ✅ 项目结构
- ✅ 测试策略
- ✅ 时间估算(6天)
2. VIDEO_PROBE_RUST_QUICKSTART.md (快速参考)
- ✅ 快速开始指南
- ✅ 核心实现要点
- ✅ 功能对照表
- ✅ 性能对比
- ✅ 开发清单
3. init_video_probe_rust.sh (自动初始化脚本)
- ✅ 自动创建 Cargo 项目
- ✅ 配置 Cargo.toml
- ✅ 创建目录结构
- ✅ 生成基础代码模板
- ✅ 初始化 Git 仓库
- ✅ 首次构建
4. video_probe.py (Python 原型)
- ✅ 完整功能实现
- ✅ 作为 Rust 版本的原型参考
- ✅ 功能验证标准
🎯 项目目标
核心目标
将 Python 版本的视频元数据提取工具重写为 Rust,实现:
- 🚀 高性能: 2-10x 更快的执行速度
- 💾 低内存: 更少的内存占用
- 📦 易部署: 单一二进制文件
- 🌍 跨平台: Linux/macOS/Windows 支持
功能对齐
| 功能 | 状态 |
|---|---|
| 使用 ffprobe 提取元数据 | ✅ Python 实现 |
| 提取格式信息 | ✅ Python 实现 |
| 提取视频流信息 | ✅ Python 实现 |
| 提取音频流信息 | ✅ Python 实现 |
| 提取字幕流信息 | ✅ Python 实现 |
| JSON 输出 | ✅ Python 实现 |
| 命令行界面 | ✅ Python 实现 |
| 友好输出 | ✅ Python 实现 |
🛠️ 技术栈
Rust 核心依赖
[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
chrono = { version = "0.4", features = ["serde"] }
anyhow = "1.0"
thiserror = "1.0"
clap = { version = "4.0", features = ["derive"] }
外部依赖
- ffprobe: 来自 FFmpeg(系统级依赖)
📋 开发流程
方式 1: 使用自动脚本(推荐)
# 1. 运行初始化脚本
./init_video_probe_rust.sh
# 2. 进入项目目录
cd video_probe
# 3. 实现核心功能
# 参考 VIDEO_PROBE_RUST_DEVELOPMENT.md
# 4. 测试
cargo test
cargo run -- video.mp4
# 5. 构建 release 版本
cargo build --release
方式 2: 手动创建
# 1. 创建项目
cargo new video_probe
cd video_probe
# 2. 配置 Cargo.toml
# 参考 VIDEO_PROBE_RUST_DEVELOPMENT.md
# 3. 创建目录结构
mkdir -p src tests docs
# 4. 实现功能
# 按照开发文档逐步实现
# 5. 测试和构建
cargo test
cargo build
📊 实现优先级
P0 (必须)
- ✅ 项目初始化
- 🔨 数据结构定义
- 🔨 ffprobe 执行逻辑
- 🔨 JSON 解析逻辑
- 🔨 输出格式化
- 🔨 命令行界面
P1 (重要)
- 🔨 单元测试
- 🔨 集成测试
- 🔨 错误处理
- 🔨 文档编写
P2 (可选)
- ⏸️ 批量处理
- ⏸️ 并行处理
- ⏸️ 进度条
- ⏸️ 递归扫描
🎓 学习资源
Rust 官方
依赖库文档
FFprobe
✅ 验证清单
开发前
- 已安装 Rust (rustc --version)
- 已安装 Cargo (cargo --version)
- 已安装 ffprobe (ffprobe -version)
- 已阅读开发文档
- 已了解 Python 原型
开发中
- 代码编译通过 (cargo build)
- 测试通过 (cargo test)
- 代码格式化 (cargo fmt)
- Lint 检查通过 (cargo clippy)
- 功能与 Python 版本一致
开发后
- Release 构建成功
- 文档完整
- README 清晰
- Git 提交规范
- 代码审查通过
🚀 发布流程
1. 本地测试
cargo test
cargo build --release
./target/release/video_probe video.mp4
2. 创建 Git 仓库
git init
git add .
git commit -m "Initial commit"
3. 推送到 Gitea
# 在 Gitea 创建仓库
git remote add origin <gitea-url>
git push -u origin main
4. 可选:发布到 crates.io
cargo login
cargo publish
📈 性能基准
预期性能提升
| 操作 | Python | Rust (预期) | 提升 |
|---|---|---|---|
| 启动 | 50ms | 1ms | 50x |
| 解析 1GB 视频 | 2s | 0.5s | 4x |
| 内存占用 | 30MB | 5MB | 6x |
| 二进制大小 | N/A | 2MB | - |
基准测试方法
# Python
time python3 video_probe.py video.mp4
# Rust
time ./target/release/video_probe video.mp4
🐛 常见问题
Q1: ffprobe 未找到
# macOS
brew install ffmpeg
# Linux
sudo apt-get install ffmpeg
# Windows
# 从 https://ffmpeg.org 下载
Q2: Rust 未安装
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Q3: 编译错误
# 更新 Rust
rustup update
# 清理并重新构建
cargo clean
cargo build
Q4: 测试失败
# 检查测试视频文件
ls tests/fixtures/
# 运行详细测试
cargo test -- --nocapture
📞 获取帮助
-
查看文档
VIDEO_PROBE_RUST_DEVELOPMENT.mdVIDEO_PROBE_RUST_QUICKSTART.md
-
参考 Python 原型
video_probe.py
-
Rust 社区
-
提交 Issue
- Gitea 仓库 Issues 页面
🎉 下一步行动
- ✅ 阅读开发文档
- ✅ 运行初始化脚本
- 🔨 实现核心功能
- 🔨 编写测试
- 🔨 创建文档
- 🔨 推送到 Gitea
- 🔨 发布到 crates.io(可选)
准备开始了吗?运行 ./init_video_probe_rust.sh 开始吧! 🚀