他のアカウント

プロフィール

フォトアルバム

ニンジャー

趣味が広く浅いのですが、それらについて適当に書いていこうと思います。まぁ、ブログだから気楽にと言うことで。

« 2012年8月 | メイン | 2013年2月 »

2012-09-24

TMPGEnc MPGE Smart Renderer 4で再エンコードが発生しないH.264ファイルの作成方法


先月リリース(だっけ?)されたTMPGEncのMPEG編集ソフトの最新版であるTMPGEnc MPEG Smart Renderer 4(以下TMSR4)では、H.264なBDAVも作成可能になりました。

ただし、ソフト側が要求する仕様のH.264を用意しないと再エンコードが発生してしまいます。

Test_dame_2


















私は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に入力すると

Test_ok1

















上のように出力可能ターゲットとしてBDAV,BDMVが点灯します。やったーー!

と喜びたいのですが、実は出力の段階に移行すると

Test_mata

















音声のところに見たくもない「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を入力してみると

Test_ok2
















この画面は当然問題ないですし、

Test_ok3_2

















mp4ファイルではRescueになっていた音声データも何の問題もありません。(おお、ブラボー!)

自分用の備忘録ですが、どなたかの参考になれば幸いです。

最近のトラックバック

アクセスランキング