2012年11月8日木曜日

ゆっくりMovieMaker3 開発日記 - 19 「字幕が透過しない・・・だと・・・」

今日の作業内容
  • アイテム編集コントロールの作り込み
  • プレビュー処理の作り込み




各種アイテムをプレビューで表示されるようにし、いざ動画の上に字幕を表示させるテスト。
タイムラインに動画と字幕を追加し、いざ再生ボタンをポチッとな。

字幕が透過していない・・・だと・・・。
(※画像他、アイテムを適切な大きさに拡大/縮小する処理を書いてないので、字幕が拡大して表示されています。)

もちろん、字幕と画像はちゃんと追加されていて、字幕の後にきちんと表示されています。

ちなみに、字幕を画像化した物がこちら。一般的なブラウザ・画像ビューアでは背景が黒く表示されていると思いますが、ファイルには透過情報が含まれています。
確かに以前テストした時は上手くいってたので、以前成功したコードと比較していると、なんとか原因を突き止めることが出来ました。


今回使用したコードがこちら。
<timeline framerate="30.0000000">
<group type="video" bitdepth="32" width="640" height="360" framerate="30.0000000">
<track>
<clip start="0" stop="10" src="動画.avi" mstart="0"/>
</track>
<track>
<clip start="0" stop="10" src="字幕.bmp"/>
</track>
</group>
</timeline>

そして、問題点を修正したコードがこちら。
<timeline framerate="30.0000000">
<group type="video" bitdepth="32" width="640" height="360" framerate="30.0000000">
<track>
  <clip start="0" stop="10" src="動画.avi" mstart="0"/>
<transition start="0" stop="10" clsid="{BB44391D-6ABD-422F-9E2E-385C9DFF51FC}">
</transition>

</track>
<track>
<clip start="0" stop="10" src="字幕.bmp"/>
<transition start="0" stop="10" clsid="{BB44391D-6ABD-422F-9E2E-385C9DFF51FC}">
</transition>
</track>
</group>
</timeline>

新しく、「transition」という記述が追加されています。
(※これらはプレビュー内容をxmlファイルへ書き出しているだけで、実際にこのxmlファイルを弄ってプレビューを生成しているわけではありません。)
これは、本来画像の大きさを変更したり、画像の表示位置を変更するために使用する物なのですが、どうやらこのトランジションを適用すると、画像がARGB形式で認識されるようです。


Transitionを適用する処理を追加し、再度チャレンジ。
どうやら上手くいったようです。

と言うわけで、以前話した「BMPに透過情報を含めていれば、DESに突っ込むだけで問うか情報を読み込んでくれる(キリッ」という情報は間違いでした。
正しくは、「透過情報を含むBMPをタイムラインに追加し、Transitionを適用し、VideoGroupのbitdepthに32を指定してやれば透過するようになる」です。

DirectShow難しいです。
正直、再現方法は分かった物の、なぜこういった処理になるのかが分かっていないので、あとでMSDNを読むなりして調べておきます。


0 件のコメント:

コメントを投稿