Files
video_probe/VIDEO_PROBE_RUST_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

5.9 KiB
Raw Blame History

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 (必须)

  1. 项目初始化
  2. 🔨 数据结构定义
  3. 🔨 ffprobe 执行逻辑
  4. 🔨 JSON 解析逻辑
  5. 🔨 输出格式化
  6. 🔨 命令行界面

P1 (重要)

  1. 🔨 单元测试
  2. 🔨 集成测试
  3. 🔨 错误处理
  4. 🔨 文档编写

P2 (可选)

  1. ⏸️ 批量处理
  2. ⏸️ 并行处理
  3. ⏸️ 进度条
  4. ⏸️ 递归扫描

🎓 学习资源

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

📞 获取帮助

  1. 查看文档

    • VIDEO_PROBE_RUST_DEVELOPMENT.md
    • VIDEO_PROBE_RUST_QUICKSTART.md
  2. 参考 Python 原型

    • video_probe.py
  3. Rust 社区

  4. 提交 Issue

    • Gitea 仓库 Issues 页面

🎉 下一步行动

  1. 阅读开发文档
  2. 运行初始化脚本
  3. 🔨 实现核心功能
  4. 🔨 编写测试
  5. 🔨 创建文档
  6. 🔨 推送到 Gitea
  7. 🔨 发布到 crates.io可选

准备开始了吗?运行 ./init_video_probe_rust.sh 开始吧! 🚀