提示

返回博客列表

把外文字幕变成中英双语:一套字幕翻译流水线

把外文字幕变成中英双语:一套字幕翻译流水线

下载了一部生肉(无字幕)外语片,或者只有英文字幕想加上中文字幕,手动一句句对时间轴能把人整疯。这活其实可以拆成一条流水线:提取/识别字幕 → 切句 → 翻译 → 对齐 → 回写。这篇文章给一套能自己跑起来的思路,不依赖某个特定网站。

整体流程

原始视频
  └─ 提取/识别字幕 (OCR 或 Whisper)  ──> 源语言 srt
        └─ 按句切分 + 调用翻译 API       ──> 目标语言 srt
              └─ 时间轴对齐                  ──> 双语 srt
                    └─ ffmpeg 封装/烧录        ──> 成片

第一步:拿到源字幕

如果有软字幕,直接抽:

ffmpeg -i input.mkv -map 0:s:0 sub.zh.srt

没有就上 OCR 或 Whisper 先出一份源语言字幕(这部分以前专门写过,这里不展开)。

第二步:切句与翻译

不要整段丢进翻译器,会被截断还丢格式。按字幕块(本来就有时间轴)逐条翻译最稳:

import json, requests

def translate(text, src='en', dst='zh'):
    # 这里换成你自己的翻译后端,下面只是示意
    r = requests.post('https://your-translator/api',
                     json={'q': text, 'from': src, 'to': dst}, timeout=10)
    return r.json()['result']

# 读取 srt,逐条翻译,保留时间轴

关键点:一次只翻译一条字幕块,这样时间轴天然对齐,不用后续再对齐。

第三步:做成双语

双语字幕有两种做法:

  1. 软字幕双轨道:把中、英两份 srt 分别封装进 mkv 的不同字幕流,播放器里能切换或同时显示;
  2. 合并成一条双语 srt:每条字幕里先写中文、换行写英文,烧录或软字幕都行。
ffmpeg -i input.mp4 -i zh.srt -i en.srt \
  -map 0 -map 1 -map 2 -c copy \
  -metadata:s:s:0 language=chi \
  -metadata:s:s:1 language=eng \
  output.mkv

常见坑

现象 原因 解决
翻译错位 整段翻译被合并 逐条翻译
时间轴漂移 翻译时改了换行 只替换文本,不动物流
中文乱码 文件编码非 UTF-8 统一存成 UTF-8 无 BOM
烧录字体丑 没指定中文字体 subtitles=...,fontname=Noto Sans CJK

常见问题

Q:能全自动吗? 能,把上面几步串成脚本,遍历一整个文件夹即可。

Q:机翻太生硬怎么办? 先用翻译 API 出初稿,再接一个润色模型过一遍,质量能上一个档次。

Q:双语烧录进画面还是留软字幕? 想通用留软字幕,想在任何播放器都看到就烧录(但画质略有损)。

想亲手试试?用 VidDown 一键解析下载

粘贴视频链接即可解析,多平台支持、网页端即用;下载桌面客户端解锁海外平台本地解析,开通会员更享不限次下载。

顶部