尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

基于Whisper与LLM的AI视频字幕翻译自动化实践

基于Whisper与LLM的AI视频字幕翻译自动化实践 最近在整理经典美剧《识骨寻踪》的幕后资料时发现第100集对主演Emily Deschanel的采访内容非常精彩但网上流传的中文翻译版本要么不全要么不够准确。作为一名技术博主我习惯性地想能不能用技术手段高效、准确地完成这类视频采访的字幕翻译工作这不仅是剧迷的福利更是技术赋能内容创作的绝佳案例。本文将手把手带你搭建一套AI 辅助视频字幕翻译工作流。我们将从原始视频中提取英文字幕利用大语言模型进行精准翻译和语气润色最后生成带时间轴的中文字幕文件。整个过程将涉及视频处理、文本解析、AI 调用和文件合成等多个环节适合对Python自动化、AI应用以及多媒体处理感兴趣的开发者。学完后你将能快速处理类似《识骨寻踪》采访这样的英文视频内容产出高质量的中文字幕。1. 项目背景与核心概念在开始敲代码之前我们首先要明确这个项目要解决的核心问题以及涉及的技术栈。1.1 为什么需要AI辅助字幕翻译传统字幕翻译主要依赖人工听译效率低且对译者外语水平要求高。对于《识骨寻踪》这类包含大量专业术语如法医、刑侦词汇和口语化表达的采访机器翻译如早期的谷歌翻译往往生硬、不准。而如今的大语言模型LLM在理解上下文、把握语气风格方面有了质的飞跃非常适合处理对话类文本。我们的目标不是完全取代人工而是构建一个“AI初翻 人工校对”的高效流水线将译者从繁琐的听打和基础翻译中解放出来专注于语义的精准打磨和文化的适配。1.2 技术流程总览整个工作流可以拆解为以下几个关键步骤这也构成了我们后续章节的路线图音视频分离与语音识别ASR从MP4等视频文件中提取音频并转换为带时间戳的英文字幕文本SRT或VTT格式。文本预处理与分句处理ASR输出的原始文本进行断句、合并短句、去除语气词等使其更适合翻译。AI翻译与润色调用大语言模型API如DeepSeek、GPT、文心一言等将预处理后的英文句子翻译成中文并确保口语化、符合采访语气。字幕文件合成将翻译好的中文文本与原始英文字幕的时间轴对齐生成新的中文字幕文件SRT格式。可选视频压制将生成的中文字幕“烧录”到原视频中生成内嵌字幕的新视频文件。本文将重点讲解1-4步这是核心的自动化流程。第5步涉及视频编码我们会提供常用工具的命令行示例。1.3 关键工具与库选型语音识别ASRwhisper(OpenAI)。开源、免费、精度高、支持带时间戳的输出是当前首选。视频/音频处理moviepy或ffmpeg。moviepy更Pythonic适合简单剪辑ffmpeg是功能强大的命令行工具处理速度快。AI翻译接口我们将以DeepSeek的API为例因其性价比高且对中文支持良好。你也可以轻松替换为其他兼容OpenAI格式的API。文本处理Python标准库re(正则表达式)、json、srt库用于解析和生成SRT文件。2. 环境准备与项目初始化工欲善其事必先利其器。我们先来搭建开发环境。2.1 基础环境要求操作系统Windows 10/11, macOS, 或 Linux (如 Ubuntu)。本文示例在 Windows 11 和 WSL2 (Ubuntu) 下测试通过。Python版本 3.8。推荐使用 3.9 或 3.10以获得更好的库兼容性。包管理工具pip。建议使用虚拟环境venv或conda隔离项目依赖。2.2 创建项目与安装依赖首先创建一个新的项目目录并初始化虚拟环境。# 创建项目文件夹 mkdir auto_subtitle_translate cd auto_subtitle_translate # 创建并激活虚拟环境 (Windows) python -m venv venv venv\Scripts\activate # 创建并激活虚拟环境 (macOS/Linux) python3 -m venv venv source venv/bin/activate激活虚拟环境后命令行提示符前通常会显示(venv)。接下来安装核心依赖库。# 安装核心依赖 pip install openai-whisper moviepy srt # 安装requests用于调用APItqdm用于显示进度条 pip install requests tqdm # 可选如果你计划使用ffmpeg命令行需要单独安装ffmpeg # Ubuntu/Debian: sudo apt install ffmpeg # macOS: brew install ffmpeg # Windows: 从官网下载并添加至系统PATH重要提示whisper模型首次运行时会自动下载模型文件较大如base模型约150MBsmall约500MB。请确保网络通畅。如果下载慢可以考虑使用镜像源或手动下载模型文件。2.3 项目结构设计一个清晰的项目结构有助于管理代码和资源。创建如下文件和文件夹auto_subtitle_translate/ ├── venv/ # Python虚拟环境目录自动生成 ├── input_videos/ # 存放待处理的原始视频文件 │ └── bones_s10e10_interview.mp4 # 示例识骨寻踪采访视频 ├── output/ # 存放所有输出结果 │ ├── transcripts/ # 原始英文字幕文件 │ ├── translated/ # 翻译后的中文字幕文件 │ └── final_videos/ # 最终合成视频可选 ├── src/ # 源代码目录 │ ├── __init__.py │ ├── audio_extractor.py # 音频提取模块 │ ├── transcribe.py # 语音转字幕模块 │ ├── translator.py # AI翻译模块 │ └── srt_merger.py # 字幕合并模块 ├── config.py # 配置文件API密钥等 ├── main.py # 主程序入口 └── requirements.txt # 依赖列表可由 pip freeze requirements.txt 生成3. 核心模块拆解与实现接下来我们逐一实现工作流中的每个核心模块。3.1 模块一音频提取 (audio_extractor.py)这个模块负责从视频文件中提取纯净的音频文件WAV格式为后续的语音识别做准备。# filepath: src/audio_extractor.py import os from moviepy.editor import VideoFileClip def extract_audio_from_video(video_path, output_audio_path): 从视频文件中提取音频并保存为WAV格式。 Args: video_path (str): 输入视频文件的完整路径。 output_audio_path (str): 输出音频文件.wav的完整路径。 Returns: bool: 成功返回True失败返回False。 try: print(f正在从视频提取音频: {video_path}) # 加载视频文件 video VideoFileClip(video_path) # 提取音频轨道 audio video.audio # 写入WAV文件WAV格式保真度较高适合语音识别 audio.write_audiofile(output_audio_path, codecpcm_s16le) print(f音频已保存至: {output_audio_path}) video.close() return True except Exception as e: print(f音频提取失败: {e}) return False if __name__ __main__: # 测试代码 input_video ../input_videos/sample.mp4 # 请替换为你的视频路径 output_audio ../output/extracted_audio.wav if extract_audio_from_video(input_video, output_audio): print(测试成功)关键点说明使用moviepy的VideoFileClip可以方便地分离音视频流。输出格式选择pcm_s16le编码的 WAV 文件这是whisper推荐的格式能保证识别精度。务必在最后调用video.close()释放资源尤其是在处理批量文件时。3.2 模块二语音转写 (transcribe.py)这是核心环节我们使用whisper将音频转换为带时间戳的英文字幕。# filepath: src/transcribe.py import whisper import os import srt from datetime import timedelta def transcribe_audio_to_srt(audio_path, model_sizebase, languageen): 使用Whisper模型将音频文件转录为SRT格式英文字幕。 Args: audio_path (str): 输入音频文件路径。 model_size (str): Whisper模型大小可选 tiny, base, small, medium, large。越大越准越慢。 language (str): 音频语言代码如 en英语zh中文。 Returns: str: 生成的SRT格式字符串。如果失败返回None。 print(f开始语音识别使用模型: {model_size}) try: # 加载模型首次运行会自动下载 model whisper.load_model(model_size) # 执行转录指定语言和带时间戳的输出格式 result model.transcribe(audio_path, languagelanguage, word_timestampsFalse) print(语音识别完成正在生成SRT文件...) # 将Whisper的输出转换为SRT格式的句子列表 segments result[segments] subtitle_generator srt.SubtitleMaker() for i, segment in enumerate(segments, start1): # 获取开始和结束时间秒 start_time timedelta(secondssegment[start]) end_time timedelta(secondssegment[end]) text segment[text].strip() # 创建SRT条目 subtitle srt.Subtitle(indexi, startstart_time, endend_time, contenttext) subtitle_generator.append(subtitle) # 生成完整的SRT字符串 srt_content srt.compose(subtitle_generator.subtitles) return srt_content except Exception as e: print(f语音识别过程出错: {e}) return None def save_srt_file(srt_content, output_srt_path): 将SRT内容保存到文件。 try: with open(output_srt_path, w, encodingutf-8) as f: f.write(srt_content) print(fSRT字幕文件已保存: {output_srt_path}) return True except Exception as e: print(f保存SRT文件失败: {e}) return False if __name__ __main__: # 测试代码 audio_file ../output/extracted_audio.wav srt_output ../output/transcripts/raw_english.srt # 确保输出目录存在 os.makedirs(os.path.dirname(srt_output), exist_okTrue) srt_text transcribe_audio_to_srt(audio_file, model_sizebase) if srt_text: save_srt_file(srt_text, srt_output)参数选择与调优model_size: 对于采访这类清晰人声base或small模型在精度和速度上取得了很好的平衡。如果背景音复杂或口音重可考虑medium。word_timestamps: 设为False以获得句子级的时间戳更适合字幕显示。如果需要更精细的逐词高亮可设为True但后续处理会更复杂。性能提示在CPU上运行large模型可能非常慢。如果机器有NVIDIA GPU并安装了CUDAwhisper会自动启用GPU加速速度会大幅提升。3.3 模块三AI翻译 (translator.py)这是项目的“智能大脑”。我们将通过API调用大语言模型进行翻译。这里以DeepSeek API为例。首先在项目根目录创建config.py文件来安全地管理你的API密钥。# filepath: config.py # 配置文件请勿上传至Git等公开仓库 DEEPSEEK_API_KEY your_deepseek_api_key_here # 请替换为你的真实API密钥 DEEPSEEK_API_BASE https://api.deepseek.com/v1 # DeepSeek API端点 MODEL_NAME deepseek-chat # 使用的模型名称接下来实现翻译模块。# filepath: src/translator.py import requests import json import time from typing import List, Tuple import srt from config import DEEPSEEK_API_KEY, DEEPSEEK_API_BASE, MODEL_NAME def translate_text_with_llm(text: str, system_prompt: str) - str: 调用DeepSeek API翻译单句文本。 Args: text (str): 待翻译的英文文本。 system_prompt (str): 定义AI角色和翻译要求的系统提示词。 Returns: str: 翻译后的中文文本。如果失败返回空字符串。 headers { Authorization: fBearer {DEEPSEEK_API_KEY}, Content-Type: application/json } data { model: MODEL_NAME, messages: [ {role: system, content: system_prompt}, {role: user, content: f请翻译以下英文句子\n{text}} ], temperature: 0.3, # 低温度使输出更稳定、更忠实原文 max_tokens: 500 } try: response requests.post(f{DEEPSEEK_API_BASE}/chat/completions, headersheaders, datajson.dumps(data), timeout30) response.raise_for_status() # 检查HTTP错误 result response.json() translated_text result[choices][0][message][content].strip() # 清理API可能返回的额外说明文字 if 翻译 in translated_text: translated_text translated_text.split(翻译)[-1].strip() return translated_text except requests.exceptions.RequestException as e: print(fAPI请求失败: {e}) return except (KeyError, json.JSONDecodeError) as e: print(f解析API响应失败: {e}) return def batch_translate_srt(srt_content: str, batch_delay0.5) - Tuple[str, List[str]]: 批量翻译SRT文件中的所有字幕条目。 Args: srt_content (str): 原始SRT文件内容字符串。 batch_delay (float): 每次API调用后的延迟秒避免触发频率限制。 Returns: Tuple[str, List[str]]: (翻译后的SRT内容字符串, 翻译过程中出现的错误信息列表) # 1. 解析SRT内容 subtitles list(srt.parse(srt_content)) total len(subtitles) print(f开始批量翻译共 {total} 条字幕...) # 2. 定义翻译提示词这是翻译质量的关键 system_prompt 你是一名专业的影视字幕翻译员。请将英文对话翻译成地道、口语化的中文。 要求 1. 准确传达原意特别是专业术语如法医、刑侦相关词汇。 2. 语气要自然符合采访对话场景避免书面化。 3. 人名“Emily Deschanel”翻译为“艾米丽·丹斯切尔”。 4. 如果句子是疑问句或感叹句请保留相应的中文语气。 5. 直接输出翻译结果不要添加任何额外解释、说明或标记。 translated_subtitles [] errors [] # 3. 逐条翻译 for idx, sub in enumerate(subtitles, start1): original_text sub.content.strip() if not original_text: # 如果是空字幕保留 translated_subtitles.append(sub) continue print(f正在翻译 [{idx}/{total}]: {original_text[:50]}...) translated_text translate_text_with_llm(original_text, system_prompt) if translated_text: # 创建新的字幕条目保留原时间轴替换内容为中文 new_sub srt.Subtitle(indexsub.index, startsub.start, endsub.end, contenttranslated_text) translated_subtitles.append(new_sub) else: errors.append(f第 {idx} 条翻译失败: {original_text}) # 翻译失败时保留原文作为占位符 translated_subtitles.append(sub) time.sleep(batch_delay) # 礼貌延迟防止API限流 # 4. 重新组合成SRT格式字符串 new_srt_content srt.compose(translated_subtitles) return new_srt_content, errors if __name__ __main__: # 测试翻译单句 test_text You know, working on Bones for ten years, its been an incredible journey with the cast and crew. prompt 你是一名影视字幕翻译员请将英文翻译成口语化的中文。 result translate_text_with_llm(test_text, prompt) print(f测试翻译结果: {result})系统提示词System Prompt设计 这是决定翻译质量的核心。一个好的提示词应明确角色让AI扮演“专业字幕翻译员”。规定风格要求“地道、口语化”符合“采访对话场景”。处理专有名词提前约定好人名、术语的固定译法。约束输出要求“直接输出翻译结果”避免AI添加多余内容。3.4 模块四字幕合并与后处理 (srt_merger.py)翻译完成后我们需要将新的中文文本与原始时间轴结合并做一些后处理比如调整过长的句子以适应屏幕显示。# filepath: src/srt_merger.py import srt def adjust_subtitle_display(translated_srt_content: str, max_chars_per_line20, max_lines2) - str: 调整翻译后字幕的显示格式例如拆分过长的行。 Args: translated_srt_content (str): 翻译后的SRT内容。 max_chars_per_line (int): 每行最大字符数中英文混合粗略计算。 max_lines (int): 最多显示行数。 Returns: str: 调整后的SRT内容。 subtitles list(srt.parse(translated_srt_content)) adjusted_subs [] for sub in subtitles: text sub.content # 简单的按标点和长度拆分逻辑实际项目可用更智能的文本分割库 # 这里只是一个示例如果字符数超过阈值尝试在逗号、句号后换行 if len(text) max_chars_per_line * max_lines: # 这是一个非常基础的实现。生产环境应考虑使用更成熟的分词/断句库。 parts [] # 此处简化处理实际应根据中文断句习惯优化 # 例如可以按“”、“。”、“”、“”等拆分 import re sentences re.split(r([。]), text) # 重组句子确保标点跟随前句 temp_sentences [] for i in range(0, len(sentences)-1, 2): if i1 len(sentences): temp_sentences.append(sentences[i] sentences[i1]) else: temp_sentences.append(sentences[i]) if len(sentences) % 2 1: temp_sentences.append(sentences[-1]) current_line for sent in temp_sentences: if len(current_line) len(sent) max_chars_per_line: current_line sent else: if current_line: parts.append(current_line) current_line sent if current_line: parts.append(current_line) # 如果行数过多合并或截断 if len(parts) max_lines: parts parts[:max_lines] parts[-1] parts[-1] ... # 添加省略号表示截断 new_text \\n.join(parts) # SRT中使用 \n 表示换行 else: new_text text new_sub srt.Subtitle(indexsub.index, startsub.start, endsub.end, contentnew_text) adjusted_subs.append(new_sub) return srt.compose(adjusted_subs) def merge_srt_files(original_srt_path, translated_srt_path, output_dual_srt_path): 生成双语字幕SRT文件英文在上中文在下。 这是一个可选功能演示字幕合并。 try: with open(original_srt_path, r, encodingutf-8) as f: original_subs list(srt.parse(f.read())) with open(translated_srt_path, r, encodingutf-8) as f: translated_subs list(srt.parse(f.read())) if len(original_subs) ! len(translated_subs): print(警告原始字幕与翻译字幕条数不一致可能无法完美对齐。) dual_subs [] for orig, trans in zip(original_subs, translated_subs): # 假设时间轴一致将中英文用换行符连接 dual_text f{orig.content}\\n{trans.content} dual_sub srt.Subtitle(indexorig.index, startorig.start, endorig.end, contentdual_text) dual_subs.append(dual_sub) dual_content srt.compose(dual_subs) with open(output_dual_srt_path, w, encodingutf-8) as f: f.write(dual_content) print(f双语字幕文件已生成: {output_dual_srt_path}) return True except Exception as e: print(f合并双语字幕失败: {e}) return False4. 完整工作流整合与实战现在我们将所有模块串联起来形成一个完整的自动化脚本。4.1 主程序入口 (main.py)# filepath: main.py import os import sys sys.path.append(os.path.dirname(os.path.abspath(__file__))) from src.audio_extractor import extract_audio_from_video from src.transcribe import transcribe_audio_to_srt, save_srt_file from src.translator import batch_translate_srt from src.srt_merger import adjust_subtitle_display, merge_srt_files def main(): # 1. 配置路径 input_video_name bones_interview.mp4 # 请修改为你的视频文件名 base_dir os.path.dirname(os.path.abspath(__file__)) input_video_path os.path.join(base_dir, input_videos, input_video_name) # 输出目录 output_dir os.path.join(base_dir, output) audio_output_path os.path.join(output_dir, extracted_audio.wav) raw_srt_path os.path.join(output_dir, transcripts, raw_english.srt) translated_srt_path os.path.join(output_dir, translated, translated_chinese.srt) final_srt_path os.path.join(output_dir, translated, final_chinese_adjusted.srt) dual_srt_path os.path.join(output_dir, translated, dual_subtitles.srt) # 创建输出目录 os.makedirs(os.path.dirname(raw_srt_path), exist_okTrue) os.makedirs(os.path.dirname(translated_srt_path), exist_okTrue) # 2. 检查输入文件 if not os.path.exists(input_video_path): print(f错误输入视频文件不存在 - {input_video_path}) return # 3. 执行完整流程 print(*50) print(开始AI辅助字幕翻译流程) print(*50) # 步骤A: 提取音频 print(\n[步骤1/4] 提取视频音频...) if not extract_audio_from_video(input_video_path, audio_output_path): print(音频提取失败流程终止。) return # 步骤B: 语音转写生成英文字幕 print(\n[步骤2/4] 语音识别生成英文字幕...) english_srt_content transcribe_audio_to_srt(audio_output_path, model_sizebase) if not english_srt_content: print(语音识别失败流程终止。) return save_srt_file(english_srt_content, raw_srt_path) # 步骤C: AI翻译 print(\n[步骤3/4] AI翻译英译中...) translated_srt_content, errors batch_translate_srt(english_srt_content) if errors: print(f翻译过程中出现 {len(errors)} 条错误:) for err in errors: print(f - {err}) save_srt_file(translated_srt_content, translated_srt_path) # 步骤D: 字幕后处理调整格式 print(\n[步骤4/4] 字幕后处理与格式调整...) final_srt_content adjust_subtitle_display(translated_srt_content) save_srt_file(final_srt_content, final_srt_path) # 可选步骤E: 生成双语字幕 print(\n[可选] 生成双语字幕文件...) merge_srt_files(raw_srt_path, final_srt_path, dual_srt_path) print(\n *50) print(流程完成) print(f原始英文字幕: {raw_srt_path}) print(f翻译中文字幕: {final_srt_path}) print(f双语字幕: {dual_srt_path}) print(*50) print(提示你可以使用播放器如VLC、PotPlayer加载SRT字幕文件观看。) if __name__ __main__: main()4.2 运行与验证将你的视频文件如bones_interview.mp4放入input_videos/文件夹。在config.py中填入你从DeepSeek平台获取的有效API密钥。在命令行中确保位于项目根目录并且虚拟环境已激活运行主程序python main.py观察控制台输出程序会依次执行音频提取、语音识别、翻译和字幕生成。最终在output/translated/目录下得到final_chinese_adjusted.srt文件。使用视频播放器如VLC打开原视频并将生成的SRT文件拖入播放器即可看到中文字幕。预期输出示例控制台 开始AI辅助字幕翻译流程 [步骤1/4] 提取视频音频... 正在从视频提取音频: input_videos/bones_interview.mp4 音频已保存至: output/extracted_audio.wav [步骤2/4] 语音识别生成英文字幕... 开始语音识别使用模型: base 语音识别完成正在生成SRT文件... SRT字幕文件已保存: output/transcripts/raw_english.srt [步骤3/4] AI翻译英译中... 开始批量翻译共 45 条字幕... 正在翻译 [1/45]: You know, working on Bones for ten years... ... SRT字幕文件已保存: output/translated/translated_chinese.srt [步骤4/4] 字幕后处理与格式调整... SRT字幕文件已保存: output/translated/final_chinese_adjusted.srt [可选] 生成双语字幕文件... 双语字幕文件已生成: output/translated/dual_subtitles.srt 流程完成 原始英文字幕: output/transcripts/raw_english.srt 翻译中文字幕: output/translated/final_chinese_adjusted.srt 双语字幕: output/translated/dual_subtitles.srt 5. 常见问题与排查思路在实际运行中你可能会遇到以下问题。这里提供排查思路。问题现象可能原因解决思路ModuleNotFoundError: No module named whisperwhisper库未正确安装。1. 确认虚拟环境已激活。2. 运行pip install openai-whisper。3. 如果网络问题导致下载失败尝试使用国内镜像源pip install openai-whisper -i https://pypi.tuna.tsinghua.edu.cn/simple。语音识别速度极慢1. 使用了较大的模型如large且在CPU上运行。2. 音频文件很长。1. 对于采访类清晰人声使用base或small模型即可。2. 确认是否安装了CUDA版本的PyTorch以启用GPU加速。可运行pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118(CUDA 11.8)。API调用返回401或403错误1. API密钥错误或过期。2. 请求的端点URL不正确。3. 账户余额不足。1. 检查config.py中的DEEPSEEK_API_KEY是否正确无误。2. 登录DeepSeek平台确认API端点地址和模型名称。3. 检查账户是否有足够的额度。翻译结果生硬或不准确1. 系统提示词System Prompt不够具体。2. 模型temperature参数过高导致随机性大。3. 句子上下文缺失。1. 优化translator.py中的system_prompt更详细地规定翻译风格、术语和人名。2. 将temperature调低如0.1-0.3。3. 可以考虑将前后几句字幕一起发送给AI以提供更多上下文需修改batch_translate_srt函数。生成的字幕时间轴错乱1. 原始音频质量差导致Whisper识别的时间戳不准。2. 翻译前后字幕条目数量不一致。1. 确保输入视频/音频清晰。可尝试先用音频编辑软件降噪。2. 在batch_translate_srt函数中如果翻译失败我们保留了原文字幕条目保证了数量一致。检查错误列表。SRT文件在播放器中不显示或乱码1. 文件编码不是UTF-8。2. 字幕文件与视频文件名不匹配播放器未自动加载。3. SRT格式有误如时间格式错误。1. 确保所有文件操作读/写都指定了encodingutf-8。2. 将字幕文件与视频文件放在同一目录并改为同名如video.mp4和video.srt或手动在播放器中加载。3. 用文本编辑器打开SRT文件检查格式是否为标准的序号、时间轴 -- 时间轴、字幕文本、空行。ffmpeg相关错误moviepy依赖ffmpeg但系统中未找到。1. 根据操作系统安装ffmpeg并确保其在系统PATH中。2. 或者可以尝试使用moviepy的纯Python后端功能可能受限在代码开头加import moviepy.config; moviepy.config.change_settings({FFMPEG_BINARY: path/to/ffmpeg})指定路径。6. 最佳实践与工程建议将这套脚本用于实际项目或生产环境时以下几点能显著提升稳定性、效率和可维护性。6.1 性能优化并行处理batch_translate_srt函数是串行调用API的这是为了简单和避免触发频率限制。如果API支持且你的配额允许可以使用asyncio或concurrent.futures实现并发请求大幅缩短长视频的翻译时间。缓存机制对于已经翻译过的句子可以将其原文和译文存储到本地数据库如SQLite或文件中。下次遇到相同句子时直接使用缓存节省API调用次数和费用。模型选择根据音频质量选择Whisper模型。电话录音或嘈杂环境可用medium或large清晰的演播室采访用base即可。可以在transcribe_audio_to_srt函数外做一个简单的音频质量检测来自动选择模型。6.2 错误处理与健壮性重试机制在translate_text_with_llm函数中对于网络超时或API限流错误如429应实现指数退避的重试逻辑。输入验证在主函数中增加对视频格式、文件大小、音频长度的检查提前规避问题。日志记录不要只使用print。集成logging模块将运行信息、警告和错误记录到文件方便后期排查。特别是记录下翻译失败的句子原文。配置管理将模型大小、API端点、最大行宽等参数也移到config.py中避免硬编码。6.3 翻译质量提升术语表为特定领域如《识骨寻踪》的法医学创建术语对照表。在调用AI翻译前先对原文进行术语替换如将 “forensic anthropology” 替换为 “[法医人类学]”并在提示词中说明这些标记要保持原样。上下文窗口当前是单句翻译可能丢失上下文。改进方案是每次翻译时将当前句子的前一句和后一句也作为上下文提供给AI在用户消息中说明这能显著改善指代和语气连贯性。人工校对接口生成一个简单的Web界面或标记文件将AI翻译结果和原文并列显示允许译者快速校对和修改然后将修改后的结果导回系统。这实现了“AI初翻-人工精校”的闭环。6.4 扩展功能视频压制硬字幕使用ffmpeg命令将SRT字幕烧录到视频中生成内嵌字幕的MP4文件。这对于发布到某些不支持外挂字幕的平台是必须的。# 示例ffmpeg命令需先安装ffmpeg ffmpeg -i input_videos/original.mp4 -vf subtitlesoutput/translated/final_chinese_adjusted.srt:force_styleFontNameMicrosoft YaHei,FontSize20 -c:a copy output/final_videos/with_chinese_subtitles.mp4多语言支持修改transcribe_audio_to_srt中的language参数和翻译提示词即可轻松适配其他语言对的翻译如日译中、韩译中。批量处理修改main.py使其能遍历input_videos/文件夹下的所有视频文件进行批量处理适合处理系列视频。通过以上步骤你不仅完成了一个针对《识骨寻踪》采访视频的翻译工具更掌握了一套可复用于各类视频内容本地化的自动化流程。从环境搭建、模块设计、API调用到异常处理和优化建议这套方案涵盖了从开发到上线的关键考量。你可以在此基础上继续迭代打造更强大、更智能的媒体处理工具。
返回列表