多媒体炸药

作者:Girish Venkatachalam

您梦想中的 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 瑞士军刀。 它是另一个在专业音频效果方面表现出色的命令行应用程序。

您可以在命令行上指定多个音频滤波器,它们会按顺序串联应用。

Multimedia Dynamite

图 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。

Multimedia Dynamite

图 2. 具有基本 OSD 支持的 MPlayer

您可以使用 OSD 功能创建一个自定义菜单,以使用键盘进行浏览。 它甚至有一个控制台,您可以在其中输入 MPlayer 从属命令。

Multimedia Dynamite

图 3. MPlayer OSD 菜单

Multimedia Dynamite

图 4. MPlayer 内置控制台

Multimedia Dynamite

图 5. 具有媒体文件信息 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 -af help

手册页和 MPlayer 的 HTML 文档更详细地描述了其选项。 键入

$ mplayer -vo help

列出已编译的视频输出驱动程序。

您可以使用以下命令播放带有视频的任意音频文件

$ mplayer video.mpg -audiofile audio.aac

当然,MPlayer 可以播放各种音频和视频媒体文件。 以下命令列出它们

$ mplayer -vo help

$ mplayer -ao help

尝试将 -audio-demuxer 开关与 -rawaudio 一起使用。

我希望这能帮助您开始探索 MPlayer 的强大功能。 享受您的多媒体体验!

Girish Venkatachalam 是一位对 UNIX 深感兴趣的开源黑客。 在他的空闲时间,他喜欢烹饪素食菜肴并真正享用它们。 可以通过 girish1729@gmail.com 与他联系。

加载 Disqus 评论