mplayer字幕乱码问题解决方法

 

by Soli<http://soli.cnblogs.com>

 

一、拿来主义

如果你急着看电影,那就参照如下命令打开电影即可正常显示字幕:

mplayer -sub name_of_movie.srt -subcp cp936 -font /usr/share/fonts/truetype/arphic/gkai00mp.ttf name_of_movie.avi

注意:

  • -sub 后是字幕文件 -subcp 后是字幕文件的编码格式 -font 后是支持中文的字体文件
  • 另外,还须保证字幕文件的编码格式必须与-subcp选项指定的编码格式一致(可以使用iconv在各编码之间转换)。
  • 这四者缺一不可。

二、命令行参数

如果你通过上面的命令还没解决字幕乱码的问题,那请耐心地看完下面的内容,然后根据自己的具体情况做相应的调整,应该可以看到正常的字幕了。如果还是乱码,那请留言,我们一块来讨论解决。

1.字幕文件

要让mplayer显示字幕,须得有个正确的字幕文件。如果下载电影时没有字幕文件,可以去shooter.cn上去搜索下载。

一般网上下载的字幕文件都是cp936的编码格式。如果不是,可以用iconv转换。比如utf8的转换成cp936的,命令如下:

iconv -f utf8 -t cp936 -o name_of_movie.cp936.srt name_of_movie.utf8.srt

有了字幕文件,那须告诉mplayer使用哪个字幕文件。可以用-sub选项。

2.指定字幕文件的编码格式

其实,也可不用转换字幕文件的编码格式,而用mplayer的命令选项-subcp 告诉mplayer字幕文件是什么编码格式。

3.指定字幕使用的字体

如果上面两个选项都正确地指定后,字幕还是乱码,那就应该是字体的问题了。可能mplayer默认的字体文件(~/.mplayer/subfont.ttf)不支持字幕的所使用的语言(比如中文)。那就须用-font指定一个支持中文的字体。我一般使用字体/usr/share/fonts/truetype/arphic/gkai00mp.ttf

三、配置文件

经过以上三步,在命令行下启动mplayer看电影应该可以看到正常的字幕了。

但每次都输入这么长的命令确实很麻烦。下面把这些选项写入配置文件,那样就可以直接mpalyer some.avi或直接鼠标右键“用mplayer打开”啦。

1.两个执行文件、三种启动方式和四个配置文件

首先,我们需要知道的是:两个执行文件、三种启动方式和四个配置文件。两个执行文件是mplayer和gmplayer;三种启动方式是用mplayer命令、用gmplayer命令和鼠标右键;四个配置文件是/etc/mplayer/mplayer.conf、 /usr/local/etc/mplayer/mplayer.conf、 ~/.mplayer/config 和 ~/.mplayer/gui.conf。

其中,鼠标右键最终调用的可能是mplayer也可能是gmplayer,我这里这两种都存在,即右键菜单里有两个名为“用mplayer打开”的项目。

对于配置文件,前两个配置文件是全局的,不一定都存在。优先级最低。可以不去管它。

~/.mplayer/config 可用于mplayer和gmplayer。

~/.mplayer/gui.conf只用于gmplayer。所以,很多人在这个配置文件了修改了选项,而还是用mplayer启动的话,是不起作用的。

它们的关系如下表:

优先级 配置文件 mplayer gmplayer
/usr/local/etc/mplayer/mplayer.conf
使用 使用
/etc/mplayer/mplayer.conf 使用 使用
~/.mplayer/config 使用 使用
最高 ~/.mplayer/gui.conf   使用

所以,如果你习惯用mplayer那就修改~/.mplayer/config,如果你习惯用gmplayer那就修改~/.mplayer/gui.conf。最好是同时修改这两个配置文件,而不动那两个全局的配置文件。

2.修改~/.mplayer/config

先来修改~/.mplayer/config。加入以下两项:

subcp = "cp936"
font = "/usr/share/fonts/truetype/arphic/gkai00mp.ttf"

由于不同电影的字幕文件不同,所以不能在配置文件里指定字幕文件。下面会提到如何让mplayer自动识别字幕文件并加载。这里我们指定字幕文件的编码格式为cp936,所以,你必须把下载来的字幕文件转换成该编码格式。对于字体,你可以选一个自己喜欢的中文字体即可。

3.修改~/.mplayer/gui.conf

然后修改~/.mplayer/gui.conf。如下:

sub_cp = "cp936"
font_name = "/usr/share/fonts/truetype/arphic/gkai00mp.ttf"

可见,同样是配置文件,相同的配置项目的名字却是不一样的。这个要注意,别弄混了。否则mplayer会抱怨“Warning unknown option sub_cp at line 3”之类的,并且字幕依然乱码。

字幕文件的编码格式、字幕的字体都准备好了,剩下的就是让mplayer找到相应的字幕文件了。

4.让mplayer自动识别字幕文件并加载

最简单的就是修改字幕文件,使其与电影同名(不包括最后的扩展名)。

有时我们下载到的字幕文件是形如name_of_movie.chs.srt、name_of_movie.cht.srt文件。如果每次都要修改字幕文件的文件名,确实有点麻烦。其实我们可以用下面的方法让mplayer更智能的。

在配置文件~/.mplayer/config中加入下面两行:

slang = "chs,cht,eng"
sub-fuzziness=1

第二行的意思是,搜寻字幕时调整匹配模糊度:0为精确匹配(字幕文件的名字必须与电影文件名完全匹配,不含扩展名);1为装载所有包含电影名称的字幕(含slang 所指定语言的优先级更高);2为装载当前目录的所有字幕。

第一行的意思是,字幕文件名中含有chs字样的(如name_of_movie.chs.srt)被优先选用,其次是name_of_movie.cht.srt,然后是name_of_movie.eng.srt,如果这些都没有,再找其他的文件名中含有电影文件名的字幕文件。

5.针对gmplayer

另外对于gmplayer,在配置文件~/.mplayer/gui.conf中还有如下两项需要修改或注意:

sub_auto_load = "yes"
sub_unicode = "yes"

这两项可以直接修改配置文件,也可以通过图形界面来修改。方法如下:

在GMPlayer上点右键,

  • Preferences -> Subtitle & OSD
    • Encoding处选择 Simplified Chinese charset (CP936);
    • 勾选“Unicode subtitle”;
    • 取消勾选“Disable subtitle autoloading”;
  • Preferences -> Font
    • 在Font 处输入字体文件的完整路径(如/usr/share/fonts/truetype/arphic/gkai00mp.ttf);
    • 在 Encoding处选择 Unicode。

四、最后

至此,如果你还没解决字幕乱码问题,欢迎留言一起讨论。

Posted on 2009-11-17 00:26  Soli  阅读(7044)  评论(0编辑  收藏  举报