MEncoder 是一个简单的影片编码程序,它可用于将视频或者音频文件在 MPlayer 可播放的格式当中互相转换。说到 MEncoder 就不得不知道 MPlayer。MPlayer 是一款为 Linux 编写的电影播放器。它能播放大部分 XAnim、RealPlayer 以及 Win32 DLL 解码器支持的 MPEG、VOB、AVI、OGG/OGM、VIVO、ASF/WMA/WMV、QT/MOV/MP4、FLI、RM、NuppelVideo、 yuv4mpeg、FILM、RoQ、PVA、Matroska 文件。它也可以观看 VideoCD、SVCD、DVD、3ivx、RealMedia、Sorenson、Theora、以及 MPEG-4 影片。
一、MEncoder 的下载及安装(解压缩)
MEncoder 可以从它的官方网站(http://www.mplayerhq.hu)下载,包括以下三个文件,解压缩后即可以直接使用,无须安装。
1、MPlayer 1.0 RC2 for Windows:MPlayer 和 MEncoder 的主文件,下载后解压到硬盘的任意位置,比如 D:\Mplayer;
2、MPlayer 1.0 RC2 for Windows GUI:MPlayer 的用户界面,用于播放媒体文件;
3、Binary Codec Packages:解码、编码过程中所需的编码、解码包,解压后放在 MPlayer 的级目录 Codecs,比如 D:\MPlayer\Codecs。
二、关于 Libavcodec
Libavcodec 是目前领先的并开放源码的视频和音频编解码器库。它能够解码的媒体格式最多,通常解码的速度也是最高的。它是 MPlayer 支持的默认解码器。
三、示例:使用 MEncoder 把一个 MPEG-2 文件压缩成一个 AVI 文件
以下命令中把一个 MPEG-2 文件(扩展名为 MPG )转换成一个 AVI 文件(Divx 视频编码,MP3 音频编码):
mencoder.exe input.mpg -oac mp3lame -lameopts aq=3:abr:br=128 -srate 44100 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1200 -ffourcc DX50 -vf scale=480:360,crop=640:478:0:0,harddup -ofps 30 -o output.avi
1、-oac mp3lame:(output audio codec)指定输出媒体文件的音频编码类型。此例中选择的是 mp3lame。
2、-lameopts aq=3:abr:br=128:(lame options)指定 LAME 的编码设置。aq 为编码质量,它的值为 0~9,数字越小音频的数字失真就越小,编码的时间就越长;编码方式包括有 abr(按平均码率编码)、cbr(指固定码率编码)、vbr(按动态码率编码)三种;br=128 则指定编码码率为 128kbps。
3、-srate 44100:(sample rate)指定音频的采样频率。频率通常有 22050、32000、44100 等几种。
4、-ovc lavc:(output video codec)指定输出媒体文件的视频编码类型。此处选择的是 Libavcodec 的视频编码。
5、-lavcopts vcodec=mpeg4:vbitrate=1200:(Libavcodec options)指定视频编码的设置。由于 Libavcodec 包含了多种视频编码,所以用 vcodec=mpeg4 来指定具体的使用 MPEG-4 编码,vbitrate 是设定视频编码的码率为 1200kbps。
6、-fourcc DX50:(four character code)指定视频数据流格式的四字符代码。通常视频播放软件通过查询 FourCC 代码并且寻找与 FourCC 代码相关联的视频解码器来播放特定的视频流。比如 DIV3 = DivX Low-Motion、DIV4 = DivX Fast-Motion、DIVX = DivX4、DX50 = Divx5 等等。
7、-vf scale=480:360,crop=640:478:0:0,harddup:(video filters)指定编码的视频滤镜设置。scale=480:360 用于指定输入媒体文件的画面大小,宽度为 480 像素,高度为 360 像素。crop=638:477:1:2 是剪栽选项,从原始画面的座标(1,2)为起点,截取 638×477 像素的图像。
注意,命令里的 scale 参数放在 crop 参数之前,表示“先缩放后剪栽”,如果 crop 参数放于 scale 参数之前,则表示“先剪栽后缩放”。
8、-ofps 30:(output fps)指定输出媒体文件的帧速,30fps 指每秒种播放 30 个画面。
9、-o output.avi:(output)指定转换后输入媒体的文件名。
四、示例:使用 Mencoder 将一个 RMVB 文件转换成一个 PMP 文件(PSP 游戏机专用)
需要使用到以下三个命令:
(1)mencoder.exe input.rmvb -sws 9 -ofps 23.976 -vf harddup,pp=md/lb,scale=480:272 -ovc x264 -ffourcc H264 -x264encopts qp_constant=25 -srate 44100 -af volnorm -oac mp3lame -lameopts aq=3:cbr:br=128:vol=1 -o video.avi
(2)mencoder.exe video.avi -oac copy -ovc copy -of rawaudio -o audio.mp3
(3)pmp_muxer_avc.exe -v video.avi -a audio.mp3 -s 1000 -r 23976 -d 1 -o output.pmp
1、第一个命令是将 RMVB 转换成视频为 H264 编码、音频为 MP3 编码的 AVI 文件,其中:-sws 9 参数指定了编码的采样使用 Lanczos3 算法(如果不指定则采用线性采样),可以获得更具体的细节和更精细的画面;qp_constant=25 指定了视频编码的质量,在压缩 PSP 媒体的时候一般选择 20(最优)~25(普通);-af volnorm (volume normalize)设置了音频编码时音量规格化。
2、第二个命令是将音频部份从第一个命令生成的 video.avi 中提取出来,其中:-of rawaudio (output filter)指定了只输出音频部分而忽略视频部分。
3、第三个命令是将 video.avi 和 audio.mp3 合成 PMP 文件。pmp_muxer_avc.exe 文件须要另外下载,在各个 PSP 论坛里都可以找到。PMP 和 AVI 一样,是媒体文件的一种容器格式,并非是编码格式,而 MEncoder 并不直接支持 PMP 容器,所以须要借助一下第三方的工具。
五、使用 MEncoder 压制 DVD 影碟和处理字幕
MEncoder 可以直接压制 DVD 或者 VCD 的内容,将 DVD 或者 VCD 放入光驱,使用如下命令:
mencoder.exe dvd://2 -chapter 1-8 -alang eng -slang zh -aspect 16/9 -ovc -lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=694 -vop scale -zoom -xy -640 -oac mp3lame -lameopts abr:br=128:vol=9 -o output.avi
1、dvd://2:指定压缩 DVD 影碟中的第 2 个标题内容。
2、-chapter 1-8:指定压缩第 1-8 个章节的内容,如不指定,则压缩整个标题的内容。有关 DVD 根目录(Root)、标题(Title)、章节(Chapter)的概念请查阅相关的资料。
3、-alang eng:(audio language)指定被压缩的 DVD 音频为英文。大多数 D 版的 DVD 影碟都没有明确地标记出音频的语言,比如英语(eng)、日语(jap)、朝鲜语(kor)等,这时可以使用 -aid (audio ID)来指定压缩第几条音轨,比如 -aid 2。
4、-slang zh:(subtitle language)指定被压缩 DVD 的字幕为中文。此参数与 -alang 参数相似,没有标记字幕语言的影碟也可以使用 -sid (subtitle ID)来代替。
5、-aspect 16/9:(aspect ratio)指定影片的高宽比。通常有 4/3、5/4、16/9、2.35/1 等,根据 MEncoder 版本的不同,有可能写成 4:3、5:4、16:9、2.35:1。
6、-zoom -xy 640:压缩影片时进行缩放,640 是指定了影片的宽度,高度则根据高宽比 16:9 自动计算。
另外,MEncoder 可以从 DVD 直接输出外挂式的 VOBSub(idx+sub)字幕,例如:
mencoder.exe dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -vobsubout subtitles -vobsuboutindex 0 -sid 2
命令运行成功后生成了 subtitles.idx 和 subtitles.sub 两个文件。