MPlayer和MEncoder按照GNU General Public License Version 2发布。
1.1 历史
这一年以前开始的...
我(A'rpi)已尝试Linux下的许多播放器(mtv,xmps,dvdview,livid/oms,videolan,xine,xanim,avifile,xmmp),
但是他们全都有一些问题。多半与特殊的文件或音频与视频的同步有关。他们中大多数不能同时播放MPEG1,MPEG2和AVI(DivX)文件。
许多播放器也有图象质量或者速度的问题。因此,我已决定自己写/修改一个...
使用不同格式的命令行选项稍有不同:
VobSub字幕
VobSub字幕包括一个大的(几兆).sub文件,和可选的.idx和/或者.ifo文件。
用法: 如果你有类似sample.sub,sample.ifo,sample.idx之类的文件
-- 你必需使用-vobsub sample -vobsubid 的参数(当然必要时加上路径)。
-vobsubid 选择类似于播放DVD时的-sid,用它你可以选择不同的字幕轨道(语言)。当省略-vobsubid选项时,
MPlayer将尝试使用-slang中指定的语言,如果没有找到将使用.idx文件中的langidx项指定的语言,如果这些尝试都失败了,
那就将没有字幕显示。
其它字幕
其它格式由一个单一的包含时间,位置和正文信息的文本文件组成。
用法: 如果你有类似sample.txt之类的文件,你必须使用-sub sample.txt
(可以加上完整路径)。
调整字幕的时间和位置
-subdelay延迟字幕秒。可以是负数。-subfps规定字幕文件按每秒多少帧速度显示(浮点数)-subpos规定字幕显示的位置。
如果你使用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
如果你没有这么新的内核,你也可以修改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)))
要在MPlayer中使用Win32 DLLs你需要使用"option USER_LDT"重新编译内核(除非你用的是FreeBSD -CURRENT,其中这一项是默认的)。
6.2.1 FreeBSD
如果你的CPU有SSE,使用"options CPU_ENABLE_SSE"选项重新编译内核来使用它(需要FreeBSD-STABLE,或者使用内核补丁)。
6.2.2 OpenBSD
因为gas的版本不同(relocation vs mmx)的限制,你需要分两步编译: 首先确保non-native的汇编程序当前在PATH中并运行gmake -k,
然后在确保使用native版本情况下运行gmake。
6.3 Solaris
MPlayer在Solaris 2.6或者更新的系统上应该能够正常运行。
在UltraSPARC上,MPlayer利用他们的VIS扩展(相当于MMX)的优势,目前只应用于libmpeg2, libvo以及libavcodec ,但mp3lib没有。你能在400MHz CPU上观看VOB文件。你需要安装 mLib
。
为编译它你需要GNU make(gmake,/opt/sfw/gmake),native的Solaris make不能正常工作。你用Solaris的make代替GNU make时的典型的错误信息为:
% /usr/ccs/bin/make
make: Fatal error in reader: Makefile, line 25: Unexpected end of line seen
在Solaris SPARC上,你需要GNU C/C++编译器;GNU C/C++编译器是否设置使用GNU汇编程序没有什么关系。
在Solaris x86上,你需要GNU汇编程序和GNU C/C++编译器,设置使用GNU的汇编程序!在x86平台上的mplayer代码大量使用MMX,SSE和3DNOW!
指令集,使用Sun的汇编程序/usr/ccs/bin/as不能编译通过。
configure脚本将试图查找你的"gcc"命令使用的汇编程序(如果自动检测失败,使用"--as=/whereever/you/have/installed/gnu-as"
选项告诉configure脚本你的系统中GNU的"as"在哪里)。
在Solaris x86系统上使用没有GNU汇编程序的GCC时configure的出错信息为:
% configure
...
Checking assembler (/usr/ccs/bin/as) ... , failed
Please upgrade(downgrade) binutils to 2.10.1...
(解决方法:安装并且使用配置了"--with-as=gas"的gcc)
当不使用GNU as的GNU C编译程序时的典型出错信息是:
% gmake
...
gcc -c -Iloader -Ilibvo -O4 -march=i686 -mcpu=i686 -pipe -ffast-math
-fomit-frame-pointer -I/usr/local/include -o mplayer.o mplayer.c
Assembler: mplayer.c
"(stdin)", line 3567 : Illegal mnemonic
"(stdin)", line 3567 : Syntax error
... more "Illegal mnemonic" and "Syntax error" errors ...
因为Solaris8 x86的两个bug,不能可靠地播放容量>4GB的DVD:
The sd(7D) driver on Solaris 8 x86 driver has bug when accessing a
disk block >4GB on a device using a logical blocksize != DEV_BSIZE
(i.e. CD-ROM and DVD media). Due to a 32bit int overflow, a disk
address modulo 4GB is accessed.
( http://groups.yahoo.com/group/solarisonintel/message/22516
)