|
1.4 字幕和OSD
MPlayer能在播放电影的同时显示字幕。目前支持下列格式:
VobSub
OGM
CC (closed caption)
Microdvd
SubRip
SubViewer
Sami
VPlayer
RT
SSA
MPsub
AQTitle
JACOsub
MPlaye可以把上面列出的字幕格式(除了前三个)转换成下列的格式,使用下列选项:
MPsub: -dumpmpsub
SubRip: -dumpsrtsub
Microdvd: -dumpmicrodvdsub
JACOsub: -dumpjacosub
Sami: -dumpsami
使用不同格式的命令行选项稍有不同:
VobSub字幕
VobSub字幕包括一个大的(几兆).sub文件,和可选的.idx和/或者.ifo文件。
用法: 如果你有类似sample.sub,sample.ifo,sample.idx之类的文件 -- 你必需使用-vobsub sample -vobsubid <id>的参数(当然必要时加上路径)。 -vobsubid 选择类似于播放DVD时的-sid,用它你可以选择不同的字幕轨道(语言)。当省略-vobsubid选项时, MPlayer将尝试使用-slang中指定的语言,如果没有找到将使用.idx文件中的langidx项指定的语言,如果这些尝试都失败了,那就将没有字幕显示。
其它字幕
其它格式由一个单一的包含时间,位置和正文信息的文本文件组成。
用法: 如果你有类似sample.txt之类的文件,你必须使用-sub sample.txt (可以加上完整路径)。
调整字幕的时间和位置
-subdelay<sec>
延迟字幕< sec >秒。可以是负数。
-subfps<rate>
规定字幕文件按每秒多少帧速度显示(浮点数)
-subpos<0-100>
规定字幕显示的位置。
如果你使用MicroDVD字幕文件时遇到电影和字幕之间的延迟不断增加的问题,很有可能你的电影文件和字幕文件的帧速度不同。
请注意,MicroDVD字幕格式用绝对帧数来计时,因此-subfps选项不能用于这种格式。因为MPlayer没法猜测字幕文件的帧速度,你必须手工修改它。在MPlayer的FTP站点的contrib目录中有一个小的perl脚本可以替你做这种转化。
当你播放一个电影时MPlayer将尝试猜测你想要使用的字幕文件,在大多数情况下,字幕文件和电影文件在同一个目录下,并且有相同的名字,你不需要设置有关字幕的选项,只要正常播放电影就可以了,MPlayer会自动播放字幕。
关于DVD字幕,请看DVD一节。
1.4.1 MPlayer自己的字幕格式(MPsub)
MPlayer引入一种称为MPsub的新的字幕格式。它由Gabucino设计。基本上,其主要的特性是基于动态时间 (虽然它有基于帧的模式)。例如(引自DOCS/tech/mpsub.sub):
# first number : wait this much after previous subtitle disappeared
# second number : display the current subtitle for this many seconds
15 3
A long long, time ago...
0 3
in a galaxy far away...
0 3
Naboo was under an attack.
因此如你所见,主要的目标是使字幕的编辑/计时/合并/分割变得容易。同时,如果你 -- 比方说 -- 有一个SSA字幕但是它与你的电影却有严重的时间/延迟问题,你只要简单运行mplayer dummy.avi -sub source.ssa -dumpmpsub。在当前目录中将生成一个dump.mpsub文件,它包含源字幕的正文,但是使用MPsub格式。然后,你就能字幕中自由地添加或减去任意秒。
字幕的显示使用一种称为'OSD', On Screen Display的技术。OSD被用来显示当前的时间,音量条,进度条等等。
1.4.2 安装OSD和字幕
你需要一个MPlayer字体包来使用OSD和字幕功能。有许多方法获得它:
从MPlayer站点下载准备好的字体包。注意:当前可用的字体限仅限于iso 8859-1/2的支持,但在FTP占的contrib/font部分有其它一些(包括朝鲜语,俄语,8859-8等等)用户制作的字体。
字体应该有正确的font.desc文件用来把unicode中字符位置映射到字幕文件实际使用的编码页。另一种解决方法是把字幕用utf8格式编码然后使用-utf8选项或者将字幕文件命名为<video_name>.utf放在与视频文件相同的目录中。将不同的编码页转换到utf8编码可以通过使用 konwert(Debian)或者iconv(Red Hat)程序完成。
一些URL:
ftp://ftp.mplayerhq.hu/MPlayer/releases/ -- ISO字体
ftp://ftp.mplayerhq.hu/MPlayer/contrib/fonts/ -- 用户制作的各种各样的字体
http://realtime.ssu.ac.kr/~lethean/mplayer/ -- 朝鲜字体 & RAW的插件
使用TOOLS/subfont-c下的字体制作工具,它是一个能将TTF/Type1等字体转换成mplayer字体包的一个完整的工具。 (详细情况请看TOOLS/subfont-c/README)
使用TOOLS/subfont-GIMP下的GIMP字体生成插件(注:你同时也必须有HSI RAW插件,见下面的URL)
使用TrueType(TTF)字体,通过freetype库。必须使用2.0.9或更高的版本!然后你有两种方法:
使用-font /path/to/arial.ttf选项来在每次播放时指定一个TrueType字体文件/LI>
创建一个符号链接:ln -s /path/to/arial.ttf ~/.mplayer/subfont.ttf
如果你使用非TTF字体,把你下载的文件UNZIP到~/.mplayer或者$PREFIX/share/mplayer。然后将其中之一改名或者符合链接为font(例如:ln -s ~/.mplayer/arial-24 ~/.mplayer/font)。你现在应该在电影的左上角看见一个计时器(用"o"键可以关上它)。
OSD有4种状态:(用'o'键切换)
音量条+进度条(默认)
音量条+进度条+计时器+搜索中显示文件位置百分比
音量条+进度条+计时器+媒体总时间
只有字幕
你能通过在config文件中设置osdlevel=变量,或者用命令行选项-osdlevel来改变默认行为。
1.4.3 OSD菜单
MPlayer有一个完全用户自定义的OSD菜单接口。
注意:Preferences菜单目前不能使用!
安装
编译MPlayer时在./configure时加上--enable-menu参数
确保你安装了OSD字体
把etc/menu.conf复制到你的.mplayer目录
把etc/input.conf复制到你的.mplayer目录,或者系统通用的MPlayer配置目录(默认为:/usr/local/etc/mplayer)
检查并编辑input.conf来启用菜单控制键(在那里有描述).
像下面的例子这样启动MPlayer:
$ mplayer -menu file.avi
按你所定义的菜单键
1.5 RTC
在MPlayer中有三种计时方法。
使用老方法,你不必做任何事情。它使用usleep()调整A/V同步,达到+/-10ms的准确性。但有些情况下同步应该调整的更精确。
新的定时器代码使用PC的RTC(Real Time Clock)完成这个任务,因为它有精确到1ms的计时器。当它可用时会自动使用它,但需要root权限,或一个setuid root的二进制的MPlayer或者一个适当配置的内核。
如果你使用2.4.19pre8或以上的内核你能通过/proc文件系统来调整普通用户的最大RTC频率。使用下列命令来允许普通用户使用RTC:
echo 1024 > /proc/sys/dev/rtc/max-user-freq
如果你没有这么新的内核,你也可以修改drivers/char/rtc.c中的一行并且重新编译你的内核。找到下面这一段
* We don't really want Joe User enabling more
* than 64Hz of interrupts on a multi-user machine.
*/
if ((rtc_freq > 64) && (!capable(CAP_SYS_RESOURCE)))
把64改成1024。当然你应该确实明白你做了什么。
你能在状态行上看到新的计时器的效果。
一些使用speedstep功能CPU的笔记本的BIOS的电源管理不能很好的与RTC协同工作。音频和视频可能会不同步。在给你的笔记本加电之前将外部电源接上似乎会有帮助。你总能用-nortc选项关闭RTC支持。一些硬件连接器(在ALi1541主板上使用非DMA的DVD光驱上)RTC定时器的使用会造成跳跃的播放。在这些情况下,推荐使用下面的方法。
第三个定时器代码可以用-softsleep选项打开。它有RTC的效果,但是它不使用RTC。另一方面,它要使用更多的CPU。
注意:永远不要将setuid root的MPlayer安装在多用户系统上!这显然会让任何人得到root权限。
2. 特性
2.1 支持格式
首先澄清一个普遍的错误是非常重要的。 当人们看到以.AVI为扩展名的文件时,他们立即得出结论,认定它不是MPEG文件。那种看法是不对的。至少不完全对。与一般人的看法相反这种文件能包含MPEG1视频。
如你所见,一种编码方式与一种文件格式是不一样的。
视频编码格式的例子有:MPEG1,MPEG2,DivX,Indeo5,3ivx。
文件格式的例子有:MPG,AVI,ASF。
在理论上,你能把OpenDivX视频和MP3音频放到MPG格式的文件中。然而,大多数播放器将无法播放它,由于他们期待的是MPEG1视频和MP2音频(不同于AVI格式,MPG没有必要的区域来描述其视频和音频流)。或者你可以把MPEG1视频放到AVI文件中。FFmpeg和MEncoder就能制作这样的文件。
2.1.1 视频格式
2.1.1.1 MPEG文件
MPEG文件会以不同的形式出现:
MPG:这是MPEG文件格式的最基本形式。它包含MPEG1视频和MP2(MPEG-1 layer 2)或者极少数是MP1音频。
DAT:这是与MPG完全相同的格式,只是换了扩展名。它在Video CD上使用。因为制作VCD的方法和Linux的设计, DAT文件不能直接播放也不能作为普通的文件从VCD上复制下来。你必须使用-vcd选项来播放Video CD。
VOB:这是用在DVD上的MPEG文件格式。它与MPG一样,加上能包含字幕或者非MPEG(AC3)音频的能力。它包含编码的MPEG2视频和通常是AC3的音频,但是,MP2和非压缩的LPCM DTS音频也被允许使用。
参见DVD一节!
MPEG文件中的帧序列组成独立的组。这意味着你能用标准的文件工具(像dd,cut)切割和合并MPEG文件,并且得到的文件还是完全可用的。
MPG的一个重要的特性是它们有一个描述视频流长宽比的区域。例如SVCD有480x480的分辨率的视频,而在文件头中的那个区域被置为4:3,这样它以640x480的分辨率被播放。AVI文件没有这个区域,因此他们必须在编码或者播放时用-aspect重新缩放。
2.1.1.2 AVI文件
由微软设计,AVI(Audio Video Interleaved)是一种普遍的多用途格式,目前被大多数DivX和DivX4视频所使用。它有许多已知的弊端和缺点(比如在流播放时)。它支持1个视频流和0到99个音频流。文件大小限制是2GB,但是现在存在一种扩展格式称为OpenDML允许更大的文件。微软目前强烈反对使用它并鼓励使用ASF与WMV。不是所有人都在乎这一点。
有一个hack允许AVI文件包含Ogg Vorbis音频流的,但这使他们与标准的AVI不兼容。MPlayer支持播放这种文件。搜索功能也被植入,但由于编码低劣的文件的混乱的文件头使这项功能被严重限制了。遗憾地是,目前唯一能建立这种文件的编码器, NanDub,就存在这个问题。
注意:DV照相机建立的未经加工的DV流被DV grabbing utilities转换成两种不同类型的AVI文件。所以AVI将或者包含 MPlayer可以播放的分离的音频与视频流,或者是未经加工的DV流,它的支持正在开发中的。
有两种类型的AVI文件:
交错的:音频和视频内容是交错的。这是标准使用方法。被推荐且多半都使用。一些工具以错误的同步方式建立交错的AVI。 MPlayer认为这些文件是交错的,这会导致A/V不同步,在搜索时最为明显。这些文件应该被当作非交错的文件来播放 (使用-ni选项)。
非交错的:首先是整个视频流,然后是整个音频流。因此这需要大量的搜索,使用网络或者CD-ROM播放变的困难。
MPlayer支持两种AVI文件的计时方式:
基于bps: 它基于视频与音频流的比特率/采样率。这种方法被大多数播放器使用,包括avifile和Windows的媒体播放器。这种方法在遇到文件头损坏的文件,以及文件创建时使用VBR音频却没有使用VBR兼容的编码器的情况时将导致A/V不同步(多半在搜索时)。
基于交错方式: 它不使用文件头的比特率,而是使用交错的音频和视频块的相关位置,使VBR音频的编码低劣的文件可以播放。
任何视频和音频的编码格式都允许使用,但注意大多数播放器对VBR音频的支持都不好。文件格式允许使用VBR音频,但是大多数播放器期待CBR音频,这样它们无法播放VBR。VBR是不常见的而且微软的AVI规格仅描述了CBR音频。大多数AVI编码器/多路编排器在使用VBR音频时会创建坏的文件。目前已知的只有两个例外:NanDub和MEncoder。
2.1.1.3 ASF/WMV文件
ASF(active streaming format)格式来自微软。他们开发了ASF的两个变种,v1.0和v2.0. v1.0被他们的媒体工具(Windows媒体播放器和 Windows媒体编码器)使用并且是保密的. v2.0被公开并申请专利 。当然,他们是不同的,完全没有任何兼容性(这只是又一个法律游戏)。 MPlayer>只支持v1.0格式因为没有任何人见过v2.0格式的文件 。注意,ASF文件现在常以.WMA或者.WMV的扩展名出现。
2.1.1.4 QuickTime/MOV文件
这些格式是由苹果设计的,能包含任何编码格式,CBR或者VBR。他们通常使用.QT或者.MOV的扩展名。自从MPEG4组织选择QuickTime作为 MPEG4的推荐文件格式后,他们的MOV文件以.MPG或.MP4的扩展名(有趣的是这些文件的视频和音频流是真正的MPG和AAC文件。你甚至能用 -dumpvideo和-dumpaudio选项提取他们。)。
注意:大多数新的QuickTime文件使用Sorenson的视频和QDesign Music的音频。参见我们的Sorenson编解码器部分。
2.1.1.5 VIVO文件
MPlayer乐于解码VIVO文件格式。这个格式的最大缺陷在于它没有索引块,也没有一个固定的包大小或者同步字节和大多数文件甚至缺乏关键帧,所以别想着搜索了!
VIVO/1.0文件的视频编码格式是标准的h.263。VIVO/2.0文件的视频编码格式是一个经过修改的,非标准的h.263v2。音频也使一样,它可以是g.723(标准的),或Vivo Siren。
关于安装指导参见VIVO视频编码格式和VIVO音频编码格式部分。
2.1.1.6 FLI文件
FLI被Autodesk Animator使用的一种很老的文件格式,但是它是网上小动画普遍使用的一种文件格式。MPlayer 能读取并解码FLI电影寻求在它们中搜索(当使用-loop选项循环播放时有用)。FLI文件没有关键帧,因此图画在搜索后短时间内将是混乱的。
2.1.1.7 RealMedia(RM)文件
是的,MPlayer能读取(demux)RealMedia(.rm)文件。搜索功能能工作,但是你必须明确地指定-forceidx选项 (这种格式支持关键帧)。这里是被支持的RealVideo和RealAudio编解码器的列表。
2.1.1.8 NuppelVideo文件
NuppelVideo是电视截取工具(据我所知 。MPlayer 能读取它的.NUV文件(只能是NuppelVideo 5.0)。那些文件能包含未压缩的YV12,压缩的YV12+RTJpeg,压缩的YV12+lzo和压缩的YV12 RTJpeg+lzo帧。 MPlayer能解码所有这些格式(并且用MPlayer把它们编码成DivX/etc!)。搜索功能能工作。
2.1.1.9 yuv4mpeg文件
yuv4mpeg/yuv4mpeg2是用于mjpegtools programs 的文件格式。你能用这些工具进行这种格式的视频截取,制作,过滤或编码。这种文件格式是一个非压缩的YUV 4:2:0图象序列。
2.1.1.10 FILM文件
这种格式用于老的世嘉土星CD-Rom游戏。
2.1.1.11 RoQ文件
RoQ文件是用于ID的一些游戏例如Quake III和Return to Castle Wolfenstein的多媒体文件。
2.1.1.12 OGG/OGM文件
这是Xiphophorus的一个新的文件格式。它能包含任何视频或者音频编码格式, CBR或者VBR。要想播放它,你需要在编译MPlayer之前安装libogg和libvorbis。
2.1.1.13 SDP文件
SDP是一个IETF标准格式,用来描述视频和/或者音频的RTP流。 (需要"LIVE.COM Streaming Media"库)。
2.1.1.14 PVA文件
PVA是DVB电视附带的Windows下面的软件(比如:MultiDec,WinTV)使用的类似MPEG的格式。
PVA规格的描述可以在下面地址下载http://www.technotrend.de/download/av_format_v1.pdf
2.1.1.15 GIF files
GIF格式是网页图象的普遍格式,有两种版本的GIF规格,GIF87a和GIF89a。主要的区别在于GIF89a允许动画。MPlayer通过使用libungif库或者另一个libgif-compatible的库支持这两种规格。非动画的GIF显示为单帧的视频。(使用-loop和-fixed-vo选项来显示更长的时间。)
MPlayer目前不支持在GIF文件中搜索。GIF文件并不一定有一个固定的帧大小,或者帧速率。而且,每一帧都有独立的大小并且应该被放在一个固定的地方并且有固定的尺寸。帧速率是通过使用每一帧前面的一个控制块以百分之一秒为单位控制这一帧显示的时间长短来实现的。
标准的GIF文件包含24-bit的RGB帧和最多8-bit的索引调色板。这些帧大多以LZW格式压缩,但有些GIF编码器生成未压缩的帧以避免LZW压缩的专利问题。
如果你的发行版没有包含libungif,可以从libungif主页 下载。技术细节你可以参考GIF89a规格.
2.1.2 音频格式
MPlayer是一个电影播放器而不是媒体播放器,虽然它能播放一些音频文件(他们将在下面的部分中列出)。不推荐这种使用MPlayer的方法,你最好使用xmms。
2.1.2.1 MP3文件
你可能在播放有些MP3文件时遇到问题,MPlayer将它们错误的检测为MPEG文件并且不能正常播放或者完全不能播放。如果要修正这个问题就必须放弃对有些被破坏的MPEG文件的支持,所以在可以预见的将来仍然会是这样。man page中描述的 -demuxer标签在这些情况下可能会帮助你。
2.1.2.2 WAV文件
2.1.2.3 OGG/OGM文件(Vorbis)
要求正确的安装libogg和libvorbis。
2.1.2.4 WMA与ASF文件
2.1.2.5 MP4文件
2.1.2.6 CD音频
MPlayer可以使用cdparanoia(的库)播放CDDA(音频CD)。在这部分没有包含cdparanoia的特性的列表。
看man page了解如何通过-cdda选项向cdparanoia传递参数。
2.1.2.7 XMMS
MPlayer可以使用XMMS的输入插件来播放各种格式。现在有用于SNES game tunes, SID tunes(from Commodore 64), 很多Amiga 格式, .xm, .it, VQF, musepack, Bonk, shorten和大量别的插件。你可以在XMMS的输入插件页找到它们。
要使用这个特性你必须安装了XMMS并在编译MPlayer的时候使用./configure --enable-xmms。如果这样不起作用,你可能需要用--with-xmmsplugindir和--withxmmslibdir 开关显式指定XMMS的插件和库的路径。 |
|