Chinaunix首页 | 论坛 | 博客
  • 博客访问: 442840
  • 博文数量: 161
  • 博客积分: 5005
  • 博客等级: 上校
  • 技术积分: 1090
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-20 16:38
文章分类

全部博文(161)

文章存档

2011年(21)

2010年(33)

2009年(89)

2008年(18)

我的朋友

分类: LINUX

2009-05-18 11:58:57

 问题描述:
    现有文件: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
阅读(1047) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~