# 策展 · X (Twitter) 🔥🔥🔥

> 作者：Kevin Lin (@KevinQHLin) · 平台：X (Twitter) · 日期：2026-05-15

> 原始來源：https://x.com/KevinQHLin/status/2055023321218154619

## 中文摘要

Violin推出開源影片翻譯工具，打破語言障礙。

Violin是由Shang Zhu、Kevin Qinghong Lin（Oxford）和James Zou開發的開源影片翻譯技能，利用Together API整合語音辨識、大型語言模型和語音合成，提供高品質多語言翻譯。該工具針對網路影片語言分佈不均的問題——例如前250大YouTube頻道66%影片為英文、西班牙文僅15%——設計，旨在讓全球觀眾更容易存取優質內容如講座、演講和播客。

**核心特點**
- 高品質多語言ASR（語音辨識）、翻譯和TTS（語音合成），支援33種目標語言，其中16種配備Cartesia Sonic 3和ElevenLabs的母語者聲音。
- 個人化翻譯與聲音選擇，例如將學術演講轉換為兒童易懂版本。
- 影片內Q&A功能，使用者可詢問影片內容細節、摘要或特定主題，答案基於字幕和取樣畫面。
- 6種風格設定檔（實驗性）：standard（標準忠實翻譯）、kids（兒童版簡易語言）、academic（正式學術）、casual（口語化）、storyteller（敘事戲劇化）、news（新聞播報風）。
- 自然語言聲音選擇器，使用LLM從目錄挑選符合描述的聲音。
- 完全開源MIT授權，支援Web app、CLI和Agent技能。

**運作流程**
Violin分三階段處理影片：
1. 使用ffmpeg提取音訊（16 kHz WAV），再透過Together的Whisper Large v3進行多語言逐字時間戳記轉錄。
2. LLM（預設DeepSeek V4 Pro）翻譯每個片段，使用者可輸入翻譯規則確保忠實度，並依風格設定檔調整提示。
3. TTS（預設Cartesia Sonic 3）合成翻譯語音，支援韓文、荷蘭文、義大利文、中文等母語聲音；不允許聲音克隆，預設低音量疊加原聲，並使用ffmpeg速度對齊影片、凍結畫面備用、單次AAC編碼輸出MP4與可選SRT字幕。

影片聊天模組使用視覺語言模型（如Qwen3.5-397B-A17B）處理最近畫面與字幕脈絡，提供基於音訊和畫面的自由問答。

**快速入門**
無需安裝即可試用[即時示範](https://www.violin-ai.com)，上傳短片即可數分鐘內取得配音影片。

本地執行需Python 3.10+與ffmpeg：
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh   # 安裝 uv（若無）
uv tool install violin                            # 推薦：快速隔離環境
# 或：pip install violin                          # 安裝至當前 Python 環境

export TOGETHER_API_KEY=...                       # 從 https://api.together.ai 取得，加入 ~/.zshrc 永久化
```

三種使用方式：

**1. CLI單檔翻譯**：
```bash
violin lecture.mp4 lecture_zh.mp4 --language Chinese
```

**2. Web app（REST API + 瀏覽器UI）**：
```bash
violin-api
# → http://127.0.0.1:8000           (瀏覽器UI)
# → http://127.0.0.1:8000/docs      (互動API文件)
```

**3. Claude Code技能**：
```bash
violin --install-skill          # 單次：複製技能至 ~/.claude/skills/
claude
> please use the violin skill to translate path/to/video.mp4 into Chinese
```

從來源建置（修改管線）：
```bash
git clone https://github.com/shang-zhu/violin.git
cd violin
uv sync
cp .env.example .env             # 填入 TOGETHER_API_KEY
uv run main.py lecture.mp4 lecture_zh.mp4 --language Chinese
```
可編輯安裝（本地變更即時生效）：
```bash
uv tool uninstall violin     # 若安裝PyPI版
uv tool install --editable .
```

**CLI進階用法**
```bash
# 基本
violin lecture.mp4 lecture_es.mp4 --language Spanish

# 指定風格
violin talk.mp4 talk_zh.mp4 --language Chinese --style kids

# 指定聲音
violin lecture.mp4 lecture_fr.mp4 --language French --voice "french narrator man"

# 略過SRT
violin lecture.mp4 lecture_ja.mp4 --language Japanese --no-subtitles

# 全替換（無原音）
violin lecture.mp4 lecture_ko.mp4 --language Korean --no-voiceover

# 自訂配置（切換OpenAI/ElevenLabs）
violin lecture.mp4 lecture_it.mp4 --language Italian --config config/other_api.yaml
```

CLI旗標：
- `--language` / `-l`：目標語言（必填，如`Spanish`、`Japanese`）。
- `--voice` / `-v`：TTS聲音，預設語言主要母語聲。
- `--source-language`：來源語言提示，預設`auto-detect`。
- `--no-subtitles`：略過SRT。
- `--voiceover` / `--no-voiceover`：預設疊加原音或全替換。
- `--style` / `-s`：風格（如`--style list`列出）。
- `--config` / `-c`：YAML覆蓋檔，深度合併`config/default.yaml`。
- `--timings-out`：輸出時間與成本JSON。

**Web app與REST API**
```bash
violin-api                              # 開發模式
violin-api --host 0.0.0.0 --port 8080   # 全域綁定
violin-api --config config/prod.yaml    # 生產設定
```
核心流程：`POST /jobs`啟動、`GET /jobs/{id}`輪詢、`GET /jobs/{id}/video`與`/srt`下載、`POST /jobs/{id}/chat`影片Q&A。完整規格見`/docs`。

範例：
```bash
# 提交
JOB=$(curl -s -X POST http://localhost:8000/jobs \
  -F "file=@lecture.mp4" \
  -F "language=Spanish" \
  -F "style=academic" | jq -r .id)

# 輪詢
curl -s http://localhost:8000/jobs/$JOB | jq '{status, progress}'

# 下載
curl -OJ http://localhost:8000/jobs/$JOB/video
curl -OJ http://localhost:8000/jobs/$JOB/srt
```
工作資料存於`jobs/{id}/`，`api.job_ttl_hours`設定自動刪除（示範版24小時）。

生產部署含`config/prod.yaml`、`Dockerfile`、`docker-compose.yml`、`Caddyfile`：填`.env`後`docker compose up -d --build`即可自動HTTPS。

**模組化配置**
透過YAML覆蓋預設（僅改動鍵值，深度合併`config/default.yaml`）：
```yaml
# config/default.yaml 示例
models:
  transcription:
    provider: together                  # together | openai
    model: openai/whisper-large-v3      # together → openai/whisper-large-v3 | openai → whisper-1
  translation:
    provider: together                  # together | openai
    model: deepseek-ai/DeepSeek-V4-Pro  # together → deepseek-ai/DeepSeek-V4-Pro | openai → gpt-5.5
  tts:
    provider: together                  # together | elevenlabs | openai
    model: cartesia/sonic-3             # together → cartesia/sonic-3 | elevenlabs → eleven_v3 | openai → tts-1-hd
```
環境變數：
| 變數 | 必要時機 | 描述 |
|------|----------|------|
| `TOGETHER_API_KEY` | 預設配置全階段 | Together AI金鑰 |
| `OPENAI_API_KEY` | 使用`openai`提供者 | Whisper-1、GPT、tts-1 |
| `ELEVENLABS_API_KEY` | TTS用`elevenlabs` | ElevenLabs金鑰 |
| `CORS_ORIGINS` | 可選 | 允許來源（預設`*`） |

僅需使用提供者的金鑰即可，全OpenAI或ElevenLabs部署皆可。

**支援語言**
33種目標語言，按母語人口排序。16種有專屬母語聲音，其餘fallback至英文多語目錄：
| 語言 | Cartesia母語聲（男/女） | ElevenLabs母語聲（男/女） |
|------|-------------------------|---------------------------|
| Chinese | chinese commercial man / chinese female conversational | Lin / Lingyue |
| Spanish | spanish narrator man / spanish narrator lady | Carlos / Valeria |
| English | tutorial man / helpful woman | Adam / Sarah |
| Hindi | hindi narrator man / hindi narrator woman | Yatin / Madhusmita |
| Arabic | middle eastern woman | Faris / Haneen |
| Portuguese | friendly brazilian man / pleasant brazilian lady | Medeiros / Luna |
| Russian | russian narrator man 1 / russian narrator woman | Ivo / Xenia |
| Japanese | japanese male conversational / japanese woman conversational | Shohei / Maiko |
| Turkish | turkish narrator man / turkish calm man | Sinan / Aura |
| German | german reporter man / german conversational woman | Daniel / Sina |
| Korean | korean narrator man / korean calm woman | Joon-ho / Soo |
| French | french narrator man / french narrator lady | Lior / Virginie |
| Italian | italian narrator man / italian narrator woman | Raffaele / Chiara |
| Polish | polish confident man / polish narrator woman | Gregor / Jola |
| Dutch | dutch confident man / dutch man | Ronald / Jolanda |
| Swedish | swedish narrator man / swedish calm lady | Andreas / Louise |

後17種fallback語言（依母語人口）：Vietnamese、Tamil、Indonesian、Malay、Ukrainian、Romanian、Thai、Greek、Hungarian、Catalan、Czech、Bulgarian、Danish、Slovak、Croatian、Finnish、Norwegian。

**風格設定檔細節**
| 風格 | 語調 | TTS速度 | 情緒 |
|------|------|---------|------|
| `standard` | 忠實翻譯、自然聲 | 1.0× | — |
| `kids` | 改寫為7歲兒童語言 | 1.0× | excited |
| `academic` | 正式、保留術語 | 0.95× | calm |
| `casual` | 俚語、縮寫、親切 | 1.1× | content |
| `storyteller` | 生動戲劇 | 0.9× | enthusiastic |
| `news` | 簡潔宣告、播報風 | 1.0× | neutral |

自訂編輯`prompts/styles.yaml`，CLI用`violin --style list`查看。

**開發與社群**
- GitHub：[https://github.com/shang-zhu/violin](https://github.com/shang-zhu/violin)
- 部落格：[https://www.together.ai/blog/violin-open-source-translation-skill](https://www.together.ai/blog/violin-open-source-translation-skill)（發布於2026/5/14）
- 聯絡：heyviolinai@gmail.com
歡迎PR、issue或討論，強調開放合作加速影片語言無國界化。

感謝回饋：Martijn Bartelds、Yongchan Kwon、Federico Bianchi、Kaitlyn Zhou；開源基礎：Whisper、DeepSeek、Qwen、Cartesia；特別感謝nutlope、Percy Liang提供影片與意見；建置於Together AI、FastAPI、ffmpeg等。由KevinQHLin（Kevin Lin）和ShangZhu18開發，james_y_zou指導，所有功能由togethercompute提供。

**免責聲明**
使用者負責內容版權與法律相容，示範app上傳影片24小時後刪除。此為個人開源專案，非Together AI產品，適合Creative Commons、公共領域或授權內容。

## 標籤

開源專案, AIGC, TTS, Violin, Together AI, Cartesia
