ちぎっては投げるブログ

Programming, Android, RaspberryPi, Digital Devices, Kinkuma Hamster...

PT2 で録画のあとに、自動で音ズレのしないエンコードをする (H264)

録画のあとに自動で音ズレなしでエンコードしたい

TVRock の場合、 TN: に続けてコマンドを書く。TNの他にも記述方法が色々あるのでヘルプをよく読むと役立つ。

BonCasTimer の場合は、bat ファイルを記述し、録画後実行batに登録する。ただし、bat の場合は、フルパスに半角スペースが入っていないと失敗することがある。よくわからないが、対策として ts 出力フォルダ名に半角スペースを含ませておく。

コマンドと bat の内容について

複数の処理を順番に行うことができ、さらにキュー機能もついている V-AutoEncoder を使う。 V-AutoEncoder での処理内容について

MediaCoder の出力フォルダの設定、プリセット作成をしておく。(mediacoder-preset.xml) 1.TSSplitter で分解、一番大きいファイルを使う。 2.分解した TS ファイルを BonTsDemux で Mpeg2PS に変換(音ズレ対策) 3.Mpeg2PS を MediaCoder にプリセットと一緒に渡して H264 にエンコードする。 おまけ.指定したフォルダに move コマンドで移動させる。

*音ズレ対策に色々試しましたが、これが一番良かったです。 試したこと: ・生の TS を MediaCoder に渡す。 -> 意味なかった。 ・分解しただけの TS を以下略。 ・音の delay を適当に設定 -> 一律にしか設定出来ないので、自動エンコードには向いていない。 ・動画と音声を分離して、MediaCoder に渡す。 -> 意味なかった。 ・動画と音声を分離して、動画と音声を別々にエンコードし、MP4Box でまとめる。 -> 意味なかった。

塵も積ればほこりと成る  V-AutoEncoderでTVRockからH264へ自動エンコードする手順 を参考にさせてもらって、以下のように作成しました。

X:\tvenc_temp は、エンコードを一時的に行う場所です。適当に変更してください。 X:\tvenc はエンコードファイル移動先です。適当に変更してください。 hoge の部分は適当にあわせてください。

処理中に次の動画を受け取るとキューに溜める仕様ですが、ドラッグ&ドロップは1ファイルずつのみで複数ファイルを同時にドロップは出来ません。ひとつずつドロップしましょう。そして、キューに溜めた場合、move が先に実行されてしまうので、エンコードを一時的に行うフォルダにエンコードした結果ファイルが残ってしまいます。手動で移動するか、なんとかして V-AutoEncoder に move も組み込みたいところ。

BonTsDemux の cap_sts_sea.ini に以下を追記。 MPEG2PS_AC3 =-f dvd -vcodec copy -aspect 16:9 -acodec ac3 -ar 48000 -ab 192k -vol 256 -y MPEG2PS_AC3_EXT = mpg

mediacoder-preset.xml(24fps, 実写の場合は30fpsに変更する。)UTF8 で保存する。あんまり設定を変更すると音ズレするので注意。どれが原因かは不明。とりあえず音声のサンプリングは変更しないほうが吉。 <?xml version="1.0" encoding="UTF-8"?> <MediaCoderPrefs><node key="overall.ui.mode">Advanced</node><node key="overall.ui.language">15</node><node key="overall.ui.stats">Never</node><node key="overall.ui.expertView">Console Output</node><node key="overall.ui.param">750,732,602,146</node><node key="overall.ui.noWelcome">5038</node><node key="overall.task.destdir">X:\tvenc_temp&lt;/node><node key="overall.subtitle.mode">Disabled</node><node key="overall.subtitle.slang">jpn</node><node key="overall.audio.channels">Original</node><node key="overall.audio.autoSource">false</node><node key="overall.audio.autoEncoder">false</node><node key="overall.audio.source">FFmpeg</node><node key="overall.audio.format">LC-AAC</node><node key="overall.audio.encoder">Nero Encoder</node><node key="overall.video.csp">Original</node><node key="overall.video.mode">VBR</node><node key="overall.video.autoSource">Disabled</node><node key="overall.video.source">FFmpeg</node><node key="overall.video.autoEncoder">false</node><node key="overall.preview.mode">Off</node><node key="audioenc.aacplus.mode">Stereo</node><node key="audioenc.aacplus.type">LC-AAC</node><node key="audioenc.nero.quality">60</node><node key="videoenc.x264.profile">Main</node><node key="videoenc.x264.level">40</node><node key="videoenc.x264.preset">Very Fast</node><node key="videofilter.scale.enabled">true</node><node key="videofilter.scale.width">1280</node><node key="videofilter.scale.height">720</node><node key="videofilter.frame.enabled">true</node><node key="videofilter.frame.fps">24</node><node key="videofilter.eq.brightness">-5</node><node key="videofilter.denoise.mode">Temporal</node></MediaCoderPrefs>

h264.cfg [RenameInputFile] yes [P1Application] C:\hoge\TSSplitter\TsSplitter.exe [P1Dir] X:\tvenc_temp [P1Arguments] "%Input%" -OUT "%P1Dir%" -EIT -SD -1SEG -SEP3 -OVL5,10,0,0 -WAIT2 [P1SearchPattern] %InputName%_HD.ts [P1SearchMethod] Largest [P2Application] C:\hoge\BonTsDemux\BonTsDemux.exe [P2Arguments] -i "%P1Output%" -o "%P1Dir%\%P1OutputName%" -es 0 -encode "MPEG2PS_AC3" -sound 0 -nd -nogui -start -quit [P2SearchPattern] %P1OutputName%*.mpg [P3Application] C:\Program Files\MediaCoder\MediaCoder.exe [P3Arguments] "%P2Output%" -start -exit -preset "%param1%" [P3SearchPattern] %P2OutputName%.mp4 [P1DeleteTemporalFiles] yes [P2DeleteTemporalFiles] yes [P3DeleteTemporalFiles] yes

コマンドの実行方法

bat ファイルの場合 "C:\hoge\V-AutoEncoder\v-autoencoder.exe" -settings "C:\hoge\V-AutoEncoder\h264.cfg" -input %1 -param1 "C:\hoge\V-AutoEncoder\mediacoder-preset.xml" -queue move "X:\tvenc_temp\%~n1_D.mp4" "X:\tvenc\%~n1.mp4"

TVRock の場合 TN:"C:\hoge\V-AutoEncoder\v-autoencoder.exe" -settings "C:\hoge\V-AutoEncoder\h264.cfg" -input %1 -param1 "C:\hoge\V-AutoEncoder\mediacoder-preset.xml" -queue TN:move "X:\tvenc_temp\%4_D.mp4" "X:\tvenc\%4.mp4"

PT2 自動エンコード設定の問題点

・move もキューに含ませたい。V-AutoEncoder に組み込もうとして適当に bat 書いたけど失敗した。記述が間違ってる? しかたがないので、上記のようにV-AutoEncoder終了後にmoveさせているが、キューに溜まっている場合に対応出来ない。

計画中

SetFSB と連携して、エンコード時だけオーバークロック、終わったらダウンクロックが出来ないかな?