2011年10月24日月曜日

EDCBからBonTsDemuxを使い自動エンコードPart2

0 コメントする
前回の日記に続いてになりますが、今回は安定的にバッチファイルでEpgDataCap_BonからBonTsDemuxに渡す方法が暫定ですが出来たので、公開します。


まず症状ですが。
録画が完了し、BonTsDemuxが立ち上がり進行度はちゃんと進む。そして処理としては完了しているように見えるのですが、実際にはファイルが出来ていないということ。

そして詳しく見ていくと、BonTsDemuxが立ち上げるハズのffmpegがちゃんと立ち上がっていない。

成功している場合は、ちゃんとffmpegが立ち上がり動作する。


原因
父の方がこのあたりの分野は詳しいので相談すると見えてきたのが、

通常のエンコードはほぼ100%問題なく終了する。
録画後のバッチファイル動作でのみ発生するようである。
ログを見ると、一連の流れは成功しているように見える。

そこで、鍵となるのはffmpegが立ち上がらないところで、何故立ち上がらないのかということになった。そこで、可能性として見えてきたのは録画のアプリケーション側か何かが、エンコードする対象のファイルにアクセスしており、そのためにBonTsDemuxがデータを読み込めずffmpegの立ち上げに失敗しているということ。

ようはffmpegがファイルの読み込み・展開に失敗してるということ。

これなら納得がいく。BonTsDemuxがffmpegが立ち上がらない時に対してエラーと判断しないのが
またなんとも・・・。元々ファイルがちゃんと作成されている事を前提として動かしているから、なのかもしれませんが。また、OSにSSD(シーケンシャルリード500MB/sオーバー)、データ保存にHDD(ライト最大100MB/s前後)を使っているため書き込みの終了より速くアプリケーションが立ち上がってしまうのが原因なのかもしれません。

対策
簡単な話で、バッチの実行にディレイ(遅延)を意図的に発生させます。そうする事でオーバーヘッドを用意し確実に渡すようにします。
録画ファイルなのでアクセスをしているのは録画のアプリケーションであるEpgDataCap_Bonのハズです。ならば、そのアプリケーションが書き込みを確実に終了するまでの時間をとります。

ただ、バッチファイル単体ではその遅延をとれません。父曰くUNIX系ではsleepコマンドによって行う事が出来るそうなのですが。
そこで調べてみたところ、バッチでも同じ事をさせるアプリケーションがありました。
http://www.vector.co.jp/soft/win95/personal/se452993.html
こちらのソフトウェア「sleep.exe」をダウンロードします。
父が以前作ったバッチファイルでは先頭にチェンジディレクトリ=cdでBonTsDemuxのあるフォルダに移動しています。
なのでsleep.exeをBonTsDemuxと同じフォルダに置きます。
そして以下のようにします。




cd "BonTsDemuxがあるフォルダ"
echo %date% %time% START FILE=$FilePath$ >>psp.log
sleep 30000 >>psp.log
BonTsDemux.exe -start -encode "PSP" -rf64 -vf -nd -i "$FilePath$" -o "保存先$FileName$" -quit
echo %date% %time% END FILE=$FilePath$ >>psp.log


「""」は付け忘れるとファイルの渡すのに失敗する事があったので追加しました。

元々エンコード処理は自動化されるわけで、速度を求めているわけでもなく30秒ほど遅延を作っています。環境に応じてこの遅延は変わると思います。

今のところこれで失敗はしてないので解決してると思います。ただ2チャンネル同時の場合の処理に関してはまだ未検証ですが・・・。

以上、報告終わりっ! 次回は今期のアニメについて書きたいなぁ・・・。

Fate ZeroのOPいいよー。久しぶりに熱くなってつい歌っちゃいましたw

CD買おうかな。

2011年10月20日木曜日

EDCBからBonTsDemuxを使い自動エンコード

0 コメントする
ひとまでEDCBのセットアップが終わった所で、今度は録画後のエンコードの自動化に挑戦する。

個人的にはPSPに追加して持ち運びが出来るようにしたいわけなのだが。

これが中々上手くいかない。

現状の設定では、TvRock用に使っていた物を少し変更して使っている。

特に加工はせず直接BonTsDemuxに運ぶ、もっとも簡単な設定なので、書く必要もないかもしれないが、一応書く。

cd "BonTsDemuxがあるフォルダ"
echo %date% %time% START FILE=$FilePath$ >>psp.log
BonTsDemux.exe -start -encode "PSP" -rf64 -vf -nd -i $FilePath$ -o 保存先$FileName$ -quit
echo %date% %time% END FILE=$FilePath$ >>psp.log

まず最初にBonTsDemuxがあるフォルダに移動
エンコードのスタート時刻をpsp.logに保存
BonTsDemuxを起動 起動オプションを渡す
エンコードの終了時刻をpsp.logに保存

これで1つ試しに予約してみると成功したが、次に実行すると起動してエンコードを開始するものの成功しない。

複数起動が重なったりすると上手くエンコードをしてくれないようなのだ。

症状としては、起動してエンコードをしているような表示になるが、タスクの進行度が異常に速く終了する。そして変換後のデータは出力されない。つまり失敗している。

ffmpegにデータを渡すのが失敗しているようなのだが・・・イマイチ解決策がつかめていない。

というのが現状。

できれば、TsSplitterに通してからBonTsDemuxに渡し、1つずつエンコードさせるような仕組みを用意したいものだが・・・。


いつになったら出来る事やら。

録画機との格闘の日々は続く。

TVRockからEpgDataCap_Bonへ

0 コメントする
久しぶりの更新になります。

相変わらず録画機の調整に追われる日々。中々いい解決策が見つからずおろおろしておりますw

そんな中、開発が止まってるTvRockよりEpgDataCap_Bon(EDCB)の方がいいのでないか、と思い始めまして。

面倒ではあるものの新規に導入してみました。

TvRockから流用出来るのはBonドライバとTvTest、BonTsDemuxのみ。他は全て仕様が異なるため使用不可。

TVRockは

TvTest・TvRecなどの付属していないアプリケーションとして利用するのに対し

EDCBは
付属しているEpgTimer→EpgDataCap_Bonなのでその点が非常に楽。

追加するものはほとんどなく、TvTestは視聴に使うぐらいで特に必要というわけではない。

Twitter連携もデフォルトで使えるため、その部分も便利。

ただし、問題もある。

ネットワーク上での予約管理には別のアプリケーションを用意する必要がある。このあたりの設定が厄介で現状つまづいてる状態。

色々なサイトを参考に手順どおりに設定をしていったハズなのだが、EPGデータの読み込みは正常にできているのに表示が出来ていない。

何か別の方法が必要なのか・・・それとも小変更が必要なのか・・・。

因みに使っているバージョンは
EDCB 10.62
kkcald 0.7.18 サイトがなくなっているためhttp://dbit.web.fc2.com/こちらからDL、GoogleChromeでは直接DLが出来なかったため、右リックからソースの表示をしてそこからDLしている。
でよく見たところ・・・10以降の系統ではEpgDataCap2.dllが存在しないため10以前から持ってくる必要があるらしい。

それで持ってきて置いたところ、番組情報が表示されるようになった。ひとまずこれで安定したネットワークからの予約が可能になった。

あとはエンコードではあるが、これがまだ上手く実行される時とされない時があるため、ちょっと公開するのは微妙だが、それについては次の日記で記述する事にする。


2011年10月14日金曜日

思うように進まないMPEG2TSの変換

0 コメントする

地デジチューナーを導入してみたはいいものの、動画変換にかなり苦戦を強いられています。

まず、当初使用を予定していたMediaCoderは安定性が確立出来ず・・・。

複数の動画をエンコードして様子を見ると4つのファイルのうち1つのファイルがエラーを吐くといった具合。

もちろん、intelGPUを使用する事も出来ない状態なのでより苦戦を強いられている。

というのは前回の日記の続きでPSPが読み込んでくれないだけなんですけどね。それを無視すれば音ズレ対策だけで使用する事も出来る。

PSPに読み込ませようとするとMediaCoderは変換の設定にかなり厳しく、細かい設定の変更で特定の範囲の変更しか出来ないぐらいにターゲットが狭い。また、スピードが思ったように出てくれない。5.00x出たと思ったらエラー・・・とかね。

なので、その枠を外れるとエラーは出るしPSPでは再生出来ないし・・・。これだけで10時間近く費やした気がする。

結局上記の安定性が確立出来ない事を理由に今は無難にBonTSDemuxをテスト中。だがしかし・・・速度がでない・・・。CPU使用率を見ると100%使い切れておらず30~40%を推移。


どうしたものか・・・。

ついでにBonTsDemuxで「サイドバイサイドの構成が正しく~」というエラーが出たが、VC2008 SP1  ランタイム再頒布パッケージのインストールで回避出来た。

はてさて・・・なんかいい方法はないものか・・・。

個人的には、

録画終了後→エンコード→PSP→全てが完了していればスタンバイに移行。

の一連の流れを自動化出来ればと思っているのだが・・・。

スタンバイへ移行は出来なかったとしてもとりあえず、エンコードを無事成功させたいところ。



余談
MediaCoder PSP Editionで作ったプリセットファイルをMediaCoderに読み込ませたら盛大にクラッシュしましたとさw

そのせいで再インストールw怖いのでそういう方法はとらない事にしましたw

でもよくよく考えると、つまりそれはPSP Editionとは違う部分があるという事で。PSP Editionならではのチューンが加えられているのかもしれない。

2011年10月11日火曜日

PSP用の動画変換にintelGPUを使用出来るか

0 コメントする
ここ最近ずっとこれを研究しています。

まぁ、といってもプログラムを作ってるわけではないのですが。

MediaCoderを使って色んな設定で変換をテストしています。

結果から言うと、1回だけ一応認識はされたものが出来てそれ以外は全て失敗。


何が原因なのかを模索しているところなのですが、正直不可能に近いという結論に達しつつあります。



何故不可能なのかというと、

・MediaCoderに搭載されているintelQuickSyncVideoを使うためのMediaSDK3.0BetaがMainプロファイル使用してくれない。

・まず生成されるビデオコーデックの何かがおかしい。

この2点

まずPSPの仕様というのが結構厄介で、他の物でなら再生出来る物が再生出来ない。

そんな選り好みをするプレーヤーであったりします。

同じMP4であってもその中身はそれぞれ違う物であり、PSPの希望する要件に一致したものでないと非対応扱いにされてしまいます。


まずはそのPSPが再生出来るものですが。


H.264/AVC 480x272 CABAC使用 Mainプロファイル

が一般的に使用されるもの。サイズはDVDサイズも再生出来るようですが、画面サイズが480x272なのでそれに合わせるのが無難でしょう。

プロファイルレベルは3ぐらいまででいけると思われる。

問題はこのCABACで。

intelGPUを使用した場合、何故か出力結果を真空波動研で確認するとHighプロファイルになっている。

MediaCoderの設定をbaseline、Mainに変更しても変わらないのだ。

これはMediaCoderが原因なのか、それともintelGPUの問題なのか。

因みに以前CUDAで実行した時もこうなった記憶がある。もちろんCUDAの場合もPSPでの再生に失敗している。

もちろんPSPで再生出来ないだけでPC上では再生出来る。

問題があるとすればやはりプロファイルとCABACの問題だろう。

CABAC(Context-based Adaptive Binary Arithmetic Coding)はMainプロファイルで使用されるエントロピー符号化となっておりbaselineでは使用されない。

Highプロファイルはどうなのかと言われれば、ベースがMainのため必然的にCABACを使用しているハズである。

Wiki曰く、「メインプロファイルに 8×8画素整数変換、量子化マトリックス等を加えたもの。」

となっているので、非対応の原因はおおよそHighプロファイルで加えられた仕様をGPUで使用しているのが主な原因ではないかと推測している。



がしかし、解決策は特に見つからず、現状はこれで頭打ちである。因みにMediaCoder PSP EditipnでintelGPUエンコードしても同じく再生は出来ない。


そもそもintelGPUへのプロファイル変更が効いてない時点で現状のMediaCoderでは使用不可能と考えるのが無難なのかもしれない。

とはいえ、フリーでintelGPUの支援が使えるのは多分このMediaCoder一択になってしまう。

さて・・・どうしたものか・・・。

因みに再生出来たものはビットレートが8000kbps近くあるもので、明らかに処理落ちがしてるのだが、非対応とはならなかった。

PSPで詳細を見ると ビデオコーデック AVC -kbpsとなっていたので対応外のサイズなのだと思われる。

対応外なのに再生出来るのもまた不自然な話なのだが・・・一体どういう基準でPSPが判別しているのかがイマイチ掴めてこない。

ひとまずビットレート高めに設定して無理矢理再生させるという方法もなくはないようだ。

これが私の現状の研究成果である。ついでXperia Acroでは問題なく再生出来ていたようなので、スマートフォンでは扱えるようである。

まぁ、PSPの出た当時はGPGPUもあまり盛んではなかったし、使えなくても当然といえば当然で、MP4、H.264の特性上様々な技術が追加され複雑化しているためH.264だけでもこういった再生出来る出来ないが出てもおかしくはない。

そういう意味では興味深い内容であるのは間違いないと思った。

2011年10月7日金曜日

PLEX PX-W3PEを導入・・・したものの

0 コメントする
久しぶりの更新になりますが、最近はとある地デジチューナーと格闘してます。

それが

PLEX PX-W3PE

2万円に近いお値段がする3波対応チューナーなのですが、いわゆるTS抜きが出来るキャプチャーボード。

それでいて、PCIex x1なので最近のPCだと比較的どのPCでも載せる事の出来るのも魅力。更にロープロ。

まぁ、とはいえこのカード。1くせも2くせもあるちょっと厄介なカードでもあります。まぁ、当然といえば当然なのですが。


でまぁ、開封して早速WinodwsHomeServer2011(以下WHS2011)のインストールされたMini-ITX機に挿し込み。

アンテナはケーブルが何故か私の部屋にはないため(他の部屋にはある)仕方なしに同時購入したブースター付きの室内アンテナを購入。

これで上手くいくのかわからないものの。多分いけると確信してセットアップ。

導入方法に関しては他サイトさんが詳しく紹介しているので、こけた箇所だけピックアップしていきます。(現在進行形でこけてますかw)

1.ドライバのインストール
ドライバはWHS2011用がないためWindows7用で代用。そのままインストールで問題なし。チューナーに内蔵されているブースターはオートだと上手くいかないらしいので最初はアンプにしてレジストリ書き換え。だがしかし、上手く映らずパススルーでシッカリ映るようになった。どうやらブーストが効きすぎていたみたい。

2.TVtestの導入
付属の視聴ソフトがないためまずは視聴ソフトのDLとセッティングを行う。ここで早速失敗。色々なサイトを参考にドライバの導入を行ったのだが、スクランブル解除が上手くいかなかった。そして試行錯誤しているうちに原因が判明。

CardReaderのファイル(内蔵カードリーダ用)をtvtest.exeと同じ場所に置いていなかった。

別フォルダに入れていたためカードリーダのスクランブル解除が出来ていなかったようである。

ひとまずこれで視聴成功。

ただしTVtestのチャンネルスキャンでスキャンされたチャンネル以外の登録に手間取ってます。出来るのかな?

3.TVRockの導入
視聴は出来たものの録画の自動化ができないため、TVRockを導入。普通にインストール。TvTestと連携をとるためにTvTestのプラグインフォルダに連携用のファイルを置く。

だがしかし、これだけでは上手く動作しない。

ドライバの指定とIDを指定する必要があるようだ。

起動オプションに/d ドライバ.dll /DID Aといった具合に設定。

あとは特に問題なく動くようになった。

と思ったが。

4.2チューナーを同時に動かす
このチューナーは2番組同時録画可能なハズなので、TVRockで2チューナー目を設定し動かしてみる。
がしかし、動いてくれない。

何故だろうと色々調べてみると、チューナー空間の自動分離がデフォルトでは備わっていないようである。

そこでkuma版のドライバを使用してみる。

問題なく2チューナー目も動作するようになった。


5.MediaCoderとの連携
中々書かれているところが少ないMediaCoderとの連携とセッティング。

Mini-ITX機とはいえ高速変換をさせるようにしたい。という事でintel Core i3-2100Tをチョイスしているわけだが。2100Tって2.5GHzで2Core4threadだからたいして早くない・・・。

そこでintelのQuickSyncVideoを使用する。いわゆるGPGPU、GPUアクセラレーターである。

それがフリーで使用可能なのがこのMediaCoder、ただしこのソフトウェアも多少癖が強く初心者にはオススメし難い。

またここで紹介するのはCMカットをせずにそのまま変換させる方法なのでCMカットをする場合はTsSpliterなどを同時に動かす必要がある。

MediaCoder x64 2011 build 5191で内部ソフトウェアはintelMediaSDK3.0Betaを使用している。

これでエンコーダーをIntel Encoderに指定してintel_hw_accelにチェックを入れれば高速化が可能になる。

連携方法はTVRockの設定でコマンドの実行を使う。

エンコード:"Mediacoder.exeのフルパス" -start -exit -preset プリセットのフルパス "%1"

これをTVRockの予約録画の時にエンコードを選ぶ事で録画後エンコードを開始してくれる。ただ、その後の自動シャットダウンなどの作業をしてくれないので、それが出来る方法を模索中。


実際どれだけの違いが出るのかというと。

通常 0.45x

intelQSV 1.20x

ぐらいが目安。まぁ1x以上なので動画の時間よりも早くはエンコード終了出来る。

因みに2つ同時でもこのスピードは変わらず1.20xぐらいで動作するのもメリットの1つ。

ただ、色々とエラーが出る事が多く、安定して動作はしてくれないので元のtsデータは残すのが無難。

因みにソースをffmpegにして品質をspeedにすると2.10xと約2倍のスピードになるのだが、Audioとの同期に失敗するのかAudioデータが欠損してしまうため実用に至っていない。

現在これを回避しつつ速度を出すべくセッティングを模索中。

MediaEspressoだとだいたい2倍近くは出ていたと思うので多分この「ソース」(多分デコード処理)の設定がエンコードスピードの鍵を握っていると思われる。


以上こけた箇所ですかね。

因みにUltraVNCを導入したら番組表表示に使うローカルホストが干渉されて使えなくなりましたとさ。

その時の対処方法もまだ模索中。

仮の回避方法としてはTVtest側のEPGを使い、番組メニューから「iEPGに関連付けする」を使う事でTvRockに予約登録は出来る。手動で登録する必要がないのである程度手間は省けるものの少し面倒。