2010年4月27日星期二

MPlayer下的字幕播放设置

摘要
MPlayer是一款优秀的视频播放软件,它支持现在的大多数视频格式,是在linux下播放视频的不错到选择。由于MPlayer在字幕播放上有着诸多到问题,本文将试图介探讨在MPlayer正确地显示中文字幕。

本文所采用到方法在fedora9,10以及freebsd7.0,7.1英文界面下测试通过。

一、安装MPlayer
安装MPlayer可以直接安装别人编译打包好的安装包,或者可以从官方网站(www.mplayerhq.hu)下载源码包自行编译安装。

在fedora系列中你可以用yum来安装MPlayer和它的图形界面gmplayer。
$yum install mplayer gmplayer

在freebsd中可以用pkg_add来安装
$pkg_add -r mplayer gmplayer

如果自己采用源码来编译安装,要确保你采用了下面到参数:
--enable-gui 安装图形界面
--enable-freetype freetype支持
--enable-fontconfig fontconfig字体管理工具支持

二、中文字体
你需要安装中文字体才能播放中文字幕,尤其是在使用英文的系统下。MPlayer支持下面两种字体:
(1) TrueType字体
中文TrueType字体你可以采用系统自带的字体或者是microsoft的字体。microsoft的字体相对要美观得多,如我的MS字体在fedora中放置在/usr/share/fonts/win/目录下。MPlayer还有一个默认字体:$HOME/.mplayer/subfont.ttf,当没指定或者找不到字体到时候使用。你可以把你喜欢到字体设置成默认字体,如
cp /usr/share/fonts/win/simhei.ttf ~/.mplayer/subfont.ttf
或者
ln -s /usr/share/fonts/win/simhei.ttf ~/.mplayer/subfont.ttf

(2)font.desc字体
如果不幸地是你的MPlayer没有编译对FreeType字体支持,你就只能从官方网站下载字体文件,例如 gb2312-kai.tgz。实际上它是一个压缩包包含了一系列文件,其中一个font.desc就是字体描述文件。

播放到时候选择正确到字体十分的重要,要不你的字幕字幕都是乱码。
A、font.desc字体的话,要加上-unicode参数。
B、TrueType字体的话,要加上-subcp xxx参数。其中xxx可能为:cp936、gb、gbk等等,具体要看字幕的编码格式。

三、字幕的编码格式
例如我们下载来一个多语言的字幕文件:
$ ls
cd1.avi cd1.Chs.srt cd1.Cht.srt cd1.Eng.srt
其中有简体中文,繁体中文和英文格式。

总的来说,字幕文件是什么编码格式,-subcp后面就加上相应的编码。
例如,
A 字幕文件,cd1.Chs.srt,是GBK编码,用-subcp gbk
B 字幕文件,cd1.Cht.srt,是GB编码,用-subcp gb
C 字幕文件,cd1.Eng.srt,是utf8编码,用-utf8
utf8 的情况很少见,因为多数字幕是国人在windows下制作的,使用的都是GB系列的编码格式,不过你可以把原来的GB系列编码格式文件转换为utf8格式。要注意的是用font.desc加unicode的方法是不能正常显示utf8编码的字幕文件的。

一般的,使用-subcp cp936 就能正常显示简体中文字幕。你还可以用iconv -l来显示你的系统中已知的字符集,来帮助你选择编码。

四、MPlayer配置文件
MPlayer的配置文件放置在两个地方/etc/mplayer/和$HOME/.mplayer/,其中于字体相关的配置文件分别是/etc/mplayer/mplayer.conf和$HOME/.mplayer/config。/etc/mplayer/mplayer.conf是全局配置文件,我们注意到它其中的几行:
# Use fontconfig for font selection
fontconfig = yes

# Default font for unstyled subtitles
font = "Sans"
字体管理工具fontconfig默认是开启的并设置了默认字体为"Sans"。在MPlayer的文档中关于Font有这样的说明(man mplayer):

-font
Search for the OSD/SUB fonts in an alternative directory (de-
fault for normal fonts: ~/.mplayer/font/font.desc, default for
FreeType fonts: ~/.mplayer/subfont.ttf).
NOTE: With FreeType, this option determines the path to the text
font file. With fontconfig, this option determines the fontcon-
fig font name.

EXAMPLE:
-font ~/.mplayer/arial-14/font.desc
-font ~/.mplayer/arialuni.ttf
-font ’Bitstream Vera Sans’

-fontconfig (fontconfig only)
Enables the usage of fontconfig managed fonts.
NOTE: -ass automatically turns this on unless explicitly over-
ridden with -nofontconfig.

这里提到了MPlayer支持的3种字体设定方式:
a, 在使用fontconfig时,指定fontconfig的字体名
b, 在不使用fontconfig时,指定Truetype字体文件路径
c, 在不使用fontconfig时,指定常规字体文件font.desc路径
如果指定的文件路径不存在,则使用默认字体路径。

fontconfig的字体名就是字体在系统中的名字,例如宋体的英文字体名是"SimSun",雅黑的名字是"Microsoft YaHei"。

五、Let's play
现在我们终于可以开始娱乐一下了。由于fontconfig关系到字体,选择下面我们就fontconfig开启和关闭两种方式来播放我们到视频。
假如我们下载来一个多语言的视频:

[[email protected] test]$ ls
cd1.avi cd1.Chs.srt cd1.Cht.srt cd1.Eng.srt
[[email protected] test]$

字幕文件到编码格式我们在上面已经说过了,那么
(1)我们想用宋体来播放简体中文的字幕
mplayer cd1.avi -sub cd1.Chs.srt -subcp cp936 -fontconfig -font "SimSun"
如果fontconfig是默认打开到,你可以省略-fontconfig 这个参数,下同。或者关闭fontconfig,我们自己选择字体
mplayer cd1.avi -sub cd1.Chs.srt -subcp cp936 -nofontconfig -font /usr/share/fonts/simsun.ttc

(2)如果你觉得宋体不如雅黑好看,那么你可以:
mplayer cd1.avi -sub cd1.Chs.srt -subcp cp936 -fontconfig -font "Microsoft YaHei"
或者
mplayer cd1.avi -sub cd1.Chs.srt -subcp cp936 -nofontconfig -font /usr/share/fonts/MSyahei/msyh.ttf

(3)错误的方式
如果fontconfig默认打开,而你又指定了字体的路径,或者fontconfig已经关闭,而你却指定来字体的名字,这都可以使得MPlayer不能够正确地播放字幕。如
mplayer cd1.avi -sub cd1.Chs.srt -subcp cp936 -fontconfig -font /usr/share/fonts/simsun.ttc
fontconfig已经打开,却指定来一个不存在到字体名字“/usr/share/fonts/simsun.ttc”

mplayer cd1.avi -sub cd1.Chs.srt -subcp cp936 -nofontconfig -font "SimSun"
fontconfig已经关闭,却指定来一个不存在的字体路径。

(4)同时载入多个字幕
[[email protected] test]$ ls
cd1.avi cd1.Chs.srt cd1.Cht.srt cd1.Eng.srt
对于上面的多个字幕,一个个载入太麻烦来。其实mplayer还有一个聪明的参数可以使用的,就是
-sub-fuzziness
Adjust matching fuzziness when searching for subtitles:
0 exact match
1 load all subs containing movie name
2 load all subs in the current directory
可以使用-sub-fuzziness 2来让mplayer加载目录下的所有字幕文件,播放时可以通过j键切换。
mplayer cd1.avi -sub-fuzziness 2

(5)播放vobsub格式字幕(*.sub)
vobsub字幕字型是内嵌的,可以不用选择字体,此时字幕文件名跟媒体文件名相同(后缀不同)
mplayer cd1.avi

(6)播放内嵌字幕的mkv媒体文件
此时可以用-sid XXX 参数来选择内嵌到字幕。
首先,我们查看一下它内嵌来多少种字幕:
mplayer Back.to.the.Future.1985.HDTVRip.x264.AAC.HALFCD-TLF.mkv
其中有输出
Playing Back.to.the.Future.1985.HDTVRip.x264.AAC.HALFCD-TLF.mkv.
libavformat file format detected.
[lavf] Audio stream found, -aid 0
[lavf] Video stream found, -vid 1
[lavf] Subtitle stream found, -sid 0
[lavf] Subtitle stream found, -sid 1
[lavf] Subtitle stream found, -sid 2
VIDEO: [H264] 640x352 0bpp 23.976 fps 0.0 kbps ( 0.0 kbyte/s)
==========================================================================

可以看到有3中字幕,编号从0到2
[lavf] Subtitle stream found, -sid 0
[lavf] Subtitle stream found, -sid 1
[lavf] Subtitle stream found, -sid 2
那么我们就可以用-sid 0,-sid 1或者-sid 2来指定字幕:
mplayer Back.to.the.Future.1985.HDTVRip.x264.AAC.HALFCD-TLF.mkv -sid 0 -subcp cp936 -font "SimSun"

(7)播放内嵌字幕的OMG媒体文件
同mkv。

六、MPlayer播放字幕到其他一些技巧
(1)字幕字体大小的设定
用MPlayer播放时显示的字幕字体大了点,有时字数一多就要多行显示,实在不太行。此时可以用-subfont-autoscale和-subfont-text-scale来调整字体大小。
如:
mplayer Back.to.the.Future.1985.HDTVRip.x264.AAC.HALFCD-TLF.mkv -sid 0 -subcp cp936 -font "SimSun" -subfont-autoscale 2 -subfont-text-scale 4

这两个参数后,字体大小就比较满意。

七、配置文件
上面命令很多也很长,记忆起来不容易,敲命令也很麻烦。那么我们可以把它写入配置文件。前面我们说过了MPlayer字幕相关到配置文件有两个/etc/mplayer/mplayer.conf和$HOME /.mplayer/config,MPlayer运行时现读入前者,后读入后者。配置时我们要注意他们到循序。建议修改$HOME/.mplayer/config

## 使用fontconfig
fontconfig = yes
font = "SimSun"

或者
## 不使用fontconfig
fontconfig = no
font = "/usr/share/fonts/simsun.ttf"

然后在加上:
subcp=cp936

八、本文由godmoeny编写,转载请注明。

附录:
我到配置文件

# Write your default config options here!

# -----------------------
# test by glf
#
#视频输出以xv模式,启用视频加速,占用资源少
vo=xv

# 使用fontconfig
fontconfig = yes
font = "SimSun"

# 不使用fontconfig
#fontconfig = no
#font = "/usr/share/fonts/win/simsun.ttf"

#字幕加载
#1 加载文件名相同的字幕; 2 加载当前目录所有字幕文件;可按J键切换
#sub-fuzziness=2

#字幕编码(使用TTF字体时使用)
subcp=cp936

#字幕缩放
#0 不自动缩放;
#1 按电影高度缩放;
#2 按电影宽度缩放;
#3 按电影对角线缩放(默认值)
subfont-autoscale=2

#OSD字幕的自动缩放系统(屏幕尺寸的百分比),值范围为0~100,默认值为6
subfont-osd-scale=6
#设置字幕文本的自动缩放系数(屏幕尺寸的百分比),值范围为 0~100,默认值为5
subfont-text-scale=4

#允许视频缩放
zoom = yes

没有评论:

发表评论