mplayer 的字幕播放

[mplayer](http://www.mplayerhq.hu) 是常用的播放软件,其文档对于涉及字幕播放的一些参数不甚详尽,或者留意的人不多,这里对常用选项略作一介绍。

以一个包含了字幕的 mkv 文件为例:

$ mkvinfo ~/Vexille_2077_Nippon_Sakoku.mkv

|+ Segment tracks
| + A track
| + Track number: 1
| + Track UID: 141444798
| + Track type: video
| + Enabled: 1
| + Default flag: 1
| + Forced flag: 0
| + Lacing flag: 0
| + MinCache: 1
| + Timecode scale: 1.000000
| + Max BlockAddition ID: 0
| + Codec ID: V_MPEG4/ISO/AVC
| + Codec decode all: 1
| + CodecPrivate, length 131
| + Default duration: 41.708ms (23.976 fps for a video track)
| + Language: jpn
| + Name:
| + Video track
| + Pixel width: 864
| + Pixel height: 480
| + Interlaced: 0
| + Display width: 864
| + Display height: 480
| + A track
| + Track number: 2
| + Track UID: 3113156519
| + Track type: audio
| + Enabled: 1
| + Default flag: 1
| + Forced flag: 0
| + Lacing flag: 1
| + MinCache: 0
| + Timecode scale: 1.000000
| + Max BlockAddition ID: 0
| + Codec ID: A_AC3
| + Codec decode all: 1
| + Default duration: 32.000ms (31.250 fps for a video track)
| + Language: jpn
| + Name:
| + Audio track
| + Sampling frequency: 48000.000000
| + Channels: 6
| + A track
| + Track number: 3
| + Track UID: 3841949375
| + Track type: subtitles
| + Enabled: 1
| + Default flag: 1
| + Forced flag: 0
| + Lacing flag: 0
| + MinCache: 0
| + Timecode scale: 1.000000
| + Max BlockAddition ID: 0
| + Codec ID: S_TEXT/ASS
| + Codec decode all: 1
| + CodecPrivate, length 903
| + Language: chi
| + Name: GB
| + A track
| + Track number: 4
| + Track UID: 1264721059
| + Track type: subtitles
| + Enabled: 1
| + Default flag: 0
| + Forced flag: 0
| + Lacing flag: 0
| + MinCache: 0
| + Timecode scale: 1.000000
| + Max BlockAddition ID: 0
| + Codec ID: S_TEXT/ASS
| + Codec decode all: 1
| + CodecPrivate, length 891
| + Language: chi
| + Name: Big5
|+ EbmlVoid (size: 1024)
|+ Attachments
| + Attached
| + File name: Font.TTF
| + Mime type: application/x-truetype-font
| + File data, size: 2484512
| + File UID: 577931698
| + File description: CN-GB

这是一个比较典型的情况: 有两个 subtitles track,分别对应简体和繁体的字幕 (从 Name 分别叫 GB 和 Big5 可以看出),字幕的格式都是 [ASS](http://en.wikipedia.org/wiki/SubStation_Alpha),并自带了一个附件 (Attachment),这个附件是一个名为 Font.TTF 的字体文件。*

* 注: 顺带说一句,附带有版权的字体文件是非法的。

mplayer 默认的选项并不能让我们很好地播放这个 mkv 文件,所以需要一些配置。在这里,我首先建议编辑你的 `~/.mplayer/config` 文件,而不是通过 [MPlayer OSX](http://mplayerosx.sourceforge.net) 这样的图形化前端,因为 mplayer 同时支持用配置文件和用命令行选项来选择参数,前者调整起来要方便一些。

对于中文用户,最常见的一个选项是

subcp=gbk

这表示我们显示地指定将所有字幕文件以 GBK 编码处理,对于大部分中文字幕都是适用的。*

* 注: 近来,在 [shooter](http://shooter.cn) (射手网) 上提供的字幕有些也会以 UTF-16 格式出现,如果你用 GBK 编码无法成功看得到字幕,可以尝试换用 `subcp=utf-16` 看看。

* 注 2: mplayer 可以用 [enca](http://packages.debian.org/enca) 库来进行自动编码探测,可惜的是这个库并没有对 CJK 相关语系编码的支持,如果有可能,将 [Universal Charset Detector](http://www.mozilla.org/projects/intl/detectorsrc.html) 用在此处或许更好。

对于 ASS 格式的字幕,mplayer 有两种渲染方式,一种是忽略所有的格式信息,将它作为纯文本显示,另一种则是启用格式,一般我们希望使用后者,所以可以加上选项:

ass=1

对于自带字体的情况,默认 mplayer 并不解析它们,只有在:

embeddedfonts=1

时才会解析,所以也建议加上这个选项。

在播放 [mkv](http://matroska.org) 文件时,mplayer 默认并不会选择字幕文件的 track,所以我们需要手动用 `-sid 0` 或者 `-slang chi` 参数来选择。(你也可以将这类参数写入配置文件,不过在 mkv 不自带字幕时这样的参数不会有效。)

经过上述的调整,mplayer 已经可以很好地播放 ASS 格式字幕和 mkv 媒体文件了,不过还有一种更常见的字幕格式需要调节,那就是 srt。

srt 字幕常以外置文件的形式提供,放在媒体文件同一个目录下,以同样的前缀为名,后缀一般为 .chs.srt, .gb.srt 这样的形式,所以为了让 mplayer 的外部字幕文件查找能够找到这些文件,我们首先就应该加上下面的选项:

sub-fuzziness=1

这个选项的可选值对应:

0 = 不模糊匹配
1 = 匹配任何包含原媒体文件名的字幕文件,但包含原媒体文件名和 slang 所指定语言的优先级更高
2 = 匹配任何字幕文件

所以当同一个目录下有多个语言的字幕时,你可以用

sub-fuzziness=1
slang=chs

这样的配置来优先选择后缀为 .chs.srt 的那个。

对于 srt 字幕文件,一个有用的功能是字体大小的缩放 (因为 srt 本身没有指定字体大小),经过试验,对于一般 DVDRip (resolution 在 600×300 左右),用以下参数较恰当:

subfont-autoscale=2
subfont-text-scale=3.5

对于 720p / 1080p 的 HDRe/Remux,则应该将 `subfont-text-scale` 进一步缩小到 2.5 左右较好。

欢迎补充更多 mplayer 的使用经验。

Author: Jiang Jiang

A software engineer from China, working on some OS for a fruit company. Interested in typography and science fiction.

2 thoughts on “mplayer 的字幕播放”

  1. 你提到的sid那个参数,在mplayer里面是可以用j来在所有字幕中循环的

    另外还有个有意思的参数是 (命令行参数,不知道对应的config是怎么写)
    -vf expand=:::::16/10
    表示通过在上下/左右加黑边把视频扩展到16:10,这样字幕就不会挡在视频上而是渲染在黑边上,不过这样有个问题是会导致播放某些视频的时候出问题

  2. 我是powerpc用户。用mplayerosx预览电骡下载的未完成的rmvb文件,经常出现假死的现象,同时会留下非常大的log文件。有办法取消log吗? 有办法不让它假死吗?VLC一般都能顺利跳过未完成的视频文件,可惜不能预览rmvb文件。

    我不懂命令行操作。MPlayerOSX的图形界面预置里也有添加配置命令的选项,但我不知道怎样同时添加两条以上的配置命令。
    http://mt15.quickshareit.com/share/picture2223e1.png

Leave a Reply

Your email address will not be published. Required fields are marked *