他のアカウント

プロフィール

フォトアルバム

ニンジャー

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

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になっていた音声データも何の問題もありません。(おお、ブラボー!)

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

2007-04-11

PSPの動画の個人的なまとめ

ファーム3.30で色々と解禁になったPSPの動画機能ですが、ここでちょっと動画ファイル作成について少しまとめてみようと思います。

使用するソフトは以下の通りです。
携帯動画変換君
ffmpeg (rev8564)
mp4box (Ver.0.4.3)
x264 (r635)
avisynth(2.5.6(MTパッチ適用済み))
lanczos3.vdf(リサイズフィルタです)

それぞれバージョンとソフト名でググれば出てくると思います。私の環境だとなぜかXvidからの変換にx264だと失敗してしまったのでXvidを使用したファイルにはffmpegを、WMVにはx264を使用しています。ちなみに、基本的に1440x1080や1920x1080からのエンコードになるのでリサイズを行います。ffmpegはbicubicを使用した縮小を行うそうなので、その前に携帯動画変換君のフォルダ中のcoreフォルダにあるAVS_Skelton.avsを以下のように変更しました。

# 3GP_Converter AVS-Mode skelton
Plugin="C:\Program Files\AviSynth 2.5\plugins\"
setMTmode(2,2)
DirectShowSource("<%InputFile%>", fps=29.97003)
LoadPlugin(Plugin+"lanczos3.vdf")
ConvertToYUY2()
Lanczos3Resize(720,480)
ConvertToYV12()
return last

fpsがえらく細かいですがw、なんか正確にはこんな感じらしいです。ちなみに、今回の例では720x480での出力を前提としています。出力解像度に応じて変更してください。たぶん多いのは480x270,480x272だと思います。あとItem番号も変えてくださいねw。

次にTranscoding.iniを以下に記載します。

[Item23]
Title=AVC 720x480/29.97fps/crf=20.0  (16:9)
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -title "<%Title%>" -timestamp "<%TimeStamp%>"   -threads 2  -s 720x480 -r 29.97003  -crf 20.0 -qmin 10 -qmax 24  -vcodec h264 -coder 1 -level 30 -bufsize 128kb -g 300  -mbd 2  -trellis 2 -partitions parti4x4+partp4x4+partp8x8+partb8x8 -aspect 16:9 -acodec aac -ac 2 -ar 48000 -ab 128k -f mp4 "<%OutputFile%>1.mp4""
Command1=""<%AppPath%>\cores\mp4box" -fps 29.97003 -par 1=40:33 -add "<%OutputFile%>1.mp4" -new "<%OutputFile%>.MP4""
Command2=""<%AppPath%>\cores\ffmpeg" -y -i "<%OutputFile%>" -f image2 -ss 5 -vframes 1 -aspect 16:9 -s 160x120 -an "<%OutputFile%>.jpg""
Command3="rm "<%OutputFile%>1.mp4""

Commond0の -threads 2はデュアルコアCPU以上の場合に役立ちます。ただし、その際は携帯動画変換君の優先度を優先以上にしないと効果がないようです。これで、720x480の16:9のmp4が出力できるはずです。

[Item25]
Title=AVC 720x480/29.97fps/crf=20  (16:9)
Command0=""<%AppPath%>\cores\x264"  --crf 20 --level 3 --keyint 300 --no-fast-pskip --nf --trellis 1 --analyse p8x8,b8x8,i4x4,p4x4 --threads 2 --thread-input --progress --no-psnr --no-ssim --interlaced --output "<%OutputFile%>.264" "<%InputFile%>" 720x480 --fps 29.97 --sar 40:33 "
Command1=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vn -acodec aac -ac 2 -ar 48000 -ab 64 -f mp4 "<%OutputFile%>a.MP4""
Command2=""<%AppPath%>\cores\mp4box" -fps 29.97003 -par 1=40:33 -add "<%OutputFile%>.264"  -add "<%OutputFile%>a.MP4":lang=jpn -new "<%OutputFile%>.MP4""
Command3="rm "<%OutputFile%>.264""
Command4="rm "<%OutputFile%>a.MP4""
Command5=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -f image2 -ss 5 -vframes 1 -aspect 16:9 -s 160x90 -an "<%OutputFile%>.jpg""

これがx264からのエンコードの場合ですね。command0に--interlacedオプションが付いていますが、これはインタレ保持のためです。一応まともに再生できていることは確認していますが、本当に保持しているかは謎です^^;。これも必要に応じてItemの番号やサイズを変更してください。

ちなみに、携帯動画変換君が終了した後スタンバイに入れる方法も紹介しておきます。
3GP_Converter.iniを以下のように変更してください。

ExecIfFinished=1
ExecIfFinishedCmd=C:\windows\System32\rundll32.exe powrprof.dll,SetSuspendState
(ExecIfFinishedCmdは改行せず1行で書いてください)

これで終了後サスペンドに入れるはずです。まぁ、これが皆さんの参考になればいいなーって思いますー。いやー、これでPSPで動画を見る気が再び起きてきましたw。この調子でPS3のH.264の環境も改善して欲しいです。

最近のトラックバック

アクセスランキング