問(wèn)題描述:
現(xiàn)有文件: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
為學(xué)習(xí)英文需要,想要用實(shí)現(xiàn)mplayer實(shí)現(xiàn)雙字幕
解決方案:
1.將smi文件轉(zhuǎn)化為srt
mplayer -sub Friends.-.1x24.-.TOW.Rachel.Finds.Out.\[VeryCD.com\].ENG.smi -dumpsrtsub Friends.-.1x24.-.TOW.Rachel.Finds.Out.avi
如果錯(cuò)誤提示:-vo x11,那么加上這個(gè)選項(xiàng)就行了,就是:
mplayer -vo x11 -sub Friends.-.1x24.-.TOW.Rachel.Finds.Out.\[VeryCD.com\].ENG.smi -dumpsrtsub Friends.-.1x24.-.TOW.Rachel.Finds.Out.avi
這樣就會(huì)生成一個(gè)名為dumpsub.srt的文件
2.合并兩個(gè)srt文件
diff Friends.-.1x24.-.TOW.Rachel.Finds.Out.\[VeryCD.com\].CHN.srt dumpsub .srt -D diff>all.srt
-D 參數(shù)是合并差異,后面diff為自行添加的差異標(biāo)識(shí)(文字描述,你怎么寫都可以),是必須的。man 手冊(cè) 中是這樣說(shuō)的:
引用
-D NAME --ifdef=NAME
Output merged file to show ‘#ifdef NAME’ diffs.
OK,現(xiàn)在我們生成了一個(gè)合并好的字幕,如果有亂碼,修改文件編碼就ok了。但中間凡是差異合并的地方都有以 #ifdef 及 #endif 開頭的注釋句標(biāo)識(shí),剩下的工作只要把這樣的句子去掉就大功告成了。
3.去掉多余的注釋,用一條命令把它搞掂:
cat all.srt|grep -v '^\#.*'>mov.srt
-v, --invert-match select non-matching lines
選擇不匹配的行,正是我們想要的。單引號(hào)中是正則表達(dá)式匹配以#開頭的行。
mov.srt就是我們要的文件
注意:如果無(wú)法加載字幕,則很有可能是字幕中有一些亂碼,找到之后去掉就可以了
4.播放
mplayer -vo x11 Friends.-.1x24.-.TOW.Rachel.Finds.Out.avi -sub mov.srt