MEncoder
MEncoder は MPlayer による動画エンコード/デコードツールです。mencoder パッケージに入っています。
目次
基本
変換するときの基本的な構文は:
mencoder original_video.mpg -o new_video.avi -ovc output_video_codec -oac output_audio_codec
movie.mpg から MPEG-4 Part 2 動画と MP2 音声の movie.avi に変換する場合、コマンドは:
mencoder movie.mpg -o movie.avi -ovc lavc -oac lavc
何もオプションを付けなかった場合、デフォルトで、動画は MPEG-4 フォーマットで音声は MP2 フォーマットで出力されます。
基本的には動画のコンバートに使えますが、他にも多数のオプションが存在します。
MPlayer が再生できるあらゆるフォーマットを MEncoder の入力フォーマットにできるため、MEncoder で使えるかどうか試したいときは、とりあえず MPlayer で再生してみてください。
出力できるビデオコーデック (output video codecs) を一覧するには、次を実行:
$ mencoder -ovc help
同じく、出力できる音声コーデック (output audio codecs) を一覧するには、次を実行:
$ mencoder -oac help
上記の情報は こちら からも確認できます。詳細に説明されています。
サンプル
以下は H.264 でエンコードされた動画と Vorbis でエンコードされた多数の音声トラックが入った .mkv ファイルを作成する例です。
リッピングとエンコードに mencoder (mplayer パッケージに入っています) を使い、.mkv ファイルを作成するのに mkvmerge (mkvtoolnix[リンク切れ: パッケージが存在しません] パッケージに入っています) を使います。
ビデオのリッピングとエンコード
H.264 エンコーダは通常ツーパスで使われます: 最初に動画の情報を読み込んで、それからその情報を使ってエンコードします。音声の抽出はまだ行いません。
コマンドは以下のようになります。変数は適当な値に置き換えて下さい:
# 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 など)。高さはアスペクト比にあわせて適当に計算されます。
pullup,softskip など他の MEncoder フィルタを使ったり -ofps でフレームレートを変更することも可能です (フレームレートを変更した場合、音声をリッピングするときも同じフレームレートに合わせてください)。
最後の harddup フィルタは重要です: (たとえ重複するフレームがあっても) 全てのフレームを MEncoder から強制的に書きだすようにします。また、元の横幅を維持したり横幅を小さくする場合は scale=$WIDTH,-10 の $WIDTH は -1 にする必要があります。H.264 コーデックは正方形のピクセルを使いますが DVD は長方形のピクセルを使うためです。
音声のリッピングとエンコード
必要な音声トラックを抽出します。以下では 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 ファイルが作られます。
5.1 チャンネルの DVD を全て抽出したりビットレートを変更するときは -channels 6 を使います。ビデオと同じように、-af で音声フィルタをかけられますが必須ではありません。
最終的な .mkv ファイルの作成
単一のファイルに動画と音声をまとめます。必要であれば他の音声トラックも追加してください:
mkvmerge -D audio.avi -A video.avi -o mymovie.mkv
.mkv ファイルには全てが収められます。複数の音声トラックを維持する必要がない場合、H.264/Vorbis フォーマットのペアで品質を確保できます。
Nokia 5800 XM や Nokia N97 向けに mp4 動画をエンコード
Nokia 5800 xm や Nokia N97 のデフォルトの動画プレイヤーで mp4 動画を見る場合、2パスでビットレートは低くすると視聴しやすくなります (動画のビットレートは 640kbps で音声のビットレートは 96kbs 程度)。
mkv を mp4 にコンバート (nokia 97, 5800 対応)
まず mkv を mpg に変換します。大抵の mkv ファイルは mp4 に直接変換できません。
mencoder "$1" -ovc lavc -lavcopts vcodec=mpeg1video -aid 0 -oac pcm -o delete_me.mpg
mpg ファイルを 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"
残った mpg ファイルを削除します。
rm "delete_me.mpg"
"$1" は .mkv 形式の動画ファイルの名前に置き換えてください (例: sample.mkv)。-aid 0
は mkv の音声トラックです。
マルチパス (ツーパス) で 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"
2回目のパスが完了したら、video.mp4 を nokia 5800 xm または n97 のメモリカードにコピーし、デバイスをコンピュータから取り外した後、nokia のファイルマネージャーを使用してファイルを開きます。
上記の二つのコマンドは、video.avi が存在するフォルダ内で実行する必要があります。abitrate、vbitrate、および scale の値を調整して、希望するビデオ品質とサイズを取得してください。formatfactory は、wineで動作する、windows用のmencoder gplアプリケーションで、すべてのファイルをmp4に変換することもできます。
scale=640:-3 は、ビデオの幅を640に保ちつつ、ビデオの高さをそれに合わせてリサイズしようとします。16:9 および 4:3 のアスペクト比のビデオについては、nokiaのmp4プレイヤー "option->aspect" で "original" アスペクトを使用してください。
複数の音声が入った多言語の MKV 動画を音声ストリームが複数ある MP4 にエンコード
mp4 をエンコードするためのマルチオーディオファイルを使用するには、"-aid <audio stream number>"(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
プリセットオプションです。frameref
は、preset
設定で未定義の他の主要なオプションのみです。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
を使用して、出力ファイル拡張子.mkv
から自動的に検出されるMatroska コンテナに出力を多重化します。
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 は、複数のパスのエンコードの最初に
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
threads
=n
>1
を-vcodec mpeg4
に導入すると、モーション推定の効果が歪む可能性があり、ビデオ品質と圧縮効率が低下するかもしれません。predia
=6
:dia
=6
:precmp
=6
:cmp
=6
:subcmp
=6
からpredia
=3
:dia
=3
:precmp
=3
:cmp
=3
:subcmp
=3
に変更することで、品質の大きな損失なくエンコード時間を短縮できます。- 公式の mencoder ドキュメントで参照されている
vmax_b_frames
は、現在のデフォルトの設定は B-frames をまったく使用しないようになっているため、含まれていません。 - 上記と同じ理由で、公式の mencoder ドキュメントで参照されている
vb_strategy
も含まれていません。それ以外の場合、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 は A/V 同期を保証するためのもの
- aspect - ビデオのアスペクト比を手動で設定
- サブタイトルの背景、サブタイトルのエンコーディング、サブタイトルのスケーリング
上記のコマンドには、さまざまなオプションが設定できますが、この組み合わせを使用すると、ファイルサイズがわずかに小さくなりながらも、元の映像とほぼ同じ品質が保証されます。
(FULL HD ビデオを古いデバイスで再生可能に変換するのに最適)
VOBsub 字幕をファイルに追加
ツーパス x264 (高画質)
- Direct
-vobsub
to thesubtitle_file
using the full pathname of the file without extensions (.idx
/.sub
). - Select the second subtitle ID language (
-vobsubid 2
) contained within the VOBsub files (.idx
/.sub
).
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" は Windows や Mac ユーザーが読むことができる AVI に置き換えてください。
GUI フロントエンド
MPlayer の公式ホームページにはフロントエンドの膨大なリストが存在します: [1]。
- OGMRip — DVD をリッピングして様々なコーデックの AVI, OGM, MP4, Matroska ファイルに変換するアプリケーションとライブラリの集合です。mplayer, mencoder, ogmtools, mkvtoolnix, mp4box, oggenc, lame, faac に依存しています。
- Hybrid — マルチプラットフォーム (Linux/macOS/Windows) で Qt ベースの様々なツールのフロントエンドで、あらゆる入力から avi/mp4/m2ts/mkv/webm コンテナの x264/Xvid/VP8 + ac3/ogg/mp3/aac/flac や、BluRay あるいは AVCHD に変換できます。
- Hyper Video Converter — 様々な cli 動画エンコーダのフロントエンドで、コンソールで3回にわけてコマンドを実行しなくても konqueror から動画をすばやく変換できます。
- jmencode — 便利な MPlayer ソフトウェアのシンプルな java フロントエンドです。元々は DVD を MPEG-4 に変換することに焦点を置いています。