字幕翻译中空白行的产生和避免
在使用视频翻译配音软件时,经常会遇到字幕翻译结果出现空白字幕行的问题,本文就解释下为何会出现这种问题,以及如何能避免或降低出现该问题的方法。
字幕翻译与普通翻译的不同
字幕翻译与普通翻译之间存在显著差异。
字幕必须严格按照每条字幕对应时间戳的形式进行翻译,确保字幕条数不变。
比如,原文有6条字幕,每条字幕由一行文字组成,理想的翻译结果也必须保持6行,否则字幕将无法正确对应。而普通的段落翻译,多一行少一行并不会对整体产生重大影响。
字幕实例
以下是faster-whisper语音识别后得到的字幕文件(修改和调整):
1
00:00:00,000 --> 00:00:06,400
人工智能发明的动作,现在已经被人类实现,在一个非常复杂的
2
00:00:06,400 --> 00:00:11,113
游戏中,他们从来没有想过人工智能能够做到,因为这需要太多的
3
00:00:11,113 --> 00:00:11,593
创造力.
4
00:00:13,143 --> 00:00:21,883
我们还没有完全实现,但我们会实现的,到 2020-2029
5
00:00:22,323 --> 00:00:23,213
年,它
6
00:00:24,863 --> 00:00:25,363
将匹配任何人
下面是GPT-4o的翻译结果:
为减少token消耗,以及避免时间戳格式发生变化,翻译时只将字幕文本按行发送,不会将时间戳和行数全部发送
Artificial Intelligence invented moves in a very complex game that humans have come to realize,
moves they never thought AI could execute because it requires so much creativity.
We haven't fully realized this yet, but we will by 2020-2029. By 2020-2029,
it will be able to match anyone.
可以看到,翻译结果只有4行,这就会导致2行字幕空白。
减少行数不对应的策略
为减少行数不对应的情况,有以下几种策略:
一:带时间戳和行号一起发送进行翻译
这种方式可以显著降低行数不对应问题出现的概率,但也有明显缺点:
- 消耗大量token,因为行号和时间戳不需要翻译但也要消耗token。
- 可能出现格式变化,如时间戳中的标点符号可能会变为中文标点符号,尤其是百度翻译、腾讯翻译等传统翻译引擎,导致字幕格式错误,而不得不手动调整,否则后续进一步的处理中会报错。
二:一次仅翻译一行字幕
这种方式能保证行数百分百一致,但缺点是无法结合上下文进行翻译,结果呆板僵硬。
如果需要使用,可修改 videotrans/set.ini
中参数 trans_thread=15
为 trans_thread=1
启用
三:一次多行翻译,返回行数若不对应,再强制断句分行
这是软件目前所采用的方式:
- 默认一次发送15条字幕进行翻译。
- 如果返回的翻译结果也是15行,无需处理可直接使用;
- 如果行数不符,再根据原字幕的字符占比重新划分翻译结果。
例如,原字幕15行总字符450个,原字幕中第一行20个字符,占原字幕字符总数比是2/45,翻译结果800个字符,则重新划分后第一行应含有800*(2/45) ≈ 35.5个字符。
按照该方式,通常不应该出现空白行,然而为了避免生硬拆分,比如单词“hello”,如果直接拆分为 “hel”和“llo”显然是无法接收的,因此在拆分时,会尽量按照标点符号去拆分。
但这样又会导致一个新问题:应该的拆分点无标点符号,将后延几个字符寻找到标点进行再拆分,如果多行都后延,而最后一行原本占比又非常低的情况下,可能会导致最后一两行字幕变为空白。
例如原本最后一行按比重应该有6个字符,但前面有几行出现了后延,后延总数超过6,那么最后一行就变为空白。
结论
第一种和第三种方案是相对较好的选择。
目前采用第三种方式,能兼顾各种翻译引擎的特点,同时避免浪费大量token。
视频翻译配音软件开源地址 github.com/jianchang51…
转载自:https://juejin.cn/post/7383609946833633295