KrillinAI API扩展指南:打造智能视频翻译与配音工作流
概述
KrillinAI是一个基于AI大模型的视频翻译和配音工具,提供专业级的多语言翻译服务。通过其强大的API接口,开发者可以轻松集成视频翻译、语音识别、字幕生成和配音功能到自己的应用中。本文将深入解析KrillinAI的API架构、核心功能和扩展方式,帮助开发者构建自定义的视频处理工作流。
API架构概览
KrillinAI采用微服务架构设计,主要包含以下核心组件:
核心API端点
| 端点 | 方法 | 功能描述 | 参数 |
|---|---|---|---|
/api/capability/subtitleTask | POST | 创建字幕翻译任务 | JSON请求体 |
/api/capability/subtitleTask | GET | 获取任务状态 | taskId查询参数 |
/api/file | POST | 文件上传 | multipart/form-data |
/api/file/*filepath | GET | 文件下载 | 文件路径参数 |
字幕任务API详解
创建字幕任务
// 请求数据结构
type StartVideoSubtitleTaskReq struct {
AppId uint32 `json:"app_id"`
Url string `json:"url"`
OriginLanguage string `json:"origin_lang"`
TargetLang string `json:"target_lang"`
Bilingual uint8 `json:"bilingual"`
TranslationSubtitlePos uint8 `json:"translation_subtitle_pos"`
ModalFilter uint8 `json:"modal_filter"`
Tts uint8 `json:"tts"`
TtsVoiceCode string `json:"tts_voice_code"`
TtsVoiceCloneSrcFileUrl string `json:"tts_voice_clone_src_file_url"`
Replace []string `json:"replace"`
Language string `json:"language"`
EmbedSubtitleVideoType string `json:"embed_subtitle_video_type"`
VerticalMajorTitle string `json:"vertical_major_title"`
VerticalMinorTitle string `json:"vertical_minor_title"`
OriginLanguageWordOneLine int `json:"origin_language_word_one_line"`
}
参数说明表
| 参数 | 类型 | 必填 | 说明 | 示例值 |
|---|---|---|---|---|
url | string | 是 | 视频URL或本地文件路径 | "https://example.com/video.mp4" |
origin_lang | string | 是 | 源语言代码 | "zh", "en", "ja" |
target_lang | string | 是 | 目标语言代码 | "en", "zh", "ja" |
bilingual | uint8 | 否 | 是否生成双语字幕 | 1(是), 2(否) |
tts | uint8 | 否 | 是否启用配音 | 1(是), 2(否) |
tts_voice_code | string | 否 | 配音声音代码 | "zh-CN-XiaoxiaoNeural" |
replace | []string | 否 | 词汇替换列表 | ["AI->人工智能","GPU->图形处理器"] |
embed_subtitle_video_type | string | 否 | 字幕嵌入类型 | "none", "horizontal", "vertical", "all" |
任务状态查询
// 响应数据结构
type GetVideoSubtitleTaskResData struct {
TaskId string `json:"task_id"`
ProcessPercent uint8 `json:"process_percent"`
VideoInfo *VideoInfo `json:"video_info"`
SubtitleInfo []*SubtitleInfo `json:"subtitle_info"`
TargetLanguage string `json:"target_language"`
SpeechDownloadUrl string `json:"speech_download_url"`
}
配置系统扩展
配置文件结构
KrillinAI使用TOML格式的配置文件,支持多种服务提供商:
[app]
segment_duration = 5
transcribe_parallel_num = 1
translate_parallel_num = 3
proxy = "http://proxy.example.com:8080"
[server]
host = "127.0.0.1"
port = 8888
[llm]
base_url = "https://api.openai.com/v1"
api_key = "your-openai-api-key"
model = "gpt-4o-mini"
[transcribe]
provider = "fasterwhisper"
enable_gpu_acceleration = false
[transcribe.fasterwhisper]
model = "large-v2"
[tts]
provider = "aliyun"
[tts.aliyun.oss]
access_key_id = "your-access-key-id"
access_key_secret = "your-access-key-secret"
bucket = "your-bucket-name"
[tts.aliyun.speech]
access_key_id = "your-access-key-id"
access_key_secret = "your-access-key-secret"
app_key = "your-app-key"
支持的服务提供商
语音识别服务
| 提供商 | 平台支持 | 模型选项 | 类型 |
|---|---|---|---|
| OpenAI Whisper | 全平台 | whisper-1 | 云端 |
| FasterWhisper | Windows/Linux | tiny/medium/large-v2 | 本地 |
| WhisperKit | macOS (M系列) | large-v2 | 本地 |
| WhisperCpp | 全平台 | large-v2 | 本地 |
| 阿里云ASR | 全平台 | - | 云端 |
大语言模型服务
支持所有符合OpenAI API规范的云/本地大语言模型服务,包括:
- OpenAI GPT系列
- Google Gemini
- DeepSeek
- 通义千问
- 本地部署的开源模型
文本转语音服务
- OpenAI TTS
- 阿里云语音服务
API集成示例
Python客户端示例
import requests
import json
import time
class KrillinAIClient:
def __init__(self, base_url="http://localhost:8888"):
self.base_url = base_url
def create_subtitle_task(self, video_url, source_lang, target_lang, **kwargs):
"""创建字幕翻译任务"""
payload = {
"url": video_url,
"origin_lang": source_lang,
"target_lang": target_lang,
"bilingual": kwargs.get("bilingual", 1),
"tts": kwargs.get("tts", 2),
"replace": kwargs.get("replace", []),
"embed_subtitle_video_type": kwargs.get("embed_type", "none")
}
response = requests.post(
f"{self.base_url}/api/capability/subtitleTask",
json=payload,
headers={"Content-Type": "application/json"}
)
if response.status_code == 200:
return response.json()["data"]["task_id"]
else:
raise Exception(f"任务创建失败: {response.text}")
def get_task_status(self, task_id):
"""获取任务状态"""
response = requests.get(
f"{self.base_url}/api/capability/subtitleTask",
params={"taskId": task_id}
)
if response.status_code == 200:
return response.json()["data"]
else:
raise Exception(f"状态查询失败: {response.text}")
def wait_for_completion(self, task_id, poll_interval=5):
"""等待任务完成"""
while True:
status = self.get_task_status(task_id)
progress = status["process_percent"]
print(f"任务进度: {progress}%")
if progress >= 100:
return status
time.sleep(poll_interval)
# 使用示例
client = KrillinAIClient()
# 创建翻译任务
task_id = client.create_subtitle_task(
video_url="https://example.com/video.mp4",
source_lang="en",
target_lang="zh",
bilingual=1,
tts=1,
tts_voice_code="zh-CN-XiaoxiaoNeural",
replace=["AI->人工智能", "ML->机器学习"]
)
# 等待任务完成
result = client.wait_for_completion(task_id)
print("任务完成!")
print(f"字幕文件: {result['subtitle_info']}")
print(f"配音文件: {result['speech_download_url']}")
JavaScript/Node.js客户端示例
const axios = require('axios');
class KrillinAIClient {
constructor(baseURL = 'http://localhost:8888') {
this.client = axios.create({ baseURL });
}
async createSubtitleTask(videoUrl, sourceLang, targetLang, options = {}) {
const payload = {
url: videoUrl,
origin_lang: sourceLang,
target_lang: targetLang,
bilingual: options.bilingual || 1,
tts: options.tts || 2,
replace: options.replace || [],
embed_subtitle_video_type: options.embedType || 'none'
};
const response = await this.client.post('/api/capability/subtitleTask', payload);
return response.data.data.task_id;
}
async getTaskStatus(taskId) {
const response = await this.client.get('/api/capability/subtitleTask', {
params: { taskId }
});
return response.data.data;
}
async waitForCompletion(taskId, interval = 5000) {
return new Promise((resolve) => {
const checkStatus = async () => {
const status = await this.getTaskStatus(taskId);
console.log(`任务进度: ${status.process_percent}%`);
if (status.process_percent >= 100) {
resolve(status);
} else {
setTimeout(checkStatus, interval);
}
};
checkStatus();
});
}
}
// 使用示例
async function main() {
const client = new KrillinAIClient();
try {
const taskId = await client.createSubtitleTask(
'https://example.com/video.mp4',
'en',
'zh',
{
bilingual: 1,
tts: 1,
ttsVoiceCode: 'zh-CN-XiaoxiaoNeural',
replace: ['AI->人工智能', 'ML->机器学习']
}
);
console.log(`任务创建成功,ID: ${taskId}`);
const result = await client.waitForCompletion(taskId);
console.log('任务完成!', result);
} catch (error) {
console.error('任务处理失败:', error.message);
}
}
main();
高级功能扩展
自定义词汇替换系统
KrillinAI支持智能词汇替换,确保专业术语的准确翻译:
// 自定义替换规则示例
replaceRules := []string{
"GPU->图形处理器",
"AI->人工智能",
"ML->机器学习",
"API->应用程序接口",
"CPU->中央处理器",
"RAM->随机存取存储器",
"SSD->固态硬盘",
"IoT->物联网",
"VR->虚拟现实",
"AR->增强现实"
}
// 在API请求中传递
payload := map[string]interface{}{
"url": "https://example.com/tech-video.mp4",
"origin_lang": "en",
"target_lang": "zh",
"replace": replaceRules,
// ... 其他参数
}
多视频格式支持
KrillinAI通过yt-dlp支持多种视频格式和来源:
| 视频来源 | 支持格式 | 示例URL格式 |
|---|---|---|
| YouTube | MP4, WebM | https://www.youtube.com/watch?v=VIDEO_ID |
| Bilibili | FLV, MP4 | https://www.bilibili.com/video/BVxxxxxx |
| 本地文件 | MP4, AVI, MOV | local:/path/to/video.mp4 |
| 其他平台 | 多种格式 | 支持yt-dlp的所有平台 |
批量处理扩展
def batch_process_videos(video_list, source_lang, target_lang):
"""批量处理多个视频"""
results = []
for video_info in video_list:
try:
task_id = client.create_subtitle_task(
video_url=video_info['url'],
source_lang=source_lang,
target_lang=target_lang,
bilingual=video_info.get('bilingual', 1),
tts=video_info.get('tts', 2)
)
results.append({
'video': video_info['name'],
'task_id': task_id,
'status': 'processing'
})
except Exception as e:
results.append({
'video': video_info['name'],
'error': str(e),
'status': 'failed'
})
return results
错误处理与监控
常见错误代码
| 错误代码 | 描述 | 解决方案 |
|---|---|---|
| -1 | 参数错误 | 检查请求参数格式和必填字段 |
| -2 | 配置错误 | 验证服务配置是否正确 |
| -3 | 网络错误 | 检查网络连接和代理设置 |
| -4 | 服务不可用 | 目标服务可能暂时不可用 |
| -5 | 文件处理错误 | 检查文件格式和权限 |
监控集成示例
from prometheus_client import Counter, Gauge, start_http_server
# 定义监控指标
TASKS_CREATED = Counter('krillinai_tasks_created', 'Total tasks created')
TASKS_COMPLETED = Counter('krillinai_tasks_completed', 'Total tasks completed')
TASKS_FAILED = Counter('krillinai_tasks_failed', 'Total tasks failed')
PROCESSING_TIME = Gauge('krillinai_processing_time_seconds', 'Task processing time')
class MonitoredKrillinAIClient(KrillinAIClient):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# 启动Prometheus指标服务器
start_http_server(8000)
def create_subtitle_task(self, *args, **kwargs):
TASKS_CREATED.inc()
start_time = time.time()
try:
result = super().create_subtitle_task(*args, **kwargs)
PROCESSING_TIME.set(time.time() - start_time)
TASKS_COMPLETED.inc()
return result
except Exception as e:
TASKS_FAILED.inc()
raise e
性能优化建议
并发处理配置
[app]
segment_duration = 5
transcribe_parallel_num = 2 # 语音识别并发数
translate_parallel_num = 4 # 翻译并发数
transcribe_max_attempts = 3
translate_max_attempts = 3
max_sentence_length = 70
内存和GPU优化
[transcribe]
provider = "fasterwhisper"
enable_gpu_acceleration = true # 启用GPU加速
[transcribe.fasterwhisper]
model = "medium" # 平衡精度和性能
安全最佳实践
API密钥管理
import os
from dotenv import load_dotenv
load_dotenv()
class SecureKrillinAIClient:
def __init__(self):
self.config = {
'openai_api_key': os.getenv('OPENAI_API_KEY'),
'aliyun_access_key': os.getenv('ALIYUN_ACCESS_KEY'),
'aliyun_secret_key': os.getenv('ALIYUN_SECRET_KEY')
}
def validate_config(self):
"""验证配置完整性"""
required_keys = ['openai_api_key']
missing_keys = [key for key in required_keys if not self.config.get(key)]
if missing_keys:
raise ValueError(f"缺少必要的配置项: {missing_keys}")
请求限流保护
from ratelimit import limits, sleep_and_retry
class RateLimitedClient(KrillinAIClient):
@sleep_and_retry
@limits(calls=10, period=60) # 每分钟最多10次调用
def create_subtitle_task(self, *args, **kwargs):
return super().create_subtitle_task(*args, **kwargs)
@sleep_and_retry
@limits(calls=30, period=60) # 每分钟最多30次状态查询
def get_task_status(self, *args, **kwargs):
return super().get_task_status(*args, **kwargs)
部署与扩展
Docker容器化部署
FROM golang:1.21-alpine
WORKDIR /app
COPY . .
RUN go mod download
RUN go build -o krillinai ./cmd/server
EXPOSE 8888
CMD ["./krillinai"]
Kubernetes部署配置
apiVersion: apps/v1
kind: Deployment
metadata:
name: krillinai
spec:
replicas: 3
selector:
matchLabels:
app: krillinai
template:
metadata:
labels:
app: krillinai
spec:
containers:
- name: krillinai
image: krillinai:latest
ports:
- containerPort: 8888
env:
- name: OPENAI_API_KEY
valueFrom:
secretKeyRef:
name: api-secrets
key: openai-api-key
resources:
requests:
memory: "1Gi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "1"
---
apiVersion: v1
kind: Service
metadata:
name: krillinai-service
spec:
selector:
app: krillinai
ports:
- protocol: TCP
port: 80
targetPort: 8888
总结
KrillinAI提供了强大而灵活的API接口,使开发者能够轻松集成专业的视频翻译和配音功能。通过本文的详细指南,您可以:
- 快速集成:使用提供的客户端示例快速接入现有系统
- 灵活配置:根据需求选择不同的语音识别和翻译服务提供商
- 扩展功能:利用词汇替换、批量处理等高级功能
- 确保稳定:通过监控和错误处理机制保证服务可靠性
- 优化性能:根据硬件资源调整并发配置和模型选择
无论您是构建内容创作平台、在线教育系统还是多媒体处理应用,KrillinAI都能为您提供专业级的视频翻译解决方案。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



