多媒体炸药
您梦想中的 Linux 电影播放器应该做什么? 它应该播放您扔给它的任何电影/视频。 无需提问——直接播放。 它应该允许使用键盘和鼠标进行seek和音量控制。 它应该与红外遥控器配合使用,并且还可以播放电视。 它还应该播放 DVD 和 VCD。 MPlayer 可以做到所有这些,甚至更多。
MPlayer 也是一个屡获殊荣、成熟的开源程序,目前仍在积极开发中。 也许在不久的将来,将添加对 DVD 菜单、彩色字幕、画中画视频、MIDI 和音频效果插件(如 SoX 的插件)的支持。
对于 MPlayer 所做的工作而言,它的稳定性令人钦佩。 然而,它在某些情况下确实会崩溃,例如使用某些视频驱动程序时。
它是一个成熟的应用程序,没有同类产品。 MEncoder 是其配套的视频编码器程序,在视频转码方面比 FFMPEG 做得更好,尽管它有点难以使用和学习。
现在,让我们来看看 MPlayer 的魔力。 以下命令在将流 URL 重采样到 48,000Hz 并将通道组合成左右立体声后播放它
$ mplayer -af lavcresample=48000,hrtf ↪'http://mp3.streampower.be/radio1-mid.mp3'
以下命令抓取相同的 URL 流并将其转储到名为 stream.aac 的文件中
$ mplayer -dumpstream -dumpfile stream.aac ↪-softvol -softvol-max 2000 -af ↪lavcresample=48000,volnorm=2:0.5 ↪'http://mp3.streampower.be/radio1-mid.mp3'
您可以使用以下命令从另一个终端窗口打开流文件
$ mplayer stream.aac
然后会发生什么? MPlayer 的第一个实例继续将网络流转储到文件中,第二个实例为您播放它——时移互联网广播。 很酷,是吧?
大多数开关对于完成此操作不是必需的,但它们显示了 MPlayer 以如此优雅的方式使用 Linux 命令行 的能力。 -softvol 和 -softvol-max 开关调用 MPlayer 的软件音量控制功能。 它降低了信噪比,但可以将信号放大到非常高的水平。
volnorm=2:0.5 滤波器调用音量归一化音频滤波器。 第一个参数 2 指定要使用多个样本来平滑音量变化。 0.5 设置您希望将音量归一化的最大幅度。 正如您所看到的,MPlayer 提供了高度的自定义性。
命令行上的其他选项应该不难理解。
以下命令类似于上面的第一个命令。 然而,在这种情况下,您指定了一个播放列表 URL。 与上述命令不同,此命令可能不适用于您,具体取决于当您尝试时该文件是否恰好可以从 SHOUTcast 站点获得
$ mplayer -af lavcresample=48000,hrtf -playlist ↪'http://www.shoutcast.com/sbin/shoutcast-playlist.pls?rn ↪=1025&file=filename.pls'
-playlist 选项仅与流 URL 一起使用,这些 URL 在流中具有 .pls 扩展名。
您可以通过多种方式创建自己的播放列表。 以下是一种使用 find 命令的方法
$ find /home/girish/music -name "*mp3 ↪-or -name "*ogg" > ~/playlist.txt
现在,启动 MPlayer,使用
$ mplayer -playlist ~/playlist.txt
以下变体对列表进行洗牌,并以随机顺序播放歌曲,而不会重复歌曲
$ mplayer -shuffle -playlist ~/playlist.txt
自然,MPlayer 是一款媒体播放器。 您不必将自己限制为音频文件。 您可以将任何 MPlayer 可播放的媒体文件添加到组合中,包括视频、电影、电视、广播以及当然还有互联网流。
除了这种简单的基于行的播放列表格式外,MPlayer 还对 ASX、M3U 和其他流行的播放列表格式提供出色的支持。
对音频效果有很好的支持,卡拉 OK 效果对于某些歌曲尤其有趣。 它并不完美,但您可以很大程度上衰减歌曲中的人声。 使用以下命令激活卡拉 OK 模式
$ mplayer -af karaoke song.mp3
MPlayer 还具有十倍频程均衡器。 以下命令忽略中间频段,并将 31.25Hz 附近的频率放大 7dB,将 62.5Hz 放大 8dB,将 125Hz 放大 5dB,并将 4、8 和 16Hz 附近的所有频率衰减 2dB
$ mplayer -af equalizer=7:8:5:0:0:0:-2:-2:-2 video.mpg
以下命令为播放带来现场效果。 尝试将其用于听起来单调的歌曲
$ mplayer -af extrastereo song.mp3
您可以发出如下命令来播放第三首歌曲五次
$ mplayer song1.mp3 song2.ogg file.wav -loop 5
如果您想重复整个列表五次,请改为键入以下内容
$ mplayer { song1.mp3 song2.ogg file.wav } -loop 5
您还可以使用 -loop 0 来一遍又一遍地播放某些内容。
此外,还有许多专为多声道和 3D 音频设计的音频效果插件。 如果您想要一些真正高级的音频效果,请尝试 SoX 瑞士军刀。 它是另一个在专业音频效果方面表现出色的命令行应用程序。
您可以在命令行上指定多个音频滤波器,它们会按顺序串联应用。

图 1. MPlayer 音频/视频滤波器链
如果您喜欢某个音频滤波器链,并且想将生成的音频保存到文件中怎么办? 以下命令将滤波的输出保存到名为 filtered.wav 的文件中,而不是播放它
$ mplayer -ao pcm:file=filtered.wav -channels 4 -af lavcresample=48000,hrtf,pan=2:1:0:0:0.3:0.5:0.5:0:12 audio.ogg
lavcresample 滤波器将 audio.ogg 的频率重采样到 48,000Hz。
pan 滤波器是一个非常强大且复杂的滤波器。 它以各种幅度将输入音频通道混合到指定的输出通道中。
在此示例中,我们使用 -channels 开关来指定四个输入通道。 pan 的第一个参数是 2,用于指定两个输出通道。 在此之后的第一对参数中,1:0 指定馈入两个输出通道的第一个输入通道的幅度。 它以 1 的放大因子进入左声道。 第二个输入通道以 0.3 (0:0.3) 的放大因子进入右声道,第三个输入通道平均分配到两个输出通道 (0.5:0.5)。 第四个通道以 12 的放大因子进入右声道。
您可以使用以下命令将 WAV 文件重新编码为 Ogg
$ oggenc -q 9 filtered.wav
MPlayer 具有非常丰富的输入命令处理子系统,可以通过键盘、鼠标、操纵杆或 LIRC 遥控器进行操作。 您还可以自定义多个键盘按键来调用 MPlayer 的控件。
以下提供了可以配置的按键列表。 默认值非常合理,您可能不需要更改它们
$ mplayer -input keylist
您还可以使用以下命令找到 MPlayer 用于seek、音量控制、亮度校正和其他功能的控件
$ mplayer -input cmdlist
MPlayer 文档附带的 slave.txt 文件解释了如何自定义 Linux 发行版中 MPlayer 包附带的 input.conf 和 menu.conf 文件。
您还可以让 MPlayer 接受来自 FIFO 文件(FIFO 代表先进先出)的输入命令。 当它从标准输入读取媒体时,这会派上用场
$ mkfifo /tmp/fifo $ cat playlist.txt | mplayer -input ↪file:/tmp/fifo -cache 8192 -playlist -
键入以下命令可以静音,然后再次执行该命令可以取消音频静音
$ echo 'mute' > /tmp/fifo
您可以使用鼠标进行通常的seek操作。 默认情况下,鼠标滚轮配置为在两个方向上seek文件。
关于输入方法,MPlayer 对屏幕显示 (OSD) 提供出色的支持。 我通常只使用出色的可缩放 TTF 字体。 这些在 MPlayer 网站上不可用。
以下命令显示计时器
$ mplayer -osdlevel 3 -font ↪/home/girish/.ttffonts/Comicbd.ttf video.avi
有关此显示的示例,请参见图 2。
您可以使用 OSD 功能创建一个自定义菜单,以使用键盘进行浏览。 它甚至有一个控制台,您可以在其中输入 MPlayer 从属命令。
如您所见,OSD 字体的可伸缩性不会因视频缩放滤波器而中断。
以下是如何创建这种配置。 首先,在配置文件中设置大部分内容。 这是我的 ~/.mplayer/config 文件
# Write your default config options here! # Use Matrox driver by default. vo=sdl font=/home/girish/.ttffonts/comicbd.ttf vf=hue,eq,screenshot #menu-startup=yes menu=yes subfont-autoscale=3 subfont-osd-scale=8 subfont-text-scale=8 subpos=50 spuaa=4 osdlevel=3 # I love doing headstand (Sirsasana) while watching videos. #flip=yes # Decode/encode multiple files from PNG, # start with mf://filemask mf=type=png:fps=25 # Eerie negative images are cool. #vf=eq2=1.0:-0.8
输入配置和菜单配置分别存储在 input.conf 和 menu.conf 中。 menu.conf 文件需要有一个看起来像这样的部分
<cmdlist name="main" title="MPlayer OSD menu" ptr="<>" > <e name="Pause" ok="pause"/> <e name="Prev/Next" ok="pt_step 1" cancel="pt_step -1"/> <e name="Jump to ..." ok="set_menu jump_to"/> <e name="Open ..." ok="set_menu open_file"/> <e name="Open playlist ..." ok="set_menu open_list"/> <e name="Help" ok="set_menu man"/> <e name="Pref" ok="set_menu pref_main"/> <e name="Properties" ok="set_menu properties"/> <e name="Console" ok="set_menu console0"/> <e name="Quit" ok="quit"/> </cmdlist>
您需要在 input.conf 中添加此行,以告诉 MPlayer 什么事件调用菜单。 此处的设置在您单击鼠标左键时调用菜单
MOUSE_BTN0 menu main
毫不奇怪,MPlayer 理解近 12 种字幕格式,并且它也有自己的 MPSub 格式。 字幕显示选项是我见过的最丰富的。 您可以以任何大小、视频上的任何位置显示字幕,使用键盘动态移动它们,调整延迟,更改透明度,将它们格式化为多行等等。
以下是文件 subtitles.txt 的最基本用法
FORMAT=TIME # first number : wait this much after # previous subtitle disappeared # second number : display the current # subtitle for this many seconds 2 3 What is going on? 4 3 How are you doing? 8 3 You are wrong! 0 3 A long long, time ago... in a galaxy far away... 0 3 Naboo was under an attack. 0 200 I don't understand this.
告诉 MPlayer 使用此文件,命令如下
$ mplayer -sub subtitles.txt ↪-font ~/.ttffonts/Verdana.ttf video.avi
下一个命令将字幕文件以 srt 格式转储到当前目录中的 dumpsrt.sub 文件中
$ mplayer -sub subtitles.txt video.avi -dumpsrtsub
您可以通过按 Y 和 G 键快速查看文件中的所有字幕。 当然,您可以指定多个字幕文件,并且可以在它们之间切换。
想要使用 MPlayer 拍摄屏幕截图吗? 这很容易。 以下是启动播放视频时使用的示例命令
$ mplayer -vf screenshot video.avi
当您想拍摄屏幕截图时,按 S。 如果您想要每五秒钟拍摄一次屏幕截图,请尝试以下命令
$ mplayer -vo png -vf screenshot -sstep 5 video.avi
如果您想拍摄每一帧的屏幕截图怎么办? 将 MPlayer 设置为接受带有 FIFO 的从属命令,并键入以下命令
$ mkfifo /tmp/fifo $ mplayer -input file:/tmp/fifo video.mpg $ echo 'screenshot 1' > /tmp/fifo
在视频播放时,使用以下命令切换屏幕截图进程
$ echo 'screenshot 1' > /tmp/fifo
您可能需要使用 -vf spp,scale=1024:768 开关来获取全屏屏幕截图。
MPlayer 可以做更多的事情。 您可以使用 MPlayer 将图像文件编码为视频,并将帧提取到图像文件中。 您还可以使用 tv:// 选项观看模拟电视,并使用 dvb:// 选项观看 DVB 频道。 它支持各种流媒体协议,包括 RTP、RTSP、MMS、SDP 和 LIVE5555 流媒体。
列出已编译的视频输出驱动程序。
您可以使用以下命令播放带有视频的任意音频文件
$ mplayer video.mpg -audiofile audio.aac
当然,MPlayer 可以播放各种音频和视频媒体文件。 以下命令列出它们
$ mplayer -vo help $ mplayer -ao help
尝试将 -audio-demuxer 开关与 -rawaudio 一起使用。
我希望这能帮助您开始探索 MPlayer 的强大功能。 享受您的多媒体体验!
资源
MPlayer: mplayerhq.hu
MPlayer HTML 文档: www.mplayerhq.hu/DOCS/HTML-single/en/MPlayer.html
MPlayer 技巧: freshmeat.net/articles/view/747
SoX: sox.sourceforge.net
Girish Venkatachalam 是一位对 UNIX 深感兴趣的开源黑客。 在他的空闲时间,他喜欢烹饪素食菜肴并真正享用它们。 可以通过 girish1729@gmail.com 与他联系。