CONAN ZONE

你越挣扎我就越兴奋

BlogJava 首页 新随笔 联系 聚合 管理
  0 Posts :: 282 Stories :: 0 Comments :: 0 Trackbacks
问题描述:
    现有文件: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
posted on 2008-07-08 22:40 CONAN 阅读(376) 评论(0)  编辑  收藏 所属分类: Linux/Unix