9 27 2008
多行字幕合并为一行
在XP用kmp挂载双个字幕看电影是很爽的,顺便学习一下英文,并设置为忽略字幕中的换行符,也就多行对白合并为一行(指单个字幕文件),也就是最后效果一行英文一行中文。如果不合并,那么一条时间轴有3行对白,加上中文就6行了,高度太大眼睛照不顾来,中英对照看着也费劲,更不用说看画面了。
Ubuntu下我用smplayer,搜了下mplayer的双语字幕设置,这个帖子说是用cat把字幕合并(也就是把中文附加在英文底部),在加上“overlapsub=1”参数,可惜我加上这个参数mplayer就报错,看来这方法比较难搞,迟点再研究。另一种方法是直接在每个时间轴写上中英对白,还真给我找到方法,看《两条命令制作双语SRT字幕》,2条命令搞定果然了得。
不过有个问题,也就是不是中英各一行看还是比较痛苦的,懒得去看man找有没有类似的参数,想想也看,有也没用,合并忽略换成的话中英都合成一行了,所以得在合并中英字幕前单独合并,折腾一阵,用vim搞定,忘了说,是srt字幕,中英文字幕过程都一样。
- 用vim打开字幕,运行
:set nowrapscan下面要用到搜索命令,为了避免死循环,关闭回绕搜索 - 接下来是替换了
:/^\d\+\n/+2;/^\d\+\n/-2j“^\d\+\n/”表达式表示字幕的序号,“/^\d\+\n/+2;/^\d\+\n/-2”表示每2个序号之间的的内容(也就是对白了,加2行,跳过时间轴,减2行,跳过空行,字幕得写的很标准才行,算了,这是权且之计),j表示合并。 - 运行一次后按“G”条到最后,看看有多少条时间轴,然后“gg”回到开头,重复执行刚才的命令n次,画面刷刷闪动,哈哈,很有成就感,不过效率太低了,几秒才搞定,我宁愿即时显示结果。
1234@:
然后再合并这中英文,搞定,不过我发现那个方法有点不足,命令
cat mov.ec.srt |grep -v '^\#.*' > mov.srt
也就是删除开头为“#”号的行,不过字幕中旁白、诗歌、歌词等内容或许会以“#”开头,这样做就不够严谨,我改成这样
diff eng.srt chs.srt -D OINEpge > 1.srt
cat 1.srt | grep -v '^.*OINEpge.*\n' > 2.srt
用差异标识来判断(不然加来干什么?),我用的是“OINEpge”这个词,这个词我乱打的,神通广大的Google也搜不到(除了我这篇文章),这样做安全多了。
