This box will be fixed on your screen using Firefox, Opera9 or IE7.

Cli: 自制双语 Srt 字幕

由于语言环境的问题,看电影听力始终跟不太上,尤其是老外说快了或者句子中夹有陌生单词时,所以还是要加载字幕来看。据我所知,mplayer 只能用 j 键切换字幕而不能同时加载两个字幕。所以,频繁切换中英文字幕是比较累的。在Linux 学习中,我发现用命令行,只要两句话就可以自制一个双语字幕,耗时不会超过五秒。

首先去字幕站下载与你视频版本相对应的中英文srt字幕,国内当然是射手网了,最大最齐,一般都有srt格式的,sub格式的就没办法喽,因为那是图形字幕,没法修改的。

解压开你下载的压缩包,先要对比一下中英文字幕的时间轴是不是一样的,要想制作一个完美的双语字幕,时间轴要相同才行(如果不同,你看完本文后应该可以举一反三),至少中英文的句数应该一样并能相互一一对应。通常来说,同一个字幕组出的中英文字幕时间轴应该是一样的,只是语言不同而已,制作双字幕只是将中英文的两个文件合并为一个文件,对比工具同样推荐命令行的 Vimdiff,如果两个字幕中时间轴存在小的差异的话也很方便用命令修正。

好,先假设我们手上有 mov.chs.srt mov.eng.srt 两个字幕(以下为模拟过程,句首为#号的为注释说明)。

#第一步,合并差异:
diff mov.eng.srt mov.chs.srt -D diff > mov.ec.srt #我的习惯是英文字幕放在第一行

# -D 参数是合并差异,后面diff为自行添加的差异标识
#(文字描述,你怎么写都可以),是必须的。man 手册中是这样说的:
-D NAME --ifdef=NAME #Output merged file to show ‘#ifdef NAME’ diffs.

#现在我们生成了一个合并好的字幕,但中间凡是差异合并的地方都有以 #ifdef 及 #endif
#开头的注释句标识,剩下的工作只要把这样的句子去掉就大功告成了。再用一条命令:
cat mov.ec.srt |grep -v '^\#.*' > mov.srt

#用 grep 比在vim中用正则还方便些,当然这也是用的正则,重点在 -v 这个参数,help 中有说:
-v, --invert-match # select non-matching lines
#即选择不匹配的行,正是我们想要的。单引号中是正则表达式匹配以 # 开头的行。

可以将上面两条命令合并一下,处理更简单:
diff mov.eng.srt mov.chs.srt -D diff|grep -v '^\#' > mov.srt
#将'^\#.*' 可以简化成 '^\#'

2 Comments

  1. bonede Comments @ 18:34:43 on 2007-03-12

    这样也行,强!

  2. oceanboo Comments @ 17:43:34 on 2007-05-23

    哈哈,太强了,非常佩服,解决了我一直以来看电影的一个问题。

    另外能否跟你blog做一个交换链接
    在您这里也让我学到了不少东西:)非常感谢

    我的Blog地址: http://www.oceanboo.cn