MEncoder

出自 ArchWiki

关于 MEncoder 的概述,MEncoder 是 MPlayer 提供的视频编码/解码工具,是 mencoder 软件包的一部分。

基础知识

转换的基本语法是

mencoder original_video.mpg -o new_video.avi -ovc output_video_codec -oac output_audio_codec

所以要将 movie.mpg 转换为 movie.avi,使用 MPEG-4 Part 2 视频和 MP2 音频,命令是

mencoder movie.mpg -o movie.avi -ovc lavc -oac lavc

没有任何选项的默认输出格式为视频 MPEG-4 和音频 MP2。

这基本上是将视频转换的方式。但是,还有许多其他选项可用。

对于输入格式,MEncoder 可以使用 MPlayer 可以播放的任何格式,因此要验证它是否适用于您的视频,只需尝试在 MPlayer 中播放它即可。

要列出解码器,运行

$ mencoder -ovc help

同样,要列出解码器,运行

$ mencoder -oac help

此信息也可以在此处找到,其中有更好的解释,尽管不是特定于某个编解码器。

示例

这种方法允许制作一个 .mkv 文件,其中包含 H.264 编码的视频和任意数量的 Vorbis 编码的音轨。

我们将使用 mencodermplayer 软件包的一部分)进行 ripping 和编码,并使用 mkvmergemkvtoolnix 软件包的一部分)制作 .mkv 文件本身。

Rip 和编码视频

H.264 编码器通常在两次 pass 中使用:第一次读取有关电影的信息,第二次使用该信息进行编码。我们现在不提取任何音频。

命令如下;记得用适当的值替换变量

# First pass: we are just collecting information, so the normal output is thrown away.
mencoder -dvd-device "$ISO" dvd://"$TITLE" -chapter "$CHAPTER" -o /dev/null -nosound -ovc x264 \
-x264encopts direct=auto:pass=1:turbo:bitrate=900:bframes=1:\
me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300 \
-vf scale=-1:-10,harddup
# Second pass: here we compress the video track using the information from the first step.
mencoder -dvd-device "$ISO" dvd://"$TITLE" -chapter "$CHAPTER" -nosound -ovc x264 \
-x264encopts direct=auto:pass=2:bitrate=900:frameref=5:bframes=1:\
me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300 \
-vf scale=-1:-10,harddup -o video.avi

这将创建一个包含视频的 video.avi 文件。您可以调整 -x264encopts 选项和 -vf 滤镜以提高质量或减小文件大小。例如,对于带有黑边的电影,应使用 -vf crop=$X:$Y,scale=-1:-10,harddup 和适当的值而不是 $X$Y 进行裁剪(请参阅 MEncoder 手册中的 cropdetect)。您可能想要使用 -vf scale=$WIDTH:-10,harddup 缩小电影,电影的宽度将变为 $WIDTH(保持 $WIDTH 为 16 的倍数:640、480 或 320 通常可以),高度将被正确计算以保持宽高比。

您还可以使用 MEncoder 提供的任何其他滤镜,例如 pullup,softskip,或者您可以使用 -ofps 更改帧率。(如果这样做,请记住在所有地方都使用相同的帧率,包括在 rip 音频的命令中。)

重要的是您将 harddup 用作最后一个滤镜:它将强制 MEncoder 在输出中写入每一帧(即使是重复的帧)。此外,必须将 scale=$WIDTH,-10$WIDTH 用作 -1 以保持原始宽度或新的、通常较小的宽度:这是必要的,因为 H.264 编解码器使用方形像素,而 DVD 使用矩形像素。

Rip 和编码音频

您可以根据需要提取音轨。在这里我们使用 Vorbis 算法进行压缩,但您可能需要查看 MEncoder 手册以了解其他选择。

命令如下(用所需的值替换变量)

# Here we rip and compress the audio.
mencoder -dvd-device "$ISO" dvd://"$TITLE" -alang "$AUDIOLANG" -chapter "$CHAPTER" -ovc frameno \
-oac lavc -lavcopts acodec=vorbis:abitrate=224 -channels 2 -srate 48000 -o "$AUDIOLANG".avi

您应该为您想要的每个音轨重复该命令,这样我们将拥有带有音轨的 .avi 文件。

您可能还想使用 -channels 6 来提取 5.1 DVD 的所有声道或更改比特率。与视频一样,您可以使用 -af 通过音频滤镜,但这不是必需的。

制作最终的 .mkv 文件

将所有内容放在一个文件中很简单。如果需要,添加其他音轨

mkvmerge -D audio.avi -A video.avi -o mymovie.mkv

.mkv 文件将包含所有内容,因此您可以存储电影并保留所有您想要的音轨。即使您对保留多个音轨不感兴趣,H.264/Vorbis 格式对也应确保出色的质量。

为 Nokia 5800 XM 和 Nokia N97 编码 mp4 视频

2 次 pass 中使用小比特率(640kbps 视频 vbitrate 和 96kbps 音频 abitrate)可以为 nokia 5800 xm 和 Nokia N97 手机的默认视频播放器产生相当不错的 mp4 视频。 假设我们有一个 video.avi 文件(用您的视频文件替换 video.avi)

mkv 转 mp4(nokia 97, 5800 兼容)

# step 1: convert the mkv to mpg ; many mkv files do not directly get converted to mp4
mencoder "$1" -ovc lavc -lavcopts vcodec=mpeg1video -aid 0 -oac pcm -o delete_me.mpg
# step 2: convert the mpg file to mp4
mencoder -of lavf -lavfopts format=mp4 -oac lavc -ovc lavc -lavcopts \
aglobal=1:vglobal=1:acodec=libfaac:vcodec=mpeg4:abitrate=128:vbitrate=640:keyint=250:mbd=1:vqmax=10:lmax=10:turbo  -af lavcresample=44100 \
-vf harddup,scale=640:-3 "delete_me.mpg" -o "$1.mp4"
# step 3: delete the temporary huge sized mpg file 
rm "delete_me.mpg"

用 .mkv 视频文件名替换 "$1"。例如,sample.mkv;这里 -aid 0 = mkv 中的第一个音轨;

使用 multipass(2 次 pass)将 avi 转换为 mp4(nokia 97, 5800 兼容)

# First pass:
mencoder -of lavf -lavfopts format=mp4 -oac lavc -ovc lavc -lavcopts \
aglobal=1:vglobal=1:acodec=libfaac:vcodec=mpeg4:abitrate=96:vbitrate=640:keyint=250:mbd=1:vqmax=10:lmax=10:vpass=1:turbo  -af lavcresample=44100 \
-vf harddup,scale=640:-3 "video.avi" -o "video.mp4"
# Second pass:
mencoder -of lavf -lavfopts format=mp4 -oac lavc -ovc lavc -lavcopts \
aglobal=1:vglobal=1:acodec=libfaac:vcodec=mpeg4:abitrate=96:vbitrate=640:keyint=250:mbd=1:vqmax=10:lmax=10:vpass=2 -af lavcresample=44100 \
-vf harddup,scale=640:-3 "video.avi" -o "video.mp4"

在完成第二次 pass 后,将 video.mp4 复制到 nokia 5800 xm 或 n97 的存储卡,并在从计算机上移除设备后使用 nokia 的文件管理器打开该文件。

我们需要在 video.avi 所在的文件夹中运行以上两个命令。调整 abitrate、vbitrate 和 scale 值以获得您喜欢的视频质量和大小。 替代方案 formatfactory 是一个用于 windows 的 mencoder gpl 应用程序,它在 wine 中运行,也可以转换所有格式到 mp4

scale=640:-3 将尝试将视频宽度保持为 640,并相应地调整视频高度。对于 16:9 和 4:3 宽高比视频,请在 nokia 的 mp4 播放器“选项->宽高比”中使用“原始”宽高比。

将多音轨/多语言 MKV 视频编码为具有不同音轨的 MP4

要将多音轨文件编码为 mp4,我们需要使用 "-aid <音轨编号>",例如 ffmpeg 中的 -map 0:1)

1. 提取 mkv 文件的视频+音轨 1(通常是英语)

mencoder -oac copy -ovc copy -aid 0 sample.mkv -o sample.mp4 

2. 提取 mkv 文件的视频+音轨 2(通常是非英语,如印地语、法语等)

mencoder -oac copy -ovc copy -aid 1 sample.mkv -o sample.mp4

向文件添加 SubRip 字幕

建议以下输出视频编解码器 (-ovc) 选项作为极高质量设置,应该足以满足大多数转码,包括向流添加字幕。

双次 x264 编码(极高质量

mencoder original_video.avi -oac copy -ovc x264 -x264encopts pass=1:preset=veryslow:fast_pskip=0:tune=film:frameref=15:bitrate=3000:threads=auto -sub original_video.srt -subfont-text-scale 3 -o /dev/null
mencoder original_video.avi -oac copy -ovc x264 -x264encopts pass=2:preset=veryslow:fast_pskip=0:tune=film:frameref=15:bitrate=3000:threads=auto -sub original_video.srt -subfont-text-scale 3 -o output_video.avi
  • fast_pskip=0 是最大质量 placebo 预设选项。
  • framerefpreset 设置未定义的唯一其他主要选项。
  • bitrate 值可以修改以适应所需的文件大小和质量需求。
  • tune 应设置为匹配正在编码的媒体类型和内容。

单次 x264 编码(极高质量)

mencoder original_video.avi -oac copy -ovc x264 -x264encopts preset=veryslow:tune=film:crf=15:frameref=15:fast_pskip=0:threads=auto -sub original_video.srt -subfont-text-scale 3 -o output_video.avi
  • 以下示例使用选项 -of lavf 将输出混合到 Matroska 容器中,该容器从输出文件扩展名 .mkv 自动检测。
mencoder original_video.avi -oac copy -of lavf -ovc x264 -x264encopts preset=veryslow:tune=film:crf=15:frameref=15:fast_pskip=0:global_header:threads=auto -sub original_video.srt -subfont-text-scale 3 -o output_video.mkv
  • global_header 将全局视频标头写入 extradata,或在关键帧之前写入,通常是 .mp4 和 .mkv 容器所必需的。

双次 xvid 编码(极高质量

mencoder original_video.avi -oac copy -ovc xvid -xvidencopts pass=1:chroma_opt:vhq=4:max_bframes=1:quant_type=mpeg:threads=6 -sub original_video.srt -subfont-text-scale 3 -o /dev/null
mencoder original_video.avi -oac copy -ovc xvid -xvidencopts pass=2:chroma_opt:vhq=4:max_bframes=1:quant_type=mpeg:bitrate=3000:threads=6 -sub original_video.srt -subfont-text-scale 3 -o output_video.avi
  • threads=n,其中 n = 物理核心或 CPU 核心数。
  • 最新版本的 mencoder 默认启用 bvhq=1 设置。
  • Xvid 不接受多次 pass 编码的第一次 pass 中的 bitrate 设置。
  • subfont-text-scale 2-3 有助于 16:9 格式屏幕的正确尺寸调整。
  • 只要比特率足够高,就可以设置 max_bframes=0

三次 lavc 编码(极高质量 mpeg4

mencoder original_video.avi -oac copy -ffourcc DX50 -ovc lavc -lavcopts vpass=1:mbd=2:mv0:trell:v4mv:cbp:predia=6:dia=6:precmp=6:cmp=6:subcmp=6:preme=2:qns=2:vbitrate=3000 -sub original_video.srt -subfont-text-scale 3 -o output_video.avi
mencoder original_video.avi -oac copy -ffourcc DX50 -ovc lavc -lavcopts vpass=3:mbd=2:mv0:trell:v4mv:cbp:predia=6:dia=6:precmp=6:cmp=6:subcmp=6:preme=2:qns=2:vbitrate=3000 -sub original_video.srt -subfont-text-scale 3 -o output_video.avi
mencoder original_video.avi -oac copy -ffourcc DX50 -ovc lavc -lavcopts vpass=3:mbd=2:mv0:trell:v4mv:cbp:predia=6:dia=6:precmp=6:cmp=6:subcmp=6:preme=2:qns=2:vbitrate=3000 -sub original_video.srt -subfont-text-scale 3 -o output_video.avi
  • -vcodec mpeg4 引入 threads=n>1 可能会歪曲运动估计的效果,并导致降低视频质量和压缩效率。
  • predia=6:dia=6:precmp=6:cmp=6:subcmp=6predia=3:dia=3:precmp=3:cmp=3:subcmp=3 可以减少编码时间,而不会造成太大的质量损失。
  • vmax_b_frames 未包含在官方 mencoder 文档中引用的内容,因为当前默认设置是不使用任何 B 帧
  • vb_strategy 未包含在官方 mencoder 文档中引用的内容,原因与上述相同。否则 vb_strategy=2

单次 lavc 编码(极高质量 mpeg-2

mencoder -mc 0 -noskip -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf  -vf scale=720:576,harddup -srate 48000 -af lavcresample=48000   -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=15:vstrict=0:acodec=mp2:abitrate=192:aspect=16/9  -sub-bg-alpha 100 -subpos 95 -subfont-text-scale 2.5 -subcp cp1250 -sub subFile.srt  -o outFile.mpg inFile.mkv
  • -mc 0 -noskip 以确保音视频同步
  • aspect - 手动设置视频宽高比
  • 字幕背景、字幕编码和字幕缩放

与往常一样,有许多选项可以设置,这种组合确保图片看起来几乎与原始图片相同,文件大小略小

(非常适合转换 FULL HD 视频,使其可以在较旧的设备上播放)

向文件添加 VOBsub 字幕

双次 x264 编码(极高质量)

  • 使用不带扩展名(.idx/.sub)的文件的完整路径名,将 -vobsub 直接指向 subtitle_file
  • 选择 VOBsub 文件(.idx/.sub)中包含的第二个字幕 ID 语言(-vobsubid 2)。
mencoder original_video.avi -oac copy -ovc x264 -x264encopts pass=1:preset=veryslow:fast_pskip=0:tune=film:frameref=15:bitrate=3000:threads=auto -vobsub subtitle_file -vobsubid 2 -o /dev/null
mencoder original_video.avi -oac copy -ovc x264 -x264encopts pass=2:preset=veryslow:fast_pskip=0:tune=film:frameref=15:bitrate=3000:threads=auto -vobsub subtitle_file -vobsubid 2 -o output_video.avi

测试字幕混合结果

避免传递资源密集型编码选项,以便更快地验证所需的结果,而不是稍后才验证。

单次 x264 编码(低质量)
mencoder original_video.avi -oac copy -ovc x264 -x264encopts preset=ultrafast:threads=auto -sub original_video.srt -subfont-text-scale 3 -o output_video.avi
mencoder original_video.avi -oac copy -ovc x264 -x264encopts pass=2:preset=ultrafast:threads=auto -vobsub subtitle_file -vobsubid 2 -o output_video.avi

mp2 vs. mp3lame vs. aac

  • 对于 mp2 编码,建议使用 toolame 而不是 FFmpeg lavc (libavcodec)。
  • 在所有比特率下,都建议使用 mp3lame 而不是 FAAC(未完全开发)编码。

编码 Windows 和 Mac 可读的 AVI 视频

使用以下命令

opt="vbitrate=2160000:mbd=2:keyint=132:vqblur=1.0:cmp=2:subcmp=2:dia=2:mv0:last_pred=3"

mencoder -ovc lavc -lavcopts vcodec=msmpeg4v2:vpass=1:$opt -oac mp3lame -o /dev/null input.avi
mencoder -ovc lavc -lavcopts vcodec=msmpeg4v2:vpass=2:$opt -oac mp3lame -o output.avi input.avi

input.avi 是您使用 Linux 实用程序制作的 AVI,而“output.avi”是您想要制作的 AVI,Windows 和 Mac 用户可以读取它。

GUI 前端

官方 MPlayer 主页有一个可用的前端的综合列表,此处

  • OGMRip — 一个应用程序和一组库,用于使用各种编解码器将 DVD 抓取和编码为 AVI、OGM、MP4 或 Matroska 文件。它依赖于 mplayer、mencoder、ogmtools、mkvtoolnix、mp4box、oggenc、lame 和 faac 来执行其任务。
https://ogmrip.sourceforge.net/ || ogmripAUR
  • Hybrid — 一个多平台 (Linux/macOS/Windows) 基于 Qt 的前端,用于一堆其他工具,可以将几乎所有输入转换为 x264/Xvid/VP8 + ac3/ogg/mp3/aac/flac,并封装在 avi/mp4/m2ts/mkv/webm 容器、BluRay 或 AVCHD 结构中。
https://www.selur.de/ || hybrid-encoderAUR
  • Hyper Video Converter — 我制作的各种 cli 视频编码器工具的前端,因为我想要一些东西,可以让我从 konqueror 快速转换视频,而无需在控制台中键入 3 行命令。
https://hypervideoconve.sourceforge.net/ || hypervc-qt4AUR
  • jmencode — 一个简单的 java 前端,用于免费且非常有用的 MPlayer 软件,用于视频编码。最初的重点是将 DVD 转换为 MPEG-4。
https://jmencode.sourceforge.net/ || jmencodeAUR