TMPGEnc MPGE Smart Renderer 4で再エンコードが発生しないH.264ファイルの作成方法
先月リリース(だっけ?)されたTMPGEncのMPEG編集ソフトの最新版であるTMPGEnc MPEG Smart Renderer 4(以下TMSR4)では、H.264なBDAVも作成可能になりました。
ただし、ソフト側が要求する仕様のH.264を用意しないと再エンコードが発生してしまいます。
私はx264でH.264にエンコードしていますが、従来のエンコード設定ではこんな感じで、出力可能ターゲットのBDAVやBDMVがグレーアウトしてしまいます。
こういう人って結構いないですかね?
そこで、今回はどうやったらx264を使ってこれらの表示がグレーアウトしないファイルを出力できるかを検証してみました。
用意するもの
x264(主役です)
AVIUtl
x264guiEx(最新版推奨(現時点では1.58)
tsMuxeR
TMSR4で出力したソースファイル(ES出力したもの推奨:例)m2v+aacなど)
x264のエンコード設定について
エンコードの設定はきわめて簡単です。
こちらを参考にしてください。
http://www.x264bluray.com/
x264ではパラメータを多くいじれることから、ついついいじりたくなってしまう人もいると思いますが、BDAVやBDMV用のソースを作る場合は、下記の通りにする必要があります。
ソースが1080iの場合は上記のサイトを参考にすると、下記の設定となります。
--bitrate XXXXX --preset veryslow --tune film --bluray-compat
--vbv-maxrate 20000 --vbv-bufsize 20000 --level 4.1 --keyint 30
--open-gop --slices 4 --tff --colorprim "bt709" --transfer "bt709"
--colormatrix "bt709" --sar 1:1 --pass 1
赤字は自由に変更できる場所です。crfは使えません。マルチパスは問題ありません。
ビットレートの明確な指定が必要なようです。
例ではプリセットがveryslowとなっていますが、当方は、ソースに対してビットレートの余裕を持たせている上、2パスを使うことが多いのでfastにしています。tuneもソースに合わせて自由に選んで問題ありません。
sarも自由に設定できます。といっても、BDAVやBDMVに定義されている解像度等から外れるとNGですが。
具体的には720x480を4:3で表示したいときにsarを8:9にするといった事は全然問題ないです。
なお、--vbv-maxrateと--vbv-bufsizeは上記のサイトだとそれぞれ40000、30000とBDMVの規格に準拠した値になっていますが、BDAVではその半分くらいにしておいた方が良いみたいです。
また、SD解像度かHD解像度かで色空間は選んでください。(紫色の部分)
上記の設定で同じファイルをmp4出力したものをTMSR4に入力すると
上のように出力可能ターゲットとしてBDAV,BDMVが点灯します。やったーー!
と喜びたいのですが、実は出力の段階に移行すると
音声のところに見たくもない「Rescue」の文字が出てきてしまいます。
このままだと、音声は再エンコードされてしまいます。
ちなみに、ソースファイルの音声はMPEG2 AAC LCであり、BDAVの規格に含まれているので、本来は再エンコード対象ではないはずです。
ということで、次はどうするかというとmp4の出力をやめてm2tsにすることを考えました。
ここで、x264guiExのエンコ後バッチ処理が生きてくるわけです。
m2tsへのmuxにはtsMuxeRを使います。なお、GUI版ではなくCLI版になります。
当方で作ったバッチファイルはこんな感じです。
===============================================================
@echo off
rem tsmux.metaを生成
echo MUXOPT --no-pcr-on-video-pid --new-audio-pes --vbr --vbv-len=500 > %{aviutldir}\tsmux.meta
echo V_MPEG4/ISO/AVC, "%{savfile}.mp4", fps=29.970, insertSEI, contSPS, track=1, lang=jpn >> %{aviutldir}\tsmux.meta
echo A_AAC, "F:\tmp\mpeg2\%{savname}.aac", lang=jpn >> %{aviutldir}\tsmux.meta
rem m2tsにmux
%{aviutldir}\tsmuxer.exe "%{aviutldir}\tsmux.meta" "%{savfile}.m2ts"
rem 不要ファイルの消去
del %{savpath}
rem keyframeファイルのコピー
copy "F:\tmp\mpeg2\%{savname}.keyframe" "%{savfile}.keyframe"
===============================================================
tsMuxeRはAVIUtlと同じフォルダにいれてあります。ところどころ、x264guiExで用意されている環境変数を用いています。
また、上記のバッチファイルだと、入出力のファイル名が拡張子を除いて同一である必要があります。
x264guiExで前述の設定で映像のみをエンコードした後、上記のバッチファイルで処理を行います。処理内容は
1. エンコードで作成されたmp4ファイルとソースの音声ファイル(.aac)を元にmetaファイルを作成
2. m2tsにmux
3. mp4ファイルを削除
4. TMSR4で出力したキーフレームファイルをコピー
4番は私の都合でそうしていますw。要らない人にとっては要らないものです。
上記で作成したm2tsを入力してみると
mp4ファイルではRescueになっていた音声データも何の問題もありません。(おお、ブラボー!)
自分用の備忘録ですが、どなたかの参考になれば幸いです。
コメント