# autosub **Repository Path**: windoze/autosub ## Basic Information - **Project Name**: autosub - **Description**: 一个使用 Whisper 进行视频/音频转录和字幕生成的命令行工具,支持 LLM 驱动的翻译功能。 - **Primary Language**: Rust - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-15 - **Last Updated**: 2025-12-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # autosub [English](README.md) 一个使用 Whisper 进行视频/音频转录和字幕生成的命令行工具,支持 LLM 驱动的翻译功能。 ## 功能特点 - 使用 OpenAI Whisper 模型将视频和音频文件转录为 SRT 字幕 - 支持 GPU 加速(Apple Silicon 使用 Metal,NVIDIA 显卡使用 CUDA) - 自动语言检测或手动指定语言 - 实时流式输出 SRT 文件,转录过程中即时写入 - 支持多个 LLM 提供商进行字幕翻译(OpenAI、Anthropic、Google、Ollama、DeepSeek) - 支持翻译现有 SRT 文件,无需重新转录 ## 安装 ### 前置要求 - [Rust](https://rustup.rs/)(1.70 或更高版本) - FFmpeg 开发库(用于链接) #### 安装 FFmpeg 开发库 **macOS (Homebrew):** ```bash brew install ffmpeg ``` **Ubuntu/Debian:** ```bash sudo apt install libavcodec-dev libavformat-dev libavutil-dev libavfilter-dev libavdevice-dev libswresample-dev libswscale-dev pkg-config ``` **Fedora:** ```bash sudo dnf install ffmpeg-devel ``` **Arch Linux:** ```bash sudo pacman -S ffmpeg ``` **Windows:** 方法 1:使用 vcpkg ```powershell vcpkg install ffmpeg:x64-windows set VCPKG_ROOT=C:\path\to\vcpkg ``` 方法 2:使用预编译二进制文件 1. 从 [gyan.dev](https://www.gyan.dev/ffmpeg/builds/) 下载 FFmpeg 开发库(选择 "ffmpeg-release-full-shared") 2. 解压并设置环境变量: ```powershell set FFMPEG_DIR=C:\path\to\ffmpeg set PATH=%FFMPEG_DIR%\bin;%PATH% ``` ### 从源码构建 ```bash # 克隆仓库 git clone https://github.com/user/autosub.git cd autosub # 构建(macOS 自动启用 Metal,其他平台使用 CPU) cargo build --release # 在 macOS 上使用 Homebrew 安装的 FFmpeg 时,可能需要指定 FFmpeg 路径: FFMPEG_DIR="/opt/homebrew/Cellar/ffmpeg/8.0.1" cargo build --release # 使用 CUDA 加速构建(NVIDIA GPU,需要安装 CUDA 工具包) cargo build --release --features cuda ``` 编译后的二进制文件位于 `target/release/autosub`。 ### 运行时依赖 编译后的二进制文件在运行时需要 FFmpeg 共享库: - **macOS/Linux:** FFmpeg 库必须在系统库路径中(通过包管理器安装通常会自动配置) - **Windows:** 确保 FFmpeg DLL 文件在 `PATH` 环境变量中或与可执行文件在同一目录 ## 使用方法 ### 基本转录 ```bash # 转录视频文件(自动检测语言) autosub video.mp4 # 指定语言进行转录 autosub video.mp4 --language zh # 转录音频文件 autosub audio.mp3 # 指定输出文件 autosub video.mp4 --output subtitles.srt # 使用不同的 Whisper 模型 autosub video.mp4 --model large ``` ### 翻译功能 ```bash # 转录并翻译为中文 autosub video.mp4 --translate zh # 使用 Anthropic Claude 进行翻译 autosub video.mp4 --translate zh --llm-provider anthropic --llm-api-key YOUR_KEY # 使用 DeepSeek 进行翻译 autosub video.mp4 --translate en --llm-provider deepseek --llm-api-key YOUR_KEY # 仅翻译现有 SRT 文件 autosub existing.srt --translate-only --translate en --llm-api-key YOUR_KEY ``` ### 环境变量 可以通过环境变量设置 API 密钥和偏好: ```bash export AUTOSUB_LLM_PROVIDER=openai export AUTOSUB_LLM_API_KEY=your-api-key export AUTOSUB_LLM_MODEL=gpt-4o-mini export AUTOSUB_LLM_URL=https://api.openai.com/v1 # 可选,用于自定义端点 ``` ## 命令行选项 ``` 用法: autosub [选项] <输入文件> 参数: 输入视频/音频文件路径(使用 --translate-only 时为 SRT 文件) 选项: -o, --output 输出 SRT 文件路径(默认:输入文件名.srt) -m, --model Whisper 模型大小 [默认: small] [可选值: tiny, base, small, medium, large] -l, --language 源语言代码(如 'en', 'zh', 'ja') --translate 翻译字幕到目标语言 --translate-only 仅翻译现有 SRT 文件(跳过转录) --llm-provider LLM 提供商 [默认: openai] [可选值: openai, anthropic, google, ollama, deepseek] --llm-url LLM API 基础 URL(用于自定义端点) --llm-api-key 翻译用的 LLM API 密钥 --llm-model LLM 模型名称 [默认: gpt-4o-mini] --cache-dir 模型缓存目录 --device 使用的设备 [默认: auto] [可选值: auto, cpu, cuda, metal] -v, --verbose 启用详细输出 -h, --help 打印帮助信息 -V, --version 打印版本信息 ``` `auto` 设备选项会自动选择最佳可用设备,并在不可用时回退: - macOS:Metal GPU → CPU - Linux(NVIDIA 显卡):CUDA → CPU - 其他情况:CPU ## Whisper 模型 | 模型 | 大小 | 速度 | 质量 | 显存需求 | |--------|---------|--------|--------|----------| | tiny | ~39MB | 最快 | 较低 | ~1GB | | base | ~74MB | 快 | 基础 | ~1GB | | small | ~244MB | 中等 | 良好 | ~2GB | | medium | ~769MB | 较慢 | 更好 | ~5GB | | large | ~1.5GB | 最慢 | 最佳 | ~10GB | 模型会在首次使用时自动从 Hugging Face 下载并缓存到本地。 ## 使用 Hugging Face 镜像 如果您所在地区访问 Hugging Face 较慢,可以通过设置 `HF_ENDPOINT` 环境变量使用镜像: ```bash # 使用 hf-mirror.com(国内常用镜像) export HF_ENDPOINT=https://hf-mirror.com # 然后正常运行 autosub autosub video.mp4 ``` `hf-hub` crate 会自动识别此环境变量,从指定的镜像下载模型。 ### 其他可用镜像 ```bash # 使用阿里云镜像 export HF_ENDPOINT=https://hf-mirror.com # 或者使用其他镜像站点 export HF_ENDPOINT=https://huggingface.sukaka.top ``` ## 支持的文件格式 ### 视频 mp4, mkv, avi, mov, wmv, flv, webm, m4v, mpeg, mpg, 3gp ### 音频 wav, mp3, flac, m4a, aac, ogg, opus, wma, aiff, aif ## 翻译 LLM 提供商 | 提供商 | 环境变量 | 默认模型 | |-----------|---------|----------| | OpenAI | `OPENAI_API_KEY` 或 `AUTOSUB_LLM_API_KEY` | gpt-4o-mini | | Anthropic | `ANTHROPIC_API_KEY` 或 `AUTOSUB_LLM_API_KEY` | claude-3-haiku-20240307 | | Google | `GOOGLE_API_KEY` 或 `AUTOSUB_LLM_API_KEY` | gemini-pro | | DeepSeek | `DEEPSEEK_API_KEY` 或 `AUTOSUB_LLM_API_KEY` | deepseek-chat | | Ollama | 无需(本地运行) | llama2 | ## 使用示例 ```bash # 转录中文视频并翻译为英文 autosub chinese_video.mp4 --language zh --translate en --llm-api-key $OPENAI_API_KEY # 使用 large 模型获得更好的准确性 autosub lecture.mp4 --model large --language en # 使用 Ollama 进行本地翻译(无需 API 密钥) autosub video.mp4 --translate zh --llm-provider ollama --llm-model qwen2.5 # 使用 DeepSeek 翻译现有字幕 autosub movie.srt --translate-only --translate zh \ --llm-provider deepseek --llm-api-key $DEEPSEEK_API_KEY # 国内用户完整示例(使用镜像 + DeepSeek) export HF_ENDPOINT=https://hf-mirror.com export AUTOSUB_LLM_PROVIDER=deepseek export AUTOSUB_LLM_API_KEY=your-deepseek-key autosub video.mp4 --translate en ``` ## 常见问题 ### 模型下载慢怎么办? 设置 Hugging Face 镜像: ```bash export HF_ENDPOINT=https://hf-mirror.com ``` ### 如何使用国内的 LLM 服务? 推荐使用 DeepSeek,价格实惠且效果好: ```bash autosub video.mp4 --translate en --llm-provider deepseek --llm-api-key YOUR_KEY ``` ### 如何使用本地 LLM? 可以使用 Ollama 运行本地模型: ```bash # 先启动 Ollama 并拉取模型 ollama pull qwen2.5 # 使用本地模型翻译 autosub video.mp4 --translate zh --llm-provider ollama --llm-model qwen2.5 ``` ## 开发 ### Mel 滤波器组 Mel 滤波器文件(`src/melfilters.bytes` 和 `src/melfilters128.bytes`)是从 OpenAI Whisper Python 库预计算得到的。它们包含用于将 FFT 频谱图转换为梅尔刻度频谱图的三角滤波器组矩阵。 如需重新生成这些文件(需要 `openai-whisper` Python 包): ```bash pip install openai-whisper python scripts/generate_melfilters.py ``` - `melfilters.bytes` - 80 个梅尔频段,用于 tiny/base/small/medium 模型 - `melfilters128.bytes` - 128 个梅尔频段,用于 large-v3 模型 ## 许可证 MIT