pyVideoTrans API接口开发实战

pyVideoTrans API接口开发实战

【免费下载链接】pyvideotrans Translate the video from one language to another and add dubbing. 将视频从一种语言翻译为另一种语言,并添加配音 【免费下载链接】pyvideotrans 项目地址: https://gitcode.com/gh_mirrors/py/pyvideotrans

本文深入探讨了pyVideoTrans视频翻译配音工具的RESTful API架构设计与实现,涵盖了API设计原则、核心接口实现、任务队列管理、状态监控机制以及安全性与性能优化策略。文章详细介绍了语音识别、字幕翻译和语音合成三大核心功能的接口设计,以及多级任务队列架构和实时状态监控的实现方式,为开发者提供了完整的API集成方案。

RESTful API架构设计与实现

pyVideoTrans作为一款功能强大的视频翻译配音工具,其API接口采用了现代化的RESTful架构设计,为开发者提供了稳定、高效、易用的接口服务。本节将深入探讨其API架构设计理念、核心实现机制以及最佳实践。

API架构设计原则

pyVideoTrans的API设计遵循了RESTful架构的核心原则,确保接口的规范性、可扩展性和易用性:

1. 资源导向设计

API将视频处理的核心功能抽象为独立的资源实体:

mermaid

2. 统一的响应格式

所有API接口采用标准化的JSON响应格式,确保客户端能够统一处理:

{
    "code": 0,          // 状态码:0-成功,非0-失败
    "msg": "ok",        // 状态消息
    "task_id": "uuid"   // 任务唯一标识
}
3. 异步任务处理机制

考虑到视频处理任务的耗时特性,API采用了异步任务处理模式:

mermaid

核心API接口实现

1. Flask应用初始化

API服务基于Flask框架构建,提供了灵活的配置和扩展能力:

from flask import Flask, request, jsonify
from waitress import serve

# 应用初始化
app = Flask(__name__, static_folder=TARGET_DIR)

# 配置信息
HOST = "127.0.0.1"
PORT = 9011
config.exec_mode = 'api'
2. 任务队列管理

API采用先进先出(FIFO)的任务队列机制,确保任务处理的顺序性:

# 全局任务队列
config.dubb_queue = []      # 配音任务队列
config.trans_queue = []     # 翻译任务队列  
config.prepare_queue = []   # 识别任务队列

# 任务状态管理
end_status_list = ['error', 'succeed', 'end', 'stop']
logs_status_list = ['logs']
3. 统一的参数验证机制

每个API接口都实现了严格的参数验证,确保输入数据的合法性:

def validate_tts_params(data):
    """验证TTS接口参数"""
    required_params = ['name', 'tts_type', 'voice_role', 'target_language_code']
    for param in required_params:
        if not data.get(param):
            return False, f"Missing required parameter: {param}"
    
    # 文件存在性检查
    name = data['name'].strip()
    if not name.endswith('.srt') and '\n' not in name:
        if not Path(name).exists():
            return False, f"File {name} does not exist"
    
    return True, "Validation passed"

接口详细设计与实现

1. 配音合成接口 (/tts)

该接口负责将字幕文件转换为语音文件,支持多种TTS引擎:

参数名类型必选描述示例值
namestring字幕文件路径或内容"path/to/subtitle.srt"
tts_typeintTTS引擎类型(0-11)0 (Edge-TTS)
voice_rolestring配音角色"zh-CN-YunjianNeural"
target_language_codestring目标语言代码"zh-cn"
@app.route('/tts', methods=['POST'])
def tts():
    data = request.json
    # 参数验证和处理
    name = data.get('name', '').strip()
    if not name:
        return jsonify({"code": 1, "msg": "参数name不能为空"})
    
    # 创建任务配置
    cfg = {
        "name": name,
        "voice_role": data.get("voice_role"),
        "target_language_code": data.get('target_language_code'),
        "tts_type": int(data.get('tts_type', 0)),
        # ... 其他参数
    }
    
    # 添加到任务队列
    obj = tools.format_video(name, None)
    trk = DubbingSrt(cfg)
    config.dubb_queue.append(trk)
    
    return jsonify({'code': 0, 'task_id': obj['uuid']})
2. 字幕翻译接口 (/translate_srt)

实现多语言字幕翻译功能,支持15种翻译引擎:

mermaid

3. 语音识别接口 (/recogn)

将音视频文件转换为字幕文件,支持多种识别模式:

@app.route('/recogn', methods=['POST'])
def recogn():
    data = request.json
    name = data.get('name', '').strip()
    
    if not Path(name).is_file():
        return jsonify({"code": 1, "msg": f"文件 {name} 不存在"})
    
    cfg = {
        "recogn_type": int(data.get('recogn_type', 0)),
        "split_type": data.get('split_type', 'all'),
        "model_name": data.get('model_name', 'tiny'),
        "is_cuda": bool(data.get('is_cuda', False)),
        "detect_language": data.get('detect_language', '')
    }
    
    # 语言支持验证
    is_allow = recognition.is_allow_lang(
        langcode=cfg['detect_language'],
        recogn_type=cfg['recogn_type']
    )

错误处理与状态管理

1. 统一错误码体系

API定义了清晰的错误码分类体系:

错误码含义描述
0成功任务提交成功
1参数错误缺少必要参数或参数格式错误
2文件错误文件不存在或无法访问
3队列满任务队列已满
4语言不支持目标语言不被支持
5API配置错误第三方服务配置缺失
2. 任务状态追踪

每个任务都有完整的生命周期状态管理:

mermaid

性能优化策略

1. 资源隔离与并发控制
# 为每个任务创建独立的处理环境
obj['target_dir'] = TARGET_DIR + f'/{obj["uuid"]}'
obj['cache_folder'] = config.TEMP_DIR + f'/{obj["uuid"]}'
Path(obj['target_dir']).mkdir(parents=True, exist_ok=True)
2. 内存管理优化

采用流式处理和分块处理机制,避免大文件内存溢出:

def process_large_file(file_path, chunk_size=1024*1024):
    """分块处理大文件"""
    with open(file_path, 'rb') as f:
        while chunk := f.read(chunk_size):
            yield process_chunk(chunk)
3. 缓存策略

实现智能缓存机制,避免重复处理:

def get_cache_key(task_config):
    """生成缓存键"""
    return hashlib.md5(
        f"{task_config['name']}_{task_config['tts_type']}_{task_config['voice_role']}".encode()
    ).hexdigest()

安全性与可靠性

1. 输入验证与过滤
def sanitize_filename(filename):
    """文件名安全处理"""
    # 移除路径遍历攻击
    filename = os.path.basename(filename)
    # 移除危险字符
    return re.sub(r'[^\w\.-]', '_', filename)
2. 超时与重试机制
def execute_with_timeout(command, timeout=300):
    """带超时的命令执行"""
    try:
        result = subprocess.run(
            command, 
            timeout=timeout, 
            capture_output=True, 
            text=True
        )
        return result.returncode == 0, result.stdout
    except subprocess.TimeoutExpired:
        return False, "Timeout exceeded"

扩展性与维护性

1. 模块化设计

API采用模块化架构,便于功能扩展和维护:

mermaid

2. 配置管理

支持动态配置加载和热更新:

def load_config():
    """加载API配置"""
    config_path = Path(ROOT_DIR) / 'api_config.json'
    if config_path.exists():
        with open(config_path, 'r', encoding='utf-8') as f:
            return json.load(f)
    return DEFAULT_CONFIG

通过以上架构设计和实现,pyVideoTrans的RESTful API提供了一个稳定、高效、易扩展的视频处理服务接口,为开发者集成视频翻译配音功能提供了强有力的技术支持。

语音识别/翻译/合成接口详解

pyVideoTrans 提供了完整的 API 接口体系,支持语音识别、字幕翻译和语音合成三大核心功能。这些接口基于 Flask 框架构建,采用 RESTful 设计风格,为开发者提供了灵活的视频翻译和配音集成方案。

接口架构概览

pyVideoTrans API 采用模块化设计,每个功能模块都有独立的接口端点:

mermaid

语音识别接口 (/recogn)

语音识别接口支持多种识别引擎,能够将音视频文件转换为字幕文本。

核心参数说明
参数名类型必选说明示例值
namestring音视频文件绝对路径"/path/to/video.mp4"
recogn_typeint识别引擎类型0 (faster-whisper)
model_namestring模型名称"tiny", "base", "small"
detect_languagestring检测语言代码"zh", "en", "ja"
split_typestring分割类型"all" (整体), "avg" (均等)
is_cudabooleanCUDA 加速true, false
支持的识别引擎
# 识别引擎类型枚举
RECOGN_ENGINES = {
    0: "faster-whisper",      # 本地快速 Whisper 模型
    1: "openai-whisper",      # OpenAI Whisper 本地模型
    2: "Google识别API",       # Google 云端识别
    3: "zh_recogn",           # 中文专用识别
    4: "豆包模型识别",        # 字节跳动豆包模型
    5: "自定义识别API",       # 自定义 API 接口
    6: "智能AI识别API"        # 智能AI云端 API
}
请求示例
import requests
import json

def recognize_audio():
    """语音识别接口调用示例"""
    url = "http://127.0.0.1:9011/recogn"
    payload = {
        "name": "/path/to/audio.wav",
        "recogn_type": 0,
        "model_name": "base",
        "detect_language": "zh",
        "split_type": "all",
        "is_cuda": False
    }
    
    response = requests.post(url, json=payload)
    result = response.json()
    
    if result["code"] == 0:
        print(f"任务ID: {result['task_id']}")
        # 后续可通过 task_status 接口查询进度
    else:
        print(f"错误: {result['msg']}")

字幕翻译接口 (/translate_srt)

字幕翻译接口支持多种翻译引擎,能够将字幕文件从一种语言翻译到另一种语言。

核心参数说明
参数名类型必选说明示例值
namestringSRT 文件路径或内容"/path/to/subtitle.srt"
translate_typeint翻译引擎类型0 (Google翻译)
target_languagestring目标语言代码"en", "zh-cn", "ja"
source_codestring源语言代码"zh", "en", "ja"
支持的翻译引擎
# 翻译引擎类型枚举(部分)
TRANSLATE_ENGINES = {
    0: "Google翻译",
    1: "百度翻译",
    2: "腾讯翻译",
    3: "阿里翻译",
    4: "Azure翻译",
    5: "智能AI翻译",
    6: "Claude翻译",
    7: "DeepL翻译",
    8: "DeepLx翻译",
    9: "Gemini翻译",
    # ... 更多引擎
}
多语言支持

pyVideoTrans 支持丰富的语言代码,包括:

语言代码语言代码
简体中文zh-cn英语en
繁体中文zh-tw法语fr
日语ja德语de
韩语ko西班牙语es
俄语ru意大利语it
请求示例
def translate_subtitle():
    """字幕翻译接口调用示例"""
    url = "http://127.0.0.1:9011/translate_srt"
    payload = {
        "name": "/path/to/chinese.srt",
        "translate_type": 0,
        "target_language": "en",
        "source_code": "zh"
    }
    
    response = requests.post(url, json=payload)
    result = response.json()
    
    if result["code"] == 0:
        print(f"翻译任务ID: {result['task_id']}")
    else:
        print(f"翻译错误: {result['msg']}")

语音合成接口 (/tts)

语音合成接口支持多种 TTS 引擎,能够将文本转换为自然语音。

核心参数说明
参数名类型必选说明示例值
namestringSRT 文件路径或内容"/path/to/subtitle.srt"
tts_typeintTTS 引擎类型0 (Edge-TTS)
voice_rolestring语音角色"zh-CN-YunjianNeural"
target_language_codestring目标语言代码"zh-cn"
voice_ratestring语速调整"+10%", "-5%"
volumestring音量调整"+5%", "-3%"
pitchstring音调调整"+10Hz", "-5Hz"
out_extstring输出格式"mp3", "wav"
voice_autorateboolean自动语速true, false
支持的 TTS 引擎
# TTS 引擎类型枚举
TTS_ENGINES = {
    0: "Edge-TTS",           # Microsoft Edge 语音合成
    1: "CosyVoice",          # 网易 CosyVoice
    2: "ChatTTS",            # 聊天 TTS
    3: "302.AI",             # 302.AI 语音合成
    4

【免费下载链接】pyvideotrans Translate the video from one language to another and add dubbing. 将视频从一种语言翻译为另一种语言,并添加配音 【免费下载链接】pyvideotrans 项目地址: https://gitcode.com/gh_mirrors/py/pyvideotrans

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值