translategemma-27b-it使用教程:如何用Python脚本批量翻译生成SRT
Translategemma-27b-it使用教程:如何用Python脚本批量翻译生成SRT
1. 准备工作与环境搭建
1.1 安装Ollama基础环境
首先需要确保你的系统已经安装了Ollama运行环境。以下是不同操作系统的安装方法:
macOS用户:
brew install ollamaWindows用户: 访问Ollama官网下载安装包,双击运行安装程序
Linux用户:
curl -fsSL https://ollama.com/install.sh | sh
安装完成后,在终端运行以下命令验证安装是否成功:
ollama --version1.2 下载translategemma-27b-it模型
执行以下命令拉取模型:
ollama pull ghcr.io/google-deepmind/translategemma:27b-it模型大小约17.8GB,下载时间取决于你的网络速度。完成后可以通过以下命令查看已安装的模型:
ollama list2. 理解模型输入输出规范
2.1 输入要求
translategemma-27b-it模型接受两种输入方式:
纯文本输入:
- 直接输入待翻译的文本字符串
- 最大支持2000个token的上下文长度
图像输入:
- 推荐分辨率896×896像素
- 支持PNG、JPEG格式
- 图像会被编码为256个token
2.2 输出特点
模型输出为翻译后的文本,具有以下特点:
- 支持55种语言互译
- 输出长度与输入长度相当
- 保留原文的语义和风格
- 自动处理文化差异表达
3. 准备字幕翻译素材
3.1 视频截图获取
我们需要从视频中提取包含字幕的截图,推荐以下方法:
手动截图:
- 使用播放器(VLC、PotPlayer等)逐帧截图
- 确保截图清晰包含完整字幕
自动抽帧: 使用FFmpeg命令批量提取:
ffmpeg -i input.mp4 -vf "select=eq(n\,0)+eq(n\,30)+eq(n\,60)" -vsync vfr frame_%03d.png
3.2 图片预处理
为确保最佳翻译效果,建议对截图进行以下处理:
统一调整为896×896分辨率:
mogrify -resize 896x896^ -gravity center -extent 896x896 *.png增强字幕区域对比度:
convert input.png -contrast-stretch 10% output.png批量重命名为连续序号:
ls *.png | cat -n | while read n f; do mv "$f" "frame_$n.png"; done
4. 编写Python翻译脚本
4.1 安装必要依赖
创建Python虚拟环境并安装依赖:
python -m venv venv source venv/bin/activate # Linux/macOS # venv\Scripts\activate # Windows pip install requests pillow tqdm4.2 核心翻译代码
创建translate_srt.py文件,添加以下内容:
import os import base64 import requests from PIL import Image from pathlib import Path from tqdm import tqdm # 配置参数 IMAGE_DIR = Path("frames") # 截图目录 OUTPUT_SRT = "output.srt" # 输出字幕文件 OLLAMA_API = "http://localhost:11434/api/generate" # 构建提示词模板 PROMPT_TEMPLATE = """你是一名专业字幕翻译员,请将图片中的中文翻译成英文,严格遵循以下规则: 1. 仅翻译可见字幕文本,忽略其他内容 2. 保持译文简洁,不超过原文字数120% 3. 输出格式: [序号] [时间码] 翻译内容 现在请翻译这张图片:""" def image_to_base64(image_path): with Image.open(image_path) as img: img = img.resize((896, 896)) img.save("temp.png") with open("temp.png", "rb") as f: return base64.b64encode(f.read()).decode("utf-8") def translate_image(image_path, index): image_b64 = image_to_base64(image_path) payload = { "model": "ghcr.io/google-deepmind/translategemma:27b-it", "prompt": PROMPT_TEMPLATE, "images": [image_b64], "stream": False } try: response = requests.post(OLLAMA_API, json=payload, timeout=120) response.raise_for_status() return response.json()["response"] except Exception as e: print(f"翻译失败: {e}") return f"{index}\n00:00:00,000 --> 00:00:02,000\n[翻译失败]" def main(): frames = sorted(list(IMAGE_DIR.glob("*.png"))) srt_content = [] for idx, frame in enumerate(tqdm(frames, desc="翻译进度"), 1): result = translate_image(frame, idx) srt_content.append(result.strip()) srt_content.append("") # 空行分隔 with open(OUTPUT_SRT, "w", encoding="utf-8") as f: f.write("\n".join(srt_content)) print(f"\n字幕文件已生成: {OUTPUT_SRT}") if __name__ == "__main__": main()5. 运行脚本生成SRT字幕
5.1 执行翻译脚本
将准备好的截图放入frames文件夹,运行脚本:
python translate_srt.py脚本会自动:
- 按顺序处理每张截图
- 调用translategemma模型进行翻译
- 生成标准SRT格式字幕文件
5.2 处理结果示例
生成的output.srt文件内容示例:
1 00:00:01,000 --> 00:00:03,000 Welcome to today's conference. 2 00:00:04,000 --> 00:00:06,000 Please turn off your mobile phones. 3 00:00:07,000 --> 00:00:09,000 The presentation will begin shortly.6. 高级功能与优化建议
6.1 批量处理优化
对于大量视频文件,可以改进脚本实现:
并行处理:使用多线程加速翻译
from concurrent.futures import ThreadPoolExecutor def batch_translate(frames): with ThreadPoolExecutor(max_workers=4) as executor: results = list(executor.map(translate_image, frames, range(1, len(frames)+1))) return results断点续传:记录已处理文件,避免重复翻译
processed = set() if os.path.exists("processed.log"): with open("processed.log", "r") as f: processed.update(f.read().splitlines())
6.2 字幕时间轴同步
自动从视频中提取时间信息并同步到字幕:
使用FFmpeg提取关键帧时间戳:
ffmpeg -i input.mp4 -vf select='eq(pict_type,I)' -vsync vfr -f null - 2>&1 | grep 'pict_type:I' | awk '{print $2}'在Python脚本中注入时间信息:
def get_frame_times(video_path): # 实现提取时间戳的逻辑 return frame_times
7. 常见问题解决方案
7.1 翻译质量优化
如果翻译结果不理想,可以尝试:
调整提示词:更明确地指定翻译要求
PROMPT_TEMPLATE = """你是一名资深影视翻译专家,请将图片中的对话翻译成英文,要求: 1. 保留口语化风格 2. 处理文化特定表达 3. 控制每行不超过42个字符 ..."""图片预处理:增强字幕区域清晰度
def enhance_subtitle(image_path): img = Image.open(image_path) # 实现图像增强逻辑 return img
7.2 性能问题处理
遇到速度慢或内存不足时:
降低分辨率:调整图片大小
img = img.resize((640, 640))限制并发:控制同时处理的请求数
with ThreadPoolExecutor(max_workers=2) as executor:模型量化:使用量化版模型减少内存占用
ollama pull ghcr.io/google-deepmind/translategemma:27b-it-q4
8. 总结与下一步
通过本教程,你已经学会了:
- 如何在本地部署translategemma-27b-it模型
- 准备视频字幕截图的最佳实践
- 编写Python脚本批量翻译生成SRT字幕
- 处理常见问题和优化翻译质量
下一步可以尝试:
- 将流程封装为GUI工具,方便非技术人员使用
- 集成语音识别,实现全自动字幕生成
- 开发实时翻译插件,用于视频会议场景
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
