# MEncoder的基础用法

如果你想得到MEncoder的有效选项列表，请参照man页。 对于一系列简易的例子以及几个编码参数的详细说明，参照从MPlayer-users邮件列表 的一些邮件中搜集来的编码小窍门。 从压缩包 中还可以找到大量的关于MEncoder编码的各个方面的讨论 以及用其编码的相关问题。

## 选择编解码器及容器格式

编码使用的音频及视频编码器分别通过`-oac`及 `-ovc`选项指定 例如输入如下命令

    mencoder -ovc help

可列出你机器上相应版本的MEncoder所支持的所有视频编码。 下列选择也是可用的：

音频编码器：

音频编码器名称 | 描述
--- | ---
mp3lame | 通过LAME编码为VBR，ABR或CBR格式的MP3文件
lavc | 利用libavcodec中的一个编码器
faac | FAAC AAC音频编码器
toolame | MPEG音频Layer 2编码器
twolame | 基于tooLAME的MPEG音频Layer 2编码器
pcm | 未压缩的PCM音频
copy | 不要重新编码，这是复制已压缩的各桢

是频编码器：

是频编码器名称 | 描述
--- | ---
lavc | 使用libavcodec中的一个是频编码器
xvid | Xvid, MPEG-4高级简单格式(ASP)编码器
x264 | x264, MPEG-4高级视频编码(AVC), AKA H.264编码器
nuv | nuppel视频，为一些实时程序所用
raw | 未压缩的视频桢
copy | 不要重新编码，只是复制已压缩的各桢
frameno | 用于三通道编码（不推荐）

输出容器格式通过`-of`选项选择。 输入：

    mencoder -of help

以便列出你机器上相应版本的MEncoder所支持的 所有容器。 如下选项也是可用的

容器格式：

容器格式名称 | 描述
--- | ---
lavf | 由libavformat 支持的一种容器
avi | 音-视频混合
mpeg | MPEG-1及MPEG-2节目流
rawvideo | 原始视频流（未经混合 - 只含一视频流）
rawaudio | 原始音频流（未经混合 - 只含一音频流）

AVI容器是MEncoder的基本容器格式，也就是说它能够 被最好的处理，MEncoder也是为之而设计。 如上所述，其他容器格式也可被使用，但你使用的时候可能遇到问题。

libavformat容器：

如果你选择了libavformat 来做输出文件的混编（通过使用`-of lavf`选项）， 适当的容器将由文件扩展名而定。 你也可以通过libavformat的 `format`选项强制一种容器格式。

libavformat容器名称 | 描述
--- | ---
mpg | MPEG-1及MPEG-2节目流
asf | 高级流格式
avi | 音-视频混合
wav | 波形音频
swf | Macromedia Flash
flv | Macromedia Flash视频
rm | RealMedia
au | SUN AU
nut | NUT开放容器（实验中，不兼容标准）
mov | QuickTime
mp4 | MPEG-4格式
dv | Sony数字视频容器

如你所见，libavformat允许 MEncoder把媒体混合到各种格式的容器内。 不巧的是，因为MEncoder从开始设计的时候 没有支持AVI之外的其他容器，你要小心最终生成的文件。 请多次检查以确认音频/视频同步是正确的以及文件能在 MPlayer之外的播放器中播放。

### 编码为Macromedia Flash格式

生成Macromedia Flash视频，以便在安装有Macromedia Flash插件的网页浏览器中播放：

    mencoder input.avi -o output.flv -of lavf \
        -oac mp3lame -lameopts abr:br=56 -srate 22050 -ovc lavc \
        -lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3

## 选择输入文件或设备

MEncoder可以从文件或直接从DVD或VCD的盘片进行编码。 秩序在命令行中包含文件名以便从文件进行编码，或 `dvd://`标题数或 `vcd://`轨道数以便从DVD标题或VCD轨 道进行编码。 如果你已经把DVD复制到你的硬盘上（你可以使用像dvdbackup 这样的工具，大多数系统上都有），然后想从副本进行编码，你仍需使用 `dvd://`语法，加上附带了指向DVD副本的根目录的 `-dvd-device`选项。

`-dvd-device`及`-cdrom-device`选项也能用于 覆盖用来直接从光盘中直接读取数据的设备的路径，如果缺省的 `/dev/dvd`及`/dev/cdrom`在你的系统上步工作 的话。

当从DVD进行编码时，最好是选其中的一章或几章进行编码。 为此你可以使用`-chapter`选项。 例如`-chapter` 1-4将只编码DVD中的1至4章。 如果你针对包含1400MB数据的两张CD进行编码，这将非常有用，因为你可以确定只在一章的边 缘处分割，而不是在一个场景中间。

如果你有张被支持的电视卡，你也可以通过播放电视节目的设备进行编码。 使用`tv://`channelnumber为文件名， 并用`-tv`配置各种截取选项。 DVB输入工作原理类似。

## 编码为双通道MPEG-4 ("DivX")

之所以这样命名，是因为这种编码两次对文件进行编码。 第一次编码（配音通道）生成一些几兆大的临时文件(`*.log`)， 先不要删除它们（你可以删除AVI或者通过重定向到`/dev/null` 而不生成视频）。第二次编码时，生成了双通道输出文件，使用的即是从临时文件提供 的比特律数据。生成文件会有更好的图像质量。如果这是你第一次听说，你可以在互联 网上找到相关参考。

### 复制音轨

双通道编码在复制音轨时将DVD的第二个轨道转换成MPEG-4 ("DivX") AVI。

    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o /dev/null
    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \
        -oac copy -o output.avi

### 对音轨编码

将一个DVD编码成MPEG-4 ("DivX") AVI，音轨采用MP3格式 使用这个方法的时候要当心，因为有时它可能造成音/视频不同步。

    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 \
        -oac mp3lame -lameopts vbr=3 -o /dev/null
    mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \
        -oac mp3lame -lameopts vbr=3 -o output.avi

## 编码为Sony PSP视频格式

MEncoder支持到Sony PSP的视频格式转换，但是依赖于 PSP软件修改，对不同软件限制也许会有不同。 如果你遵守如下守则，你将不会遇到什么问题：

- 比特律：不应超过每秒1500kb，然而过去的版本 几乎支持任何比特律只要头文件声明其不是太高。

- 维数：PSP视频的长宽应是16的倍数，并且长*宽的 积应<= 64000。 在一些情况下，PSP可能播放更高分辨率的文件。

- 音频：其采样率针对MPEG-4应为24kHz，针对H.264 为48kHz。

### 编码到PSP

    mencoder -ofps 30000/1001 -af lavcresample=24000 -vf harddup -oac lavc \
        -ovc lavc -lavcopts aglobal=1:vglobal=1:vcodec=mpeg4:acodec=libfaac \
        -of lavf -lavfopts format=psp \
        input.video -o output.psp

注意你可以通过 `-info name=MovieTitle`为视频摄者标题。

## 编码为MPEG格式

MEncoder可生成MPEG (MPEG-节目流)格式的文件。 通常，当你使用MPEG-1或MPEG-2视频，是因为你的编码受限于SVCD, VCD, 或DVD。 这些格式所需的特别要求将在 VCD及DVD生成指南 中进行解释 section.

要改变MEncoder的输出文件格式，使用 `-of mpeg`选项。

例如：

    mencoder input.avi -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video \
        -oac copy other_options -o output.mpg

可生成为只有有限多媒体支持的系统进行播放的MPEG-1文件，例如默认安装的Windows：

    mencoder input.avi -of mpeg -mpegopts format=mpeg1:tsaf:muxrate=2000 \
        -o output.mpg -oac lavc -lavcopts acodec=mp2:abitrate=224 -ovc lavc \
        -lavcopts vcodec=mpeg1video:vbitrate=1152:keyint=15:mbd=2:aspect=4/3

同上，但使用了libavformat MPEG混合器：

    mencoder input.avi -o VCD.mpg -ofps 25 -vf scale=352:288,harddup -of lavf \
        -lavfopts format=mpg:i_certify_that_my_video_stream_does_not_use_b_frames \
        -oac lavc -lavcopts acodec=mp2:abitrate=224 -ovc lavc \
        -lavcopts vcodec=mpeg1video:vrc_buf_size=327:keyint=15:vrc_maxrate=1152:vbitrate=1152:vmax_b_frames=0

### 提示：

如果由于某种原因，第二次编码的效果不能令你满意，你可以使用另外一种比特律 重新执行视频编码，只要你保存了前一次编码中生成的统计文件。 这是可行因为生成统计文件的主要目的是记录每桢的复杂度，不是特别依赖于比特律。 然而，你要注意的是如果所有编码按照与最终生成文件的比特律相差不大的参数执行 程序，你将得到最佳效果。

## 改变电影大小

经常出现要改变电影图片大小的需求。原因可能是多样的：减小文件大小，网络带宽 等等。大多数人甚至在将DVD或SVCD转换成DivX AVI时也改变影片大小。如果你想改变 影片大小，阅读保持长宽比一节

变换过程由`scale`视频滤镜处理： `-vf scale=宽:高`。 输出质量可由`-sws`选项调节。 如果没有设置，MEncoder将使用2：双三次。

用法：

    mencoder input.mpg -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell \
        -vf scale=640:480 -o output.avi

## 媒体流复制

MEncoder能以两种方式处理输入媒体流： 编码或复制。 本节是关于复制的。

- 视频流 (选项`-ovc copy`)： 一系列工作可以完成的很好 :) 好像把FLI或VIVO或MPEG-1视频放入（不是转换）到 一个AVI文件中！当然，只有MPlayer能播放这样的文 件:)并且也许它并没有生活上的实际价值。实际意义上：当只有音频流要被编码（ 例如从无压缩的PCM到MP3）时，视频流才可能有用。

- 音频流 (选项`-oac copy`)： 直接的。你可能提取一个外部音频文件（MP3，WAV）并将其合成到一个输出媒体流里。 为此可使用`-audiofile 文件名`选项。

使用`-oac copy`从一种容器格式复制到另一种容器格式时，你可能需要 使用`-fafmttag`选项以保持原始文件的音频格式标签。例如，如果你将 一个使用AAC音频的NSV文件转换到AVI容器中，音频格式文件标签可能是错误的，需要被 转换。对于详细的音频格式标签，查看`codecs.conf`。

例子：

    mencoder input.nsv -oac copy -fafmttag 0x706D \
        -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -o output.avi

## 从多个输入图像文件进行编码(JPEG, PNG, TGA等)

MEncoder可以通过一个或多个JPEG, PNG, TGA, 或其 他图片文件制作电影。使用简单的桢复制，它能生成MJPEG (移动JPEG), MPNG (移动PNG)或MTGA (移动TGA) 文件。

### 进程描述：

1. MEncoder使用libjpeg （当解码PNG时，它将使用libpng）将输入图片进行 解码。

2. MEncoder然后将解码好的图片送到被选定的视频压缩器中 (DivX4, Xvid, FFmpeg msmpeg4等)。

### 例子

关于`-mf`选项的解释在man页中。

使用当前目录下所有JPEG文件生成MPEG-4文件。

    mencoder mf://*.jpg -mf w=800:h=600:fps=25:type=jpg -ovc lavc \
        -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o output.avi

使用当前目录中的一些JPEG文件生成MPEG-4文件。

    mencoder mf://frame001.jpg,frame002.jpg -mf w=800:h=600:fps=25:type=jpg \
        -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o output.avi

使用显示指示的一系列JPEG文件生成MPEG-4文件（当前目录下的list.txt包含被用做源的文件列表， 一个一行）：

    mencoder mf://@list.txt -mf w=800:h=600:fps=25:type=jpg \
        -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o output.avi

使用当前目录下所有JPEG文件生成移动JPEG（MJPEG）文件：

    mencoder mf://*.jpg -mf w=800:h=600:fps=25:type=jpg -ovc copy -oac copy -o output.avi

使用当前目录下所有PNG文件生成未压缩的文件：

    mencoder mf://*.png -mf w=800:h=600:fps=25:type=png -ovc raw -oac copy -o output.avi

宽度必须是4的倍数，这是原始RGB AVI文件格式的限制。

使用当前目录下所有PNG文件生成移动PNG (MPNG)文件：

    mencoder mf://*.png -mf w=800:h=600:fps=25:type=png -ovc copy -oac copy -o output.avi

使用当前目录下的所有TGA文件生成移动TGA (MTGA)文件：

    mencoder mf://*.tga -mf w=800:h=600:fps=25:type=tga -ovc copy -oac copy -o output.avi

## 将DVD子标题提取到VOBsub文件

MEncoder能将DVD子标题提取到VOBsub格式的文件中。 它们是一对由`.idx`及`.sub`结尾的文件 组成。并且经常被压缩成一个`.rar`文件。 MPlayer可通过 `-vobsub`及`-vobsubid`选项播放这些文件。

你可以通过`-vobsubout`指定输出文件的基础名（例如不包括 `.idx`或`.sub`后缀），对于生成文件 子标题的索引使用`-vobsuboutindex`。

如果不是从DVD输入，你应该使用`-ifo`来表明构建 生成的`.idx`文件所需的`.ifo`文件。

如果输入不是DVD并且你没有`.ifo`文件，你需使用 `-vobsubid`选项以使其知道放入`.idx` 文件的语言标识。

如果`.sub`及`.idx`文件存在，每次 执行都回添加子标题。所以你再开始前需要手动清除这些文件。

### 在做双通道编码时从DVD复制子标题

    rm subtitles.idx subtitles.sub
    mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 \
        -vobsubout subtitles -vobsuboutindex 0 -sid 2
    mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \
        -vobsubout subtitles -vobsuboutindex 1 -sid 5

### 从一个MPEG文件复制法文子标题

    rm subtitles.idx subtitles.sub
    mencoder movie.mpg -ifo movie.ifo -vobsubout subtitles -vobsuboutindex 0 \
        -vobsuboutid fr -sid 1 -nosound -ovc copy

## 保持视频画面比例

DVD及SVCD(例如MPEG-1/2)文件包含画面比例，此信息可用来指示播放器应如何显示视频流， 所以显示的人不会有个鸡蛋头（例如480x480 + 4:3 = 640x480）。然而当编码为AVI(DivX) 文件时，你要小心AVI头信息里没有包含这些值。重新设置这些比例是非常讨厌并且很花时间， 应该有更好的方法！

还有

MPEG-4有个独特的特点：视频流可以包含它需要的画面比例。是的，正像MPEG-1/2 (DVD, SVCD)及H.263文件一样。可惜的是，除了MPlayer几乎没有播放器 支持这项MPEG-4属性。

这种特性之可以与 libavcodec的 mpeg4编码器一同使用。记住：虽然 MPlayer可以正常播放所生成的文件，其他播放器可能使用错误 的图象比例。

你应剪切电影图像上下方的黑条。针对cropdetect及 crop滤镜的用法参考man页。

用法

    mencoder sample-svcd.mpg -vf crop=714:548:0:14 -oac copy -ovc lavc \
        -lavcopts vcodec=mpeg4:mbd=2:trell:autoaspect -o output.avi