# Video Dubbing - 视频译配自动化工具


简体中文 | [English](./README_EN.md)
Video Dubbing 是一款 AI 驱动的命令行视频译配工具, 可进行语音识别 (ASR)、文本翻译、语音生成 (TTS), 实现端到端视频译配, 并支持批量处理视频文件, 一键生成多语言配音视频.
成品展示:
- [CMU15-445 数据库系统导论](https://www.bilibili.com/video/BV1Xh91YoEkt)
- [CMU15-721 高级数据库系统](https://www.bilibili.com/video/BV12291Y2E7u)
- [CS149 并行计算](https://www.bilibili.com/video/BV1d2R8YsEu8)
## ✨ 功能特性
- **功能全面**: ASR → 翻译 → TTS 全链路自动化
- 高精度语音识别 powered by [OpenAI-Whipser](https://github.com/openai/whisper)
- 支持使用兼容 OpenAI 的任意 LLM API 进行翻译
- 基于 Edge-TTS 的高质量语音合成
- **配置高度灵活**: 各功能可独立开关, 以用于**字幕批量翻译**、**语音合成**等场景
- **丰富的后处理选项**: 内置音轨/字幕添加功能, 支持字幕格式自定义
- **批量处理**: 支持 glob 匹配, 一键批处理
- **多硬件支持**: 支持在 CPU/CUDA/NPU 平台上运行
## 🚀 快速开始
### 配置运行环境
**要求**: Python 3.11, ffmpeg, ffprobe
推荐使用优秀的 Python 环境管理工具 [astral-sh/uv](https://github.com/astral-sh/uv)
**安装 ffmpeg & ffprobe**:
- Windows: 下载 [此链接](https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl.zip) 并解压, 将 `bin/ffmpeg.exe` 和 `bin/ffprobe.exe` 复制到某个位于 `PATH` 中的目录
- MacOS: `brew install ffmpeg`
- Linux: ...
### 安装 Video Dubbing
按需选择以下安装方式:
**最小安装**:
适用于无须 ASR, 仅需翻译和 TTS 的场景, 可避免安装 `pytorch, pandas` 等大型依赖项, 占用空间仅 ~20MB
```bash
pip install video-dubbing
# or
uv tool install -p 3.11 video-dubbing[npu] # with uv
```
**基础安装**:
```bash
pip install video-dubbing[asr]
# or
uv tool install -p 3.11 video-dubbing[asr] # with uv
```
**华为 NPU**:
```bash
pip install video-dubbing[npu]
# or
uv tool install -p 3.11 video-dubbing[npu] # with uv
```
理论上只要 [torch_npu](https://gitee.com/ascend/pytorch) 支持的平台都可以运行, 在 Ascend 910B3 上测试通过, 若你成功在其他平台上运行, 欢迎提交 PR 更新此处.
### 基础用法
由于配置项较多, 推荐使用配置文件设定大多数配置项. 首先生成默认配置文件:
**生成配置文件**:
```bash
dub -gc # 将在当前目录下生成 config.json, 包含默认配置
```
而后在执行时, 通过 `-c` 参数指定配置文件, 并添加其他参数覆盖配置文件中的设置:
**加载配置文件**:
```bash
dub -c config.json # 后加其他命令行参数
```
### 示例
**示例 1**: 批量转译 videos 目录下所有 mp4 文件为中文:
```bash
dub -c config.json --input-videos videos/*.mp4 --use-html
```
**示例 2**: 批量翻译 subs 目录下的字幕为中文:
```bash
dub -c config.json --input-subtitles subs/*.srt --asr False --tts False
```
## ⚠️ 注意事项
- 不建议一开始就直接批处理大量文件, 建议先尝试单个文件, 确保配置正确
- 可设置 `--debug` 及 `--log_dir` 打开调试模式并保存日志, 以便排查问题
- 上报 Issue 时请提供详细的配置信息及日志, 以便更快定位问题
文件限制:
- 视频文件支持格式取决于 ffmpeg, 常见格式如 mp4, mkv, webm 等均支持
- 字幕文件仅支持 srt 格式, 其他格式可使用 ffmpeg 转换为 srt
- 确保字幕文件编码为 UTF-8, 否则可能导致乱码问题
- 若仅指定视频, 必须开启 ASR; 若仅指定字幕, 无法开启 ASR; 若同时指定, 则二者数量和顺序必须一一对应
NPU 相关:
- 使用 NPU 时, `--device` 保持为 `cuda` 即可, 无需修改
LLM 相关:
- `--use_html` 选项当原文字幕分句良好时推荐开启(即每行都基本以句号结尾), 否则推荐关闭. 使用 whisper 转译英文视频生成的字幕一般都符合此要求.
## ⚙️ 全部配置参数
```bash
options:
-h, --help show this help message and exit
-c CONFIG, --config CONFIG
加载 JSON 或 YAML 格式的配置文件 (default: None)
-gc, --gen-config 生成默认配置文件 (default: False)
-v, --version show program's version number and exit
General:
--input_videos INPUT_VIDEOS [INPUT_VIDEOS ...], --input-videos INPUT_VIDEOS [INPUT_VIDEOS ...]
待处理的视频文件 (default: [])
--input_subtitles INPUT_SUBTITLES [INPUT_SUBTITLES ...], --input-subtitles INPUT_SUBTITLES [INPUT_SUBTITLES ...]
待处理的字幕文件 (srt 格式) (default: [])
--asr [ASR] 语音识别开关 (default: True)
--translate [TRANSLATE]
翻译开关 (default: True)
--tts [TTS] 语音合成开关 (default: True)
--debug [DEBUG] 调试模式 (default: False)
--log_dir LOG_DIR, --log-dir LOG_DIR
日志目录, 若为空则不保存 (default: None)
ASR:
--model MODEL whisper 模型型号 (default: turbo)
--model_dir MODEL_DIR, --model-dir MODEL_DIR
whisper 模型存储目录 (default: None)
--device DEVICE 用于运行 ASR 相关模型的硬件设备 (default: cuda)
--align [ALIGN] 进行词汇对齐 (default: False)
--diarize [DIARIZE] 进行说话者分离 (default: False)
--hf_token HF_TOKEN, --hf-token HF_TOKEN
Hugging Face token. 用于下载需同意用户协议的某些模型 (default: )
Translate:
--target_lang TARGET_LANG, --target-lang TARGET_LANG
目标语言 (default: 简体中文)
--base_url BASE_URL, --base-url BASE_URL
LLM API 地址 (default: https://api.openai.com/v1)
--api_key API_KEY, --api-key API_KEY
LLM API key (default: )
--llm_model LLM_MODEL, --llm-model LLM_MODEL
LLM 模型 (default: )
--use_html [USE_HTML], --use-html [USE_HTML]
使用 HTML 标记请求多行翻译. 当字幕分句良好时推荐开启, 否则推荐关闭 (default: False)
--remove_ellipsis [REMOVE_ELLIPSIS], --remove-ellipsis [REMOVE_ELLIPSIS]
移除字幕行尾的省略号 (default: False)
--llm_req_rate LLM_REQ_RATE, --llm-req-rate LLM_REQ_RATE
LLM 请求速率 (r/s) (default: 5)
--batch_size BATCH_SIZE, --batch-size BATCH_SIZE
单次请求 LLM 翻译的最大行数. 过大会提高失败率 (default: 10)
TTS:
--voice VOICE TTS 声音. 参考 https://gist.github.com/BettyJJ/17cbaa1de96235a7f5773b8690a20462 (default: zh-CN-YunyangNeural)
--tts_req_rate TTS_REQ_RATE, --tts-req-rate TTS_REQ_RATE
TTS 请求速率 (r/10s) (default: 3)
--audio_format AUDIO_FORMAT, --audio-format AUDIO_FORMAT
音频输出格式 (default: aac)
--add_track [ADD_TRACK], --add-track [ADD_TRACK]
添加 TTS 音频到视频 (default: True)
--track_title TRACK_TITLE, --track-title TRACK_TITLE
TTS 音轨标题. 默认使用 voice 名称 (default: None)
Subtitle:
--soft [SOFT] 添加字幕方式 (True: 软 / False: 硬) (目前仅支持软字幕) (default: True)
--add_asr_sub [ADD_ASR_SUB], --add-asr-sub [ADD_ASR_SUB]
将语音识别字幕添加到视频 (default: True)
--asr_sub_title ASR_SUB_TITLE, --asr-sub-title ASR_SUB_TITLE
语音识别字幕标题 (default: None)
--asr_sub_style ASR_SUB_STYLE, --asr-sub-style ASR_SUB_STYLE
语音识别字幕样式. 参考 https://github.com/yuanshanhua/video-dubbing/blob/main/docs/subtitle_style_zh.md (default: None)
--add_trans_sub [ADD_TRANS_SUB], --add-trans-sub [ADD_TRANS_SUB]
将译文字幕添加到视频 (default: True)
--trans_sub_title TRANS_SUB_TITLE, --trans-sub-title TRANS_SUB_TITLE
译文字幕标题 (default: None)
--trans_sub_style TRANS_SUB_STYLE, --trans-sub-style TRANS_SUB_STYLE
译文字幕样式 (default: None)
--add_bilingual_sub [ADD_BILINGUAL_SUB], --add-bilingual-sub [ADD_BILINGUAL_SUB]
将双语字幕添加到视频 (default: True)
--bilingual_sub_title BILINGUAL_SUB_TITLE, --bilingual-sub-title BILINGUAL_SUB_TITLE
双语字幕标题 (default: None)
--bilingual_sub_style BILINGUAL_SUB_STYLE, --bilingual-sub-style BILINGUAL_SUB_STYLE
双语字幕样式 (default: None)
```
## 🙏 致谢
本项目基于以下优秀开源项目:
- [OpenAI-Whisper](https://github.com/openai/whisper)
- [FFmpeg](https://ffmpeg.org/)
- [whisperX](https://github.com/m-bain/whisperX)
- [edge-tts](https://github.com/rany2/edge-tts)
- [aiolimiter](https://github.com/mjpieters/aiolimiter)
Raw data
{
"_id": null,
"home_page": null,
"name": "video-dubbing",
"maintainer": null,
"docs_url": null,
"requires_python": "==3.11",
"maintainer_email": null,
"keywords": "ai, dubbing, llm, openai, video, whisper",
"author": "yuanshanhua",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/f1/a0/d48cce492e5b591af9c32321b76dba0043acb38cc09936d61019d0ce53bb/video_dubbing-1.0.0.tar.gz",
"platform": null,
"description": "# Video Dubbing - \u89c6\u9891\u8bd1\u914d\u81ea\u52a8\u5316\u5de5\u5177\n\n\n\n\n\u7b80\u4f53\u4e2d\u6587 | [English](./README_EN.md)\n\nVideo Dubbing \u662f\u4e00\u6b3e AI \u9a71\u52a8\u7684\u547d\u4ee4\u884c\u89c6\u9891\u8bd1\u914d\u5de5\u5177, \u53ef\u8fdb\u884c\u8bed\u97f3\u8bc6\u522b (ASR)\u3001\u6587\u672c\u7ffb\u8bd1\u3001\u8bed\u97f3\u751f\u6210 (TTS), \u5b9e\u73b0\u7aef\u5230\u7aef\u89c6\u9891\u8bd1\u914d, \u5e76\u652f\u6301\u6279\u91cf\u5904\u7406\u89c6\u9891\u6587\u4ef6, \u4e00\u952e\u751f\u6210\u591a\u8bed\u8a00\u914d\u97f3\u89c6\u9891.\n\n\u6210\u54c1\u5c55\u793a:\n\n- [CMU15-445 \u6570\u636e\u5e93\u7cfb\u7edf\u5bfc\u8bba](https://www.bilibili.com/video/BV1Xh91YoEkt)\n- [CMU15-721 \u9ad8\u7ea7\u6570\u636e\u5e93\u7cfb\u7edf](https://www.bilibili.com/video/BV12291Y2E7u)\n- [CS149 \u5e76\u884c\u8ba1\u7b97](https://www.bilibili.com/video/BV1d2R8YsEu8)\n\n## \u2728 \u529f\u80fd\u7279\u6027\n\n- **\u529f\u80fd\u5168\u9762**: ASR \u2192 \u7ffb\u8bd1 \u2192 TTS \u5168\u94fe\u8def\u81ea\u52a8\u5316\n - \u9ad8\u7cbe\u5ea6\u8bed\u97f3\u8bc6\u522b powered by [OpenAI-Whipser](https://github.com/openai/whisper)\n - \u652f\u6301\u4f7f\u7528\u517c\u5bb9 OpenAI \u7684\u4efb\u610f LLM API \u8fdb\u884c\u7ffb\u8bd1\n - \u57fa\u4e8e Edge-TTS \u7684\u9ad8\u8d28\u91cf\u8bed\u97f3\u5408\u6210\n- **\u914d\u7f6e\u9ad8\u5ea6\u7075\u6d3b**: \u5404\u529f\u80fd\u53ef\u72ec\u7acb\u5f00\u5173, \u4ee5\u7528\u4e8e**\u5b57\u5e55\u6279\u91cf\u7ffb\u8bd1**\u3001**\u8bed\u97f3\u5408\u6210**\u7b49\u573a\u666f\n- **\u4e30\u5bcc\u7684\u540e\u5904\u7406\u9009\u9879**: \u5185\u7f6e\u97f3\u8f68/\u5b57\u5e55\u6dfb\u52a0\u529f\u80fd, \u652f\u6301\u5b57\u5e55\u683c\u5f0f\u81ea\u5b9a\u4e49\n- **\u6279\u91cf\u5904\u7406**: \u652f\u6301 glob \u5339\u914d, \u4e00\u952e\u6279\u5904\u7406\n- **\u591a\u786c\u4ef6\u652f\u6301**: \u652f\u6301\u5728 CPU/CUDA/NPU \u5e73\u53f0\u4e0a\u8fd0\u884c\n\n## \ud83d\ude80 \u5feb\u901f\u5f00\u59cb\n\n### \u914d\u7f6e\u8fd0\u884c\u73af\u5883\n\n**\u8981\u6c42**: Python 3.11, ffmpeg, ffprobe\n\n\u63a8\u8350\u4f7f\u7528\u4f18\u79c0\u7684 Python \u73af\u5883\u7ba1\u7406\u5de5\u5177 [astral-sh/uv](https://github.com/astral-sh/uv)\n\n**\u5b89\u88c5 ffmpeg & ffprobe**:\n\n- Windows: \u4e0b\u8f7d [\u6b64\u94fe\u63a5](https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl.zip) \u5e76\u89e3\u538b, \u5c06 `bin/ffmpeg.exe` \u548c `bin/ffprobe.exe` \u590d\u5236\u5230\u67d0\u4e2a\u4f4d\u4e8e `PATH` \u4e2d\u7684\u76ee\u5f55\n- MacOS: `brew install ffmpeg`\n- Linux: ...\n\n### \u5b89\u88c5 Video Dubbing\n\n\u6309\u9700\u9009\u62e9\u4ee5\u4e0b\u5b89\u88c5\u65b9\u5f0f:\n\n**\u6700\u5c0f\u5b89\u88c5**:\n\n\u9002\u7528\u4e8e\u65e0\u987b ASR, \u4ec5\u9700\u7ffb\u8bd1\u548c TTS \u7684\u573a\u666f, \u53ef\u907f\u514d\u5b89\u88c5 `pytorch, pandas` \u7b49\u5927\u578b\u4f9d\u8d56\u9879, \u5360\u7528\u7a7a\u95f4\u4ec5 ~20MB\n\n```bash\npip install video-dubbing\n# or\nuv tool install -p 3.11 video-dubbing[npu] # with uv\n```\n\n**\u57fa\u7840\u5b89\u88c5**:\n\n```bash\npip install video-dubbing[asr]\n# or\nuv tool install -p 3.11 video-dubbing[asr] # with uv\n```\n\n**\u534e\u4e3a NPU**:\n\n```bash\npip install video-dubbing[npu]\n# or\nuv tool install -p 3.11 video-dubbing[npu] # with uv\n```\n\n\u7406\u8bba\u4e0a\u53ea\u8981 [torch_npu](https://gitee.com/ascend/pytorch) \u652f\u6301\u7684\u5e73\u53f0\u90fd\u53ef\u4ee5\u8fd0\u884c, \u5728 Ascend 910B3 \u4e0a\u6d4b\u8bd5\u901a\u8fc7, \u82e5\u4f60\u6210\u529f\u5728\u5176\u4ed6\u5e73\u53f0\u4e0a\u8fd0\u884c, \u6b22\u8fce\u63d0\u4ea4 PR \u66f4\u65b0\u6b64\u5904.\n\n### \u57fa\u7840\u7528\u6cd5\n\n\u7531\u4e8e\u914d\u7f6e\u9879\u8f83\u591a, \u63a8\u8350\u4f7f\u7528\u914d\u7f6e\u6587\u4ef6\u8bbe\u5b9a\u5927\u591a\u6570\u914d\u7f6e\u9879. \u9996\u5148\u751f\u6210\u9ed8\u8ba4\u914d\u7f6e\u6587\u4ef6:\n\n**\u751f\u6210\u914d\u7f6e\u6587\u4ef6**:\n\n```bash\ndub -gc # \u5c06\u5728\u5f53\u524d\u76ee\u5f55\u4e0b\u751f\u6210 config.json, \u5305\u542b\u9ed8\u8ba4\u914d\u7f6e\n```\n\n\u800c\u540e\u5728\u6267\u884c\u65f6, \u901a\u8fc7 `-c` \u53c2\u6570\u6307\u5b9a\u914d\u7f6e\u6587\u4ef6, \u5e76\u6dfb\u52a0\u5176\u4ed6\u53c2\u6570\u8986\u76d6\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684\u8bbe\u7f6e:\n\n**\u52a0\u8f7d\u914d\u7f6e\u6587\u4ef6**:\n\n```bash\ndub -c config.json # \u540e\u52a0\u5176\u4ed6\u547d\u4ee4\u884c\u53c2\u6570\n```\n\n### \u793a\u4f8b\n\n**\u793a\u4f8b 1**: \u6279\u91cf\u8f6c\u8bd1 videos \u76ee\u5f55\u4e0b\u6240\u6709 mp4 \u6587\u4ef6\u4e3a\u4e2d\u6587:\n\n```bash\ndub -c config.json --input-videos videos/*.mp4 --use-html\n```\n\n**\u793a\u4f8b 2**: \u6279\u91cf\u7ffb\u8bd1 subs \u76ee\u5f55\u4e0b\u7684\u5b57\u5e55\u4e3a\u4e2d\u6587:\n\n```bash\ndub -c config.json --input-subtitles subs/*.srt --asr False --tts False\n```\n\n## \u26a0\ufe0f \u6ce8\u610f\u4e8b\u9879\n\n- \u4e0d\u5efa\u8bae\u4e00\u5f00\u59cb\u5c31\u76f4\u63a5\u6279\u5904\u7406\u5927\u91cf\u6587\u4ef6, \u5efa\u8bae\u5148\u5c1d\u8bd5\u5355\u4e2a\u6587\u4ef6, \u786e\u4fdd\u914d\u7f6e\u6b63\u786e\n- \u53ef\u8bbe\u7f6e `--debug` \u53ca `--log_dir` \u6253\u5f00\u8c03\u8bd5\u6a21\u5f0f\u5e76\u4fdd\u5b58\u65e5\u5fd7, \u4ee5\u4fbf\u6392\u67e5\u95ee\u9898\n- \u4e0a\u62a5 Issue \u65f6\u8bf7\u63d0\u4f9b\u8be6\u7ec6\u7684\u914d\u7f6e\u4fe1\u606f\u53ca\u65e5\u5fd7, \u4ee5\u4fbf\u66f4\u5feb\u5b9a\u4f4d\u95ee\u9898\n\n\u6587\u4ef6\u9650\u5236:\n\n- \u89c6\u9891\u6587\u4ef6\u652f\u6301\u683c\u5f0f\u53d6\u51b3\u4e8e ffmpeg, \u5e38\u89c1\u683c\u5f0f\u5982 mp4, mkv, webm \u7b49\u5747\u652f\u6301\n- \u5b57\u5e55\u6587\u4ef6\u4ec5\u652f\u6301 srt \u683c\u5f0f, \u5176\u4ed6\u683c\u5f0f\u53ef\u4f7f\u7528 ffmpeg \u8f6c\u6362\u4e3a srt\n- \u786e\u4fdd\u5b57\u5e55\u6587\u4ef6\u7f16\u7801\u4e3a UTF-8, \u5426\u5219\u53ef\u80fd\u5bfc\u81f4\u4e71\u7801\u95ee\u9898\n- \u82e5\u4ec5\u6307\u5b9a\u89c6\u9891, \u5fc5\u987b\u5f00\u542f ASR; \u82e5\u4ec5\u6307\u5b9a\u5b57\u5e55, \u65e0\u6cd5\u5f00\u542f ASR; \u82e5\u540c\u65f6\u6307\u5b9a, \u5219\u4e8c\u8005\u6570\u91cf\u548c\u987a\u5e8f\u5fc5\u987b\u4e00\u4e00\u5bf9\u5e94\n\nNPU \u76f8\u5173:\n\n- \u4f7f\u7528 NPU \u65f6, `--device` \u4fdd\u6301\u4e3a `cuda` \u5373\u53ef, \u65e0\u9700\u4fee\u6539\n\nLLM \u76f8\u5173:\n\n- `--use_html` \u9009\u9879\u5f53\u539f\u6587\u5b57\u5e55\u5206\u53e5\u826f\u597d\u65f6\u63a8\u8350\u5f00\u542f(\u5373\u6bcf\u884c\u90fd\u57fa\u672c\u4ee5\u53e5\u53f7\u7ed3\u5c3e), \u5426\u5219\u63a8\u8350\u5173\u95ed. \u4f7f\u7528 whisper \u8f6c\u8bd1\u82f1\u6587\u89c6\u9891\u751f\u6210\u7684\u5b57\u5e55\u4e00\u822c\u90fd\u7b26\u5408\u6b64\u8981\u6c42.\n\n## \u2699\ufe0f \u5168\u90e8\u914d\u7f6e\u53c2\u6570\n\n```bash\noptions:\n -h, --help show this help message and exit\n -c CONFIG, --config CONFIG\n \u52a0\u8f7d JSON \u6216 YAML \u683c\u5f0f\u7684\u914d\u7f6e\u6587\u4ef6 (default: None)\n -gc, --gen-config \u751f\u6210\u9ed8\u8ba4\u914d\u7f6e\u6587\u4ef6 (default: False)\n -v, --version show program's version number and exit\n\nGeneral:\n --input_videos INPUT_VIDEOS [INPUT_VIDEOS ...], --input-videos INPUT_VIDEOS [INPUT_VIDEOS ...]\n \u5f85\u5904\u7406\u7684\u89c6\u9891\u6587\u4ef6 (default: [])\n --input_subtitles INPUT_SUBTITLES [INPUT_SUBTITLES ...], --input-subtitles INPUT_SUBTITLES [INPUT_SUBTITLES ...]\n \u5f85\u5904\u7406\u7684\u5b57\u5e55\u6587\u4ef6 (srt \u683c\u5f0f) (default: [])\n --asr [ASR] \u8bed\u97f3\u8bc6\u522b\u5f00\u5173 (default: True)\n --translate [TRANSLATE]\n \u7ffb\u8bd1\u5f00\u5173 (default: True)\n --tts [TTS] \u8bed\u97f3\u5408\u6210\u5f00\u5173 (default: True)\n --debug [DEBUG] \u8c03\u8bd5\u6a21\u5f0f (default: False)\n --log_dir LOG_DIR, --log-dir LOG_DIR\n \u65e5\u5fd7\u76ee\u5f55, \u82e5\u4e3a\u7a7a\u5219\u4e0d\u4fdd\u5b58 (default: None)\n\nASR:\n --model MODEL whisper \u6a21\u578b\u578b\u53f7 (default: turbo)\n --model_dir MODEL_DIR, --model-dir MODEL_DIR\n whisper \u6a21\u578b\u5b58\u50a8\u76ee\u5f55 (default: None)\n --device DEVICE \u7528\u4e8e\u8fd0\u884c ASR \u76f8\u5173\u6a21\u578b\u7684\u786c\u4ef6\u8bbe\u5907 (default: cuda)\n --align [ALIGN] \u8fdb\u884c\u8bcd\u6c47\u5bf9\u9f50 (default: False)\n --diarize [DIARIZE] \u8fdb\u884c\u8bf4\u8bdd\u8005\u5206\u79bb (default: False)\n --hf_token HF_TOKEN, --hf-token HF_TOKEN\n Hugging Face token. \u7528\u4e8e\u4e0b\u8f7d\u9700\u540c\u610f\u7528\u6237\u534f\u8bae\u7684\u67d0\u4e9b\u6a21\u578b (default: )\n\nTranslate:\n --target_lang TARGET_LANG, --target-lang TARGET_LANG\n \u76ee\u6807\u8bed\u8a00 (default: \u7b80\u4f53\u4e2d\u6587)\n --base_url BASE_URL, --base-url BASE_URL\n LLM API \u5730\u5740 (default: https://api.openai.com/v1)\n --api_key API_KEY, --api-key API_KEY\n LLM API key (default: )\n --llm_model LLM_MODEL, --llm-model LLM_MODEL\n LLM \u6a21\u578b (default: )\n --use_html [USE_HTML], --use-html [USE_HTML]\n \u4f7f\u7528 HTML \u6807\u8bb0\u8bf7\u6c42\u591a\u884c\u7ffb\u8bd1. \u5f53\u5b57\u5e55\u5206\u53e5\u826f\u597d\u65f6\u63a8\u8350\u5f00\u542f, \u5426\u5219\u63a8\u8350\u5173\u95ed (default: False)\n --remove_ellipsis [REMOVE_ELLIPSIS], --remove-ellipsis [REMOVE_ELLIPSIS]\n \u79fb\u9664\u5b57\u5e55\u884c\u5c3e\u7684\u7701\u7565\u53f7 (default: False)\n --llm_req_rate LLM_REQ_RATE, --llm-req-rate LLM_REQ_RATE\n LLM \u8bf7\u6c42\u901f\u7387 (r/s) (default: 5)\n --batch_size BATCH_SIZE, --batch-size BATCH_SIZE\n \u5355\u6b21\u8bf7\u6c42 LLM \u7ffb\u8bd1\u7684\u6700\u5927\u884c\u6570. \u8fc7\u5927\u4f1a\u63d0\u9ad8\u5931\u8d25\u7387 (default: 10)\n\nTTS:\n --voice VOICE TTS \u58f0\u97f3. \u53c2\u8003 https://gist.github.com/BettyJJ/17cbaa1de96235a7f5773b8690a20462 (default: zh-CN-YunyangNeural)\n --tts_req_rate TTS_REQ_RATE, --tts-req-rate TTS_REQ_RATE\n TTS \u8bf7\u6c42\u901f\u7387 (r/10s) (default: 3)\n --audio_format AUDIO_FORMAT, --audio-format AUDIO_FORMAT\n \u97f3\u9891\u8f93\u51fa\u683c\u5f0f (default: aac)\n --add_track [ADD_TRACK], --add-track [ADD_TRACK]\n \u6dfb\u52a0 TTS \u97f3\u9891\u5230\u89c6\u9891 (default: True)\n --track_title TRACK_TITLE, --track-title TRACK_TITLE\n TTS \u97f3\u8f68\u6807\u9898. \u9ed8\u8ba4\u4f7f\u7528 voice \u540d\u79f0 (default: None)\n\nSubtitle:\n --soft [SOFT] \u6dfb\u52a0\u5b57\u5e55\u65b9\u5f0f (True: \u8f6f / False: \u786c) (\u76ee\u524d\u4ec5\u652f\u6301\u8f6f\u5b57\u5e55) (default: True)\n --add_asr_sub [ADD_ASR_SUB], --add-asr-sub [ADD_ASR_SUB]\n \u5c06\u8bed\u97f3\u8bc6\u522b\u5b57\u5e55\u6dfb\u52a0\u5230\u89c6\u9891 (default: True)\n --asr_sub_title ASR_SUB_TITLE, --asr-sub-title ASR_SUB_TITLE\n \u8bed\u97f3\u8bc6\u522b\u5b57\u5e55\u6807\u9898 (default: None)\n --asr_sub_style ASR_SUB_STYLE, --asr-sub-style ASR_SUB_STYLE\n \u8bed\u97f3\u8bc6\u522b\u5b57\u5e55\u6837\u5f0f. \u53c2\u8003 https://github.com/yuanshanhua/video-dubbing/blob/main/docs/subtitle_style_zh.md (default: None)\n --add_trans_sub [ADD_TRANS_SUB], --add-trans-sub [ADD_TRANS_SUB]\n \u5c06\u8bd1\u6587\u5b57\u5e55\u6dfb\u52a0\u5230\u89c6\u9891 (default: True)\n --trans_sub_title TRANS_SUB_TITLE, --trans-sub-title TRANS_SUB_TITLE\n \u8bd1\u6587\u5b57\u5e55\u6807\u9898 (default: None)\n --trans_sub_style TRANS_SUB_STYLE, --trans-sub-style TRANS_SUB_STYLE\n \u8bd1\u6587\u5b57\u5e55\u6837\u5f0f (default: None)\n --add_bilingual_sub [ADD_BILINGUAL_SUB], --add-bilingual-sub [ADD_BILINGUAL_SUB]\n \u5c06\u53cc\u8bed\u5b57\u5e55\u6dfb\u52a0\u5230\u89c6\u9891 (default: True)\n --bilingual_sub_title BILINGUAL_SUB_TITLE, --bilingual-sub-title BILINGUAL_SUB_TITLE\n \u53cc\u8bed\u5b57\u5e55\u6807\u9898 (default: None)\n --bilingual_sub_style BILINGUAL_SUB_STYLE, --bilingual-sub-style BILINGUAL_SUB_STYLE\n \u53cc\u8bed\u5b57\u5e55\u6837\u5f0f (default: None)\n```\n\n## \ud83d\ude4f \u81f4\u8c22\n\n\u672c\u9879\u76ee\u57fa\u4e8e\u4ee5\u4e0b\u4f18\u79c0\u5f00\u6e90\u9879\u76ee:\n\n- [OpenAI-Whisper](https://github.com/openai/whisper)\n- [FFmpeg](https://ffmpeg.org/)\n- [whisperX](https://github.com/m-bain/whisperX)\n- [edge-tts](https://github.com/rany2/edge-tts)\n- [aiolimiter](https://github.com/mjpieters/aiolimiter)\n",
"bugtrack_url": null,
"license": null,
"summary": "An AI powered tool to execute end-to-end video dubbing.",
"version": "1.0.0",
"project_urls": {
"github": "https://github.com/yuanshanhua/video-dubbing"
},
"split_keywords": [
"ai",
" dubbing",
" llm",
" openai",
" video",
" whisper"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "c4bfa10bb0e8ebe23c1180aad66fa65b50e95b639b984d73df8af267983ee7eb",
"md5": "e9875c982f588202d1d4575b09fad87c",
"sha256": "f38629a725f469ea950c1fe57f522e99450e61063e5e617971725beb1b26a70e"
},
"downloads": -1,
"filename": "video_dubbing-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "e9875c982f588202d1d4575b09fad87c",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "==3.11",
"size": 50336,
"upload_time": "2025-03-10T19:39:05",
"upload_time_iso_8601": "2025-03-10T19:39:05.621291Z",
"url": "https://files.pythonhosted.org/packages/c4/bf/a10bb0e8ebe23c1180aad66fa65b50e95b639b984d73df8af267983ee7eb/video_dubbing-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f1a0d48cce492e5b591af9c32321b76dba0043acb38cc09936d61019d0ce53bb",
"md5": "4dfa1b20cceb49d6d203968eaefc59e6",
"sha256": "83011e41fc67ba16b83c644e47e5cee8a3a46a716e82dedf3437f04ba83f9b2f"
},
"downloads": -1,
"filename": "video_dubbing-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "4dfa1b20cceb49d6d203968eaefc59e6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "==3.11",
"size": 177459,
"upload_time": "2025-03-10T19:39:08",
"upload_time_iso_8601": "2025-03-10T19:39:08.183866Z",
"url": "https://files.pythonhosted.org/packages/f1/a0/d48cce492e5b591af9c32321b76dba0043acb38cc09936d61019d0ce53bb/video_dubbing-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-03-10 19:39:08",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "yuanshanhua",
"github_project": "video-dubbing",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "video-dubbing"
}