查看: 1145|回复: 1
|
双语 Srt 字幕
[复制链接]
|
|
转自:http://yx.takeback.net/dual-subtitle.html
在以上网看到不明白,希望懂的朋友能交流
) 在Linux 学习中,我发现用命令行,只要两句话就可以自制一个双语字幕,耗时不会超过五秒。
首先去字幕站下载与你视频版本相对应的中英文srt字幕,国内当然是射手网了,最大最齐,一般都有srt格式的,sub格式的就没办法喽,因为那是图形字幕,没法修改的。
射 手的字幕都是压缩打包好的,下载回来后解压开,先要大概对比一下中英文字幕的时间轴是不是一样的,通常来说,同一个字幕组出的字幕时间轴应该是一样的,只是语言不同而已,制作双字幕只是将中英文的两个文件合并为一个文件,对比工具同样推荐命令行的 Vimdiff,如果两个字幕中时间轴存在小的差异的话也很方便用命令修正。
好,先假设我们手上有 mov.chs.srt 和 mov.eng.srt两个字幕。
第一步,合并差异:
diff mov.chs.srt mov.eng.srt -D diff > mov.ec.srt
-D 参数是合并差异,后面diff为自行添加的差异标识(文字描述,你怎么写都可以),是必须的。man 手册中是这样说的:
-D NAME --ifdef=NAME
Output merged file to show ‘#ifdefNAME’ diffs.
OK,现在我们生成了一个合并好的字幕,但中间凡是差异合并的地方都有以#ifdef 及 #endif开头的注释句标识,剩下的工作只要把这样的句子去掉就大功告成了。再用一条命令把它搞掂:
cat mov.ec.srt |grep -v '^\#.*' > mov.srt
这句比在vim中用正则还要方便点,当然这也是用的正则,重点在 -v这个参数,help 中有说:
-v, --invert-match select non-matching lines
即选择不匹配的行,正是我们想要的。单引号中是正则表达式匹配以#开头的行。
如果很不幸,你下载的中英文字幕的时间轴差别很大,这时按照上一篇的方法制作出来的双语字幕就会出现紊乱。其实这个问题还是可以解决的。以射手网的 srt 字幕为例,每一句字幕由三部分组成:序号、时间轴、字幕文字。由于没有搜到srt 标准比较官方的资料,只发现对于 srt 字幕来说,时间轴和字幕文字是必须的,也就是说,序号可有可无。那对于时间轴差别很大的两个字幕文件来说,只要按时间顺序将其合并,上面提到的问题就迎刃而解了。
假设手中有 mov.chs.srt 和mov.eng.srt 两个文件,这两个文件的时间轴经过对比差别很大。
step 1: 先用正则去掉两个文件中每句前的序号,我使用vim,一句搞掂。总之正则语法很多编器器差异并不很大。
:%s/^\d\{1,3\}\n//g
说明:删除以最多3位数字(一般都没超过1000句)开头的行。应该也可以使用命令行管道命令操作,但我发现即使grep –extended-regexp 好像也不支持 \d 这样的简写,所以用 vim 也没什么不方便的。
Step 2: 按照上一文章中所讲命令行方法合并差异,生成一个新的文件。然后再用管道命令去除文件中以# 开头的行就宣告大功告成了。
而我只懂此种方法:把一篇中英字幕合成一篇,而不是一行行改哦!内嵌每句不能超过五行 |
|
|
|
|
|
|
|

楼主 |
发表于 8-7-2007 02:05 PM
|
显示全部楼层
没人懂吗????  |
|
|
|
|
|
|
| |
本周最热论坛帖子
|