- ·上一篇文章:AMD推出最新行动装置多媒体应用技术
- ·下一篇文章:几种特殊文字效果的实现
如何使你的字幕与电影同步(完全手册)
有时你从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格式有所不同,每句字幕写在同一行,换行用 标记 |
| SubRip | *.SRT | 给出每句字幕的序号,中止时间和开始时间,精确到毫秒 |
| SubStationAlpha | *.SSA | 格式化的文本文件,每句字幕均以'Dialogue'开头 |
| Sami | *.SMI | 比较少见的HTML格式文件,每句字幕均给出起始帧数 |
现在来找出你的影片的实际帧速率:
你可以通过VirtualDub(在AVI-info选项里,十分精确),SubAdjust(精确)或者media player(在preference菜单里选择video rendering,较不精确)取得。
方便叙述起见,在下文中,我们假定你的影片的帧速率均为25fps.
将字幕文件转化为MicroDVD格式:
如果从SubViewer格式转化,你可以从命令行运行SubAdjuster
SUB <your file> <new file> -R25 -CONV
参数 -R 指定你的AVI影片的帧速率,这个值的正确性非常重要,否则你会在后面的工作中花很多精力来修正字幕。
你也可以用SubAdjust来进行其他格式间的转化,如果真的需要的话。
完成上述步骤后你应该运行
SUB <your new file> <new file> -FIX
来消除一些提取字幕过程中的小错误比如拼写错误(I's而不是l's),空格错误(字符间有空格)等等……
(BTW:你可以用批处理文件FIX.BAT来一步完成转化和修正,命令示例FIX <filename> <framerate> )
这样你就创建了一个完美的(?)字幕,采用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 <sourcefile> <newfile> -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 <old file> <new file> -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.
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 <your file> <new file> -S-9 -R25
意思是你将字幕移动-9秒(让字幕提前9秒钟出现)。
或者你可以给出确切的帧数(9秒×25fps=225帧):
SUB <your file> <new file> -225
如果你使用SubViewer格式,那么你可以使用SubAdjust工具来调整。



