问题描述:
现有文件:Friends.-.1x24.-.TOW.Rachel.Finds.Out.avi
Friends.-.1x24.-.TOW.Rachel.Finds.Out.[VeryCD.com].CHN.srt
Friends.-.1x24.-.TOW.Rachel.Finds.Out.[VeryCD.com].ENG.smi
为学习英文需要,想要用实现mplayer实现双字幕
解决方案:
1.将smi文件转化为srt
mplayer -sub Friends.-.1x24.-.TOW.Rachel.Finds.Out.\[VeryCD.com\].ENG.smi -dumpsrtsub Friends.-.1x24.-.TOW.Rachel.Finds.Out.avi
如果错误提示:-vo x11,那么加上这个选项就行了,就是:
mplayer -vo x11 -sub Friends.-.1x24.-.TOW.Rachel.Finds.Out.\[VeryCD.com\].ENG.smi -dumpsrtsub Friends.-.1x24.-.TOW.Rachel.Finds.Out.avi
这样就会生成一个名为dumpsub.srt的文件
2.合并两个srt文件
diff Friends.-.1x24.-.TOW.Rachel.Finds.Out.\[VeryCD.com\].CHN.srt dumpsub .srt -D diff>all.srt
-D 参数是合并差异,后面diff为自行添加的差异标识(文字描述,你怎么写都可以),是必须的。man 手册 中是这样说的:
引用
-D NAME --ifdef=NAME
Output merged file to show ‘#ifdef NAME’ diffs.
OK,现在我们生成了一个合并好的字幕,如果有乱码,修改文件编码就ok了。但中间凡是差异合并的地方都有以 #ifdef 及 #endif 开头的注释句标识,剩下的工作只要把这样的句子去掉就大功告成了。
3.去掉多余的注释,用一条命令把它搞掂:
cat all.srt|grep -v '^\#.*'>mov.srt
-v, --invert-match select non-matching lines
选择不匹配的行,正是我们想要的。单引号中是正则表达式匹配以#开头的行。
mov.srt就是我们要的文件
注意:如果无法加载字幕,则很有可能是字幕中有一些乱码,找到之后去掉就可以了
4.播放
mplayer -vo x11 Friends.-.1x24.-.TOW.Rachel.Finds.Out.avi -sub mov.srt