ここ最近ずっとこれを研究しています。
まぁ、といってもプログラムを作ってるわけではないのですが。
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だけでもこういった再生出来る出来ないが出てもおかしくはない。
そういう意味では興味深い内容であるのは間違いないと思った。
0 件のコメント:
コメントを投稿