Skip to main content

video_subtitle/
cli.rs

1//! 命令行参数定义(基于 [`clap`])。
2
3use std::path::PathBuf;
4
5use clap::Parser;
6
7/// 命令行配置,由 [`clap::Parser`] 从进程参数解析。
8///
9/// # 示例
10///
11/// ```bash
12/// video-subtitle -i demo.mp4 -m ggml-base.bin -l zh
13/// video-subtitle -i demo.mp4 -m ggml-small.bin --srt-only --keep-temp
14/// ```
15#[derive(Debug, Parser)]
16#[command(
17    name = "video-subtitle",
18    about = "FFmpeg 提取音频 → Whisper 识别 → SRT → FFmpeg 烧录字幕",
19    version
20)]
21pub struct Cli {
22    /// 输入视频文件路径。
23    #[arg(short, long)]
24    pub input: PathBuf,
25
26    /// 烧录字幕后的输出视频路径。
27    ///
28    /// 未指定时默认为输入文件同目录下的 `{原名}_subtitled.mp4`。
29    #[arg(short, long)]
30    pub output: Option<PathBuf>,
31
32    /// Whisper GGML 模型文件路径(如 `ggml-base.bin`)。
33    #[arg(short, long)]
34    pub model: PathBuf,
35
36    /// 识别语言 ISO 代码,例如 `zh`、`en`。
37    ///
38    /// 传 `auto` 或省略则由 Whisper 自动检测。
39    #[arg(short, long)]
40    pub language: Option<String>,
41
42    /// 启用 Whisper 翻译模式:将非英语内容译为英语。
43    #[arg(long)]
44    pub translate: bool,
45
46    /// 仅生成 SRT,不执行第四步字幕烧录。
47    #[arg(long)]
48    pub srt_only: bool,
49
50    /// 流程结束后保留临时 `.tmp.wav` / `.tmp.srt` 文件。
51    #[arg(long)]
52    pub keep_temp: bool,
53
54    /// `ffmpeg` 可执行文件路径;省略则在 PATH 中查找 `ffmpeg` / `ffmpeg.exe`。
55    #[arg(long)]
56    pub ffmpeg: Option<PathBuf>,
57}