2012年9月28日金曜日

ゆっくりMovieMaker3開発日記 - 3 「キャラ素材とpngファイルを非対応にするかもしれないという話」

しばらくぶりです。
決して三日坊主になったわけではなく、YMM以外の事情で忙しかったり、発見した(今まで見ない振りをしていた)問題点について調べたりしてました。

相変わらず今日も作業が進んでないわけですが、とりあえず問題点に関する整理をしたいと思ってます。


さて、今回どんな問題点にぶち当たったのか。を、話す前に、ゆっくりMovieMaker3ではどのような機能を実装しようと思っているかから話します。
ゆっくりMovieMaker1/2では、動画の再生をWindowsMediaPlayerや、DirectShowPlayerに任せており、プレビューウィンドウ上に動画編集ソフトっぽくプレビューを表示させているだけでした。
なので、実際に動画の出力は行えませんし、プレビューと実際の動画の表示とで、ズレがあったりしていました。

そろそろ動画編集ソフトもどきは卒業して、れっきとした動画編集ソフトを作りたいな。
そう思ってゆっくりMovieMaker3の開発を進めてます。

具体的に、どのような機能を付けるかというと、
  • 動画(.avi)の出力機能
  • 完璧な(配置ズレの無い)プレビュー機能
の、まあ至って普通な動画編集ソフトの機能です。
もちろん、従来通り、AviUtl互換形式での出力にも対応するつもりです。

で、この動画編集ソフトな機能をどうやって実装するかという話ですが、
を使用しようと思ってます。

このAPIをしようすると、動画編集に関する知識を全く持たない中の人のようなプログラマーでも、簡単()に動画編集プログラミングを行うことが出来るという物。
事実、サンプルプログラムを弄った限りでは、標準的な動画編集ソフトの機能は全てそろっており、なかなか使い勝手の良さそうなAPIでした。
ウィンドウの特定の位置に、特定のサイズで動画を描画しています。
また、YMM1/2では、ある一定以上の倍速をすると、正常に倍速再生されないという現象も起こっていましたが、こちらでは正常に(10倍速・20倍速でも)再生されました。
とまあ、なんとも都合の良いAPIで、これなら簡単にソフト製作ができるぞ。と思っていた矢先、
  • 字幕の表示が出来ない
  • .pngファイルの表示が出来ない
  • 乗算表示できない
と、問題があることが判明(気がつくのが遅い)。

字幕の表示が出来ない
と言う点に関しては、字幕を画像化することによって問題は解決しました。
これは問題ありません。
ただ、問題なのが
.pngファイルの表示が出来ない/乗算表示が出来ない
と言う点。
どうやら、DESは一部の画像ファイルの読み込みに対応しており、bmp、jpeg等を読み込むことは出来るのですが、なんと.pngファイルの読み込みには未対応。
これで何が困るのかというと、このままだとキャラ素材を未対応にせざるを得なくなるんです。
キャラ素材の素材ファイルは全て.pngファイルを用いており、透過pngの重ね合わせや、乗算表示で、キャラクターの立ち絵を表示させています。
何とかして.pngファイルを読み込めるように(+乗算表示を可能に)しなければ、キャラ素材を正常に表示することが不可能になります。

ゆっくりMovieMaker3開発日記1時点で、ソフトの実装に関する別の問題を解決して、テンションを上げてブログを開設した矢先の出来事。
(忙しかったのも確かですが、)少しやさぐれて投げ出していました。


で、25日から今日まで、ちょこちょこと解決方法を調べたりしていました。
解決方法1
一々pngファイルをbmpファイルに変換。HDDに保存してからDESで読み込む。
論外です。目パチ・口パク・表情差分、それら全てをbmpファイルに保存し、読み込むなんて不可能。とは言いませんが、HDD容量を圧迫するため非現実的です。
却下。

解決方法2
DESのリファレンスを読みあさっていると、「その他のソースオブジェクト(英文)」というページを発見。
「Custom Source Filters」の項目を読むと、
DESにデフォルトで対応していないソースオブジェクトでも、以下に対応しているソースフィルタを作成したら読み込めるよ!
・ファイルのシークが出来るようにしてね!
・DESが読み込める形式にデコードするようにしてね!
との記述を発見。
肝心のソースフィルタの作り方をまだ調べていませんが、.pngファイルを読み込む為のソースフィルタを作成さえすれば、.pngファイルが読み込めないという問題は解決します。
また、やろうと思えば、パラメーターに適切な値を入力してやれば、合成済みのキャラ素材を返すようなフィルタも作れるはずです。

  • ソースフィルタを自作するためのサンプルがC++で書かれている
  • 中の人がC++を全く知らない
という、あまりにも大きすぎる問題を除けば少しだけ光が見えてきた気もします。


ところで
実はこんな方法を使えば一々悩まなくても済むよ!とか、別にこんな方法があるよ!なんてのがあったら教えて下さいお願いします(血涙)

0 件のコメント:

コメントを投稿