by fr0do 01/26/2001
有时你从WWW上下载了一些字幕,却发现他们跟你的影片不同步甚至根本无法被你的播放器识别。
这份指南就是来帮助你对付这些糟糕的字幕的,同时它也可用于你自己rip的字幕,如果你发现它们由于某种原因与你的影片不同步的话。
先讲一下用到的软件:能够完全操控字幕的软件基本上只有两个:Frodo写的SubAdjuster(v1.41)和Psyche写的SubAdjust(v1.55)。
由于前者是我自己写的,在这篇指南里我就把它当做默认的工具了,当然你也可以用SubAdjust 1.51完成相同的工作,方法基本相同。
>> 阅读更多
提取字幕
第一步:将字幕转化为所需格式
你得到了一个字幕文件,却不知道它是什么格式怎么办?一般来说,字幕主要有五种格式(如果遗漏了你最喜欢的格式请见谅:-):
SubRip - SubViewer (1 & 2.0)
- MicroDVD
- SubStationAlpha
- Sami
我最喜欢的格式是MicroDVD,因为它不仅精巧,强大(甚至可以做斜体字),易用,而且MicroDVD播放器也是播放字幕的最佳选择。
我会集中讲述MicroDVD,同时也会提供一些SubViewer的使用技巧,这两个是最常使用的工具。
怎样确定你得到的是何种格式的字幕呢(请看例子)?通常不能完全相信文件的格式说 明,需要自己查看一下文件的内容:
MicroDVD | *.* | 一个简洁的文本文件,在每行的开头用{}标记起始帧和中止帧,换行用|标记 |
SubViewer | *.SUB | 文件开头是影片的一些信息。每句字幕均给出起始和中止时间。 |
SubViewer 2.0 | *.SUB | 与旧的SubViewer格式有所不同,每句字幕写在同一行,换行用[br]标记 |
SubRip | *.SRT | 给出每句字幕的序号,中止时间和开始时间,精确到毫秒 |
SubStationAlpha | *.SSA | 格式化的文本文件,每句字幕均以'Dialogue'开头 |
Sami | *.SMI | 比较少见的HTML格式文件,每句字幕均给出起始帧数 |
现在来找出你的影片的实际帧速率:
你可以通过VirtualDub(在AVI-info选项里,十分精确),SubAdjust(精确)或者media player(在preference菜单里选择video rendering,较不精确)取得。
方便叙述起见,在下文中,我们假定你的影片的帧速率均为25fps.
将字幕文件转化为MicroDVD格式:
如果从SubViewer格式转化,你可以从命令行运行SubAdjuster
SUB
-R25 -CONV
参数 -R 指定你的AVI影片的帧速率,这个值的正确性非常重要,否则你会在后面的工作中花很多精力来修正字幕。
你也可以用SubAdjust来进行其他格式间的转化,如果真的需要的话。
完成上述步骤后你应该运行
SUB
-FIX
来消除一些提取字幕过程中的小错误比如拼写错误(I's而不是l's),空格错误(字符间有空格)等等……
(BTW:你可以用批处理文件FIX.BAT来一步完成转化和修正,命令示例FIX
这样你就创建了一个完美的(?)字幕,采用MicroDVD格式并且符合你的影片的帧速率。
第二步:修正糟糕透顶的字幕
当你得到的字幕不是SubViewer或SubRip的格式而是MicroDVD格式,而且帧速率和你的影片不同的时候,你该怎么办?
看上去一切都糟糕透了…
基本上来说你有两种选择:
你可以直接进行第三步操作,尝试手动改变帧速率和字幕的延时直到结果令人满意(建议只在字幕稍有偏差时使用) - 同时也可利用1.4版以上的SubAdjuster进行自动计算和同步处理(这种方法适用于字幕的时间偏差十分严重或者你不想手动完成烦琐的修正过程的时候)
如果你决定使用第二种方法,请按以下步骤来:
- 打开字幕文件(MicroDVD格式)看一下第一句字幕(并不要求一定是第一句但是这样通常最精确)。
记下它的起始帧数,比如:{1025}{1110}The Age of Gods was closing.|Eternity had come to an end.
开始的帧数是1025.
- 查看文件里最后一句字幕(同样也不要求一定是最后一句……)并记下起始帧数
{171740}{171842}Lay down your head upon my breast,|and go to sleep, my love.
帧数为 171740.
- 然后开始观看影片,直到第一句字幕应该出现的确切时刻(当然应该与字幕文件里 这一句的内容相同)
记下尽量确切的秒数,比如120.5 秒。 - 再观看影片的结尾,直到最后一句字幕(当然也要与字幕文件里的相同)应该出现的地方。
记下确切的秒数,比如91分钟40秒=5500 秒。 - 检查你的影片的确切的帧速率。例如你可以借助于VirtualDub。只需打开AVI文件,并查看file菜单下的信息
例如 这是一部25fps的PAL制式的影片。 - 现在万事具备,只需运行如下命令:
SUB
-1F1025 -2F171740 -1T120.5 -2T5500 -R25 -SYNCH
这些参数分别是:
-1F文件中第一句字幕出现的帧数(这里是1025)
-2F文件中最后一句字幕出现的帧数(这里是171740)
-1T 第一句字幕在影片中应该出现的秒数 (这里是 120.5)
-2T 最后一句字幕在影片中应该出现的秒数(这里是5500)
-R AVI文件的确切帧速率(这里是25)
这样就可以生成与你的影片同步的字幕了。
如果你发现仍然有一些微小的不同步存在,你可以继续第八步的操作。
如果仍然有大量字幕不同步,那么可能是你的参数值设错了。重新找出确切的值。
如果你确认所有参数都正确给出,但是字幕仍然在某些地方不正常(有时提前 - 有时落后),那么意味着你的影片和字幕并不相配,因为某些段落被删节了,可能是影片,也可能是字幕。这样的话,就很难修正了。
但是并不是不可能的:这意味着你必须先找出被删节的部分然后从原始的(不是修改过的)字幕文件中删除它们,然后重复第二步。同时你可以参考第九步,获得一些有用的提示。
在这种情形下,第三步中的同步过程也很有用,可以容易地找到被删节的段落。
第三步:手动转换帧速率(仅针对对MicroDVD格式的字幕)
这儿需要点小技巧,因为帧速率不能从MicroDVD格式的文件中得到确切值,所以我们要加以估算并舍入到最接近的常用帧速率。
一个比较好的估算可按以下步骤进行:
检查影片的长度,不妨设片长约为102分钟,然后减去影片开头第一句对白出现前的时间(通常是两分钟)和影片结尾最后一句对白后的时间(大约是5分钟)。于是我们估算的结果为102-2-5=95分钟=5700秒。(当然如果你愿意可以真正检查以下第一句和最后一句之间的时间以获得精确到99%的帧速率)。
现在我们来检查一下字幕文件:
第一行(应该与第一句对白相同)示例如下:
{1025}{1110}The Age of Gods was closing.|Eternity had come to an end.
最后一行对白(不是指版权信息之类的文字)
{171740}{171842}Lay down your head upon my breast,|and go to sleep, my love.
所以帧数之差为171740-1025=170715
现在我们可以计算一下大概的帧速率:170715 帧 / 5700 秒 = 29.95 fps
很好,这很接近NTSC制式29.97的帧速率,因此我们假设这就是他们创建字幕时使用的的帧速率。
现在要做的是创建一个具有新的帧速率的新文件,使用SubAdjust,执行以下命令:
SUB
-O29.97 -N25
这将创建一个帧速率为25的新文件,正是我们想需要的。(参数-N表示新的帧速率 ,参数-O代表旧的帧速率)。其它常用的帧速率为:
- 23.976 (FILM)
- 24
- 25 (PAL)
- 29.97 (NTSC)
- 30
但是请谨记:可能帧速率已经在字幕文件中被修正只是有点延迟 - 那么最好不要去碰它,保持原有的值不变。例如:
如果你计算出帧速率为30但是你的影片帧速率为29.97那么你应该先看看帧速率是否已经适合你的影片。在这种情况下接着做第四到第六步,看看是不是每句字幕都已经同步了。
第四步:计算字幕延迟时间
打开影片,等到第一句台词出现,记下第一句字幕应该出现的时间,不妨设为32秒。
停止播放影片,查看一下字幕文件。第一句字幕应该和你在影片中听到的相同查看一下时间标记(如果是SubViewer 格式)
Have a look at the timestamp (if it's SubViewer format)
00:00:41.00,00:00:44.40
The Age of Gods was closing.[br]Eternity had come to an end.
或者帧数(如果是MicroDVD格式)
{1025}{1110}The Age of Gods was closing.|Eternity had come to an end.
在SubViewer格式中很容易直接看出延迟长短来因为每个时间标记都是用如下格式给出的:
小时:分钟:秒.百分秒
所以你可以直接看出在此例中延迟大约是9秒。在MicroDVD格式中你必须从帧速率中计算出时间来:
1025帧被25帧每秒除(在此例中)=41秒。
第五步:把第一句字幕调整到正确的位置
到了使用工具将字幕移位的时候了。如果你使用MicroDVD格式你可以使用一下命令:
SUB
-S-9 -R25
意思是你将字幕移动-9秒(让字幕提前9秒钟出现)。
或者你可以给出确切的帧数(9秒×25fps=225帧):
SUB
-225
如果你使用SubViewer格式,那么你可以使用SubAdjust工具来调整。
第六步:微调第一句字幕
现在可以打开影片看看调整后的字幕了。将影片拖到第一句字幕出现的地方看它是否已经正常。
如果效果仍然不够好(通常第一次尝试不能达到100%的准确)就再将字幕朝需要的方向进行细微的调整(意思是如果字幕太晚则使用负值,字幕太早则使用正值)。
例如将字幕再移动10帧:
SUB
-235
重复此项操作直到字幕令人满意。
第七步:调整帧速率
现在第一句字幕已经正常,但是随着影片的播放越来越多的字幕再次出现时间上的偏差。现在该怎么办?
原因在于影片的帧速率并不严格与字幕相同。
你只需跳转到影片和字幕出现约一秒钟偏差的地方(当然你可以选择其他延迟时间,只要你觉的合适)记下时间。
不妨设这个时间是大约15分钟=900秒。
现在让我们创建一个新文件:
在900秒的地方相差了一秒,如果字幕提前了,就把900当做旧的帧数,901(+1秒)当做新的帧数,反之落后的话,就用899(-1秒):
SUB
-O900 -N901
好的,用你新创建的文件作字幕重新观看影片,应该大有改善,尽管还不完美,尤其是在影片的结尾处。
让我们再对它进行进一步的微调。
第八步:微调,微调,再微调……
烦人的部分来了,你必须不断的尝试调整各帧重新计算帧速率知道结果令你满意为止。
首先要再次检查第一句字幕是否仍然和影片同步。如果不是(这有可能发生,第七步中重新计算帧速率会引起很大的改变)那么你就必须重复第六步,但是此时使用你在第七步中创建的最新文件并且轻微调整帧数,比如10帧:
SUB
10
重复此步骤直到结果令人满意。
接着要做的就是再次检查字幕在什么时候又出现了一秒钟的偏差。不妨设这个时间是大约一个小时=3600秒,字幕落后画面一秒。那么就用如下命令创建一个新文件:
SUB
-O3600 -N3599
再次检查微调直到你满意为止(别忘了你也可以使用分数秒,因此可能用3599.23能够得到最佳效果……)
如果你还是觉得不够满意,那么重复第六步 - 微调延迟时间然后是帧速率直到你心满意足或者你疲倦到以头锵键盘的程度。
放轻松点:只要你在此方面有一点经验,最坏的情况下也只需要半个小时来修复一个极度糟糕的字幕。我通常只用不到10分钟就可以修复一个字幕。如果是我自己rip的字幕,那么转化和纠错后基本上不用再作进一步调整,至多修正一下时间的延迟(比如开头有个预告片,但在vob文件中被三剪掉了)。
第9步:字幕忽然与影片失去同步
怎么回事:本来与影片配合的很好的字幕突然失去同步,或者突然多了许多不必要的部分?
原因在于影片在审核的过程中被剪掉了几幕。因此在字幕(从另一个版本的影片中rip的)中或者你的影片中有几幕(或一幕)被删除了(迄今为止我只碰到过一次)。
因此找出被剪掉的片断的确切时间并记下来。
如果字幕有多余部分(或者在不需要字幕的时候,字幕有个很大的中断)你可以使用如下命令(比方说在35分钟的地方被剪掉了10秒长的片断,影片的帧速率为25):
SUB
52500 52750 -CUT
来从文件中切除那些文字。第一个值(52500)是起始帧(35分钟×60秒每分×25fps)第二个值是中止帧(52500+10秒×25fps)。
如果是字幕缺失了一部分,当然没有办法把它们找回来了,但是你可以把剩余的字幕重新调整同步。
方法是在被剪掉的片断处分割字幕文件然后调整第二个文件直到同步(找出字幕和对白的时间差然后据此调整字幕)。
接着就可以把字幕文件重新合并了。
结束语
在我编写这份指南的时候,我注意到为了得到一个完美的字幕,我们需要完成大量的工作,你会不会怀疑,这么辛苦值得吗?
当然这取决于字幕对你的重要性,在我看来字幕可以使影片增色不少。即使你很幸运(?),影片是用你的母语配的音,你可能不需要字幕就能看懂,但是这是学好一门语言的好方法之一。坦率地说 - 配音真的能够改善影片的品质吗?我想观看原始语种的影片可以让你从影片中得到更多(当然你的外语不能太烂)。
毕竟制作字幕并不是想像中的那么漫长的过程,越往后制作速度会越快(一个原因是SubRip不断增加新的特性,另一方面你的经验也在逐渐积累。因此尽管初看上去这是个很复杂的工作,但你应该去试一试。
各种字幕格式示例:
只给出典型的几行。
MicroDVD:
{1025}{1110}The Age of Gods was closing.|Eternity had come to an end.
{1375}{1460}The heavens shook as the armies|of Falis, God of Light...
SubRip:
1 00:02:26,407 --> 00:02:31,356
Detta handlar om min storebrors
kriminella beteende och foersvinnade.
2 00:02:31,567 --> 00:02:37,164
Vi talar inte laengre om Wade. Det aer
som om han aldrig hade existerat.
SubViewer:
[INFORMATION]
[TITLE]xxxxxxxxxx
[AUTHOR]xxxxxxxx
[SOURCE]xxxxxxxxxxxxxxxx
[FILEPATH]
[DELAY]0
[COMMENT]
[END INFORMATION]
[SUBTITLE]
[COLF]&HFFFFFF,[STYLE]bd,[SIZE]18,[FONT]Arial
00:00:41.00,00:00:44.40
The Age of Gods was closing.
Eternity had come to an end.
00:00:55.00,00:00:58.40
The heavens shook as the armies
of Falis, God of Light...
SubViewer 2.0:
[INFORMATION]
[TITLE]xxxxxxxxxx
[AUTHOR]xxxxxxxxxx
[SOURCE]xxxxxxxxxx
[PRG]
[FILEPATH]
[DELAY]0
[CD TRACK]0
[COMMENT]
[END INFORMATION]
[SUBTITLE]
[COLF]&H00FFFF,[STYLE]no,[SIZE]12,[FONT]Courier New
00:00:07.00,00:00:11.91
THERE IS A PLACE ON EARTH WHERE IT[br]IS STILL THE MORNING OF LIFE...
00:00:12.48,00:00:15.17
AND THE GREAT HERDS RUN FREE.[br]SO WHAT?!
SubStationAlpha:
[Script Info]
Title:
Original Script:
Original Translation:
Original Editing:
Original Timing:
Original Script Checking:
Synch Point:
Script Updated By:
Update Details:
ScriptType: v4.00
Collisions: Normal
PlayResY: 864
PlayDepth: 0
Timer: 100.0000
[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,65535,65535,65535,-2147483640,-1,0,1,3,0,2,30,30,30,0,0
[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: Marked=0,0:02:32.85,0:02:34.33,*Default,1,0000,0000,0000,,Bio-readouts are all in the green. Looks like she's alive.
Sami:
The Age of Gods was closing.
The heavens shook as the armies of Falis,
原文链接:http://www.doom9.cn/index.html?/sub.htm