霧島マナの日記 鋼鉄のガールフレンド

ケータイはこちら | サイトマップ | 中文 | English

メモ


ParaFla! で動画制作
ちょっとしたフラッシュを作るのに重宝な ParaFla! ですが、今回、このソフトでニコニコ動画用の映像を制作しましたので、自分用のメモを兼ねて記しておきます。ちなみに「霧島マナの日記」のトップのフラッシュにも ParaFla! を使っています。{:rn:}
{:rn:}
{:rn:}
{:rn:}
制作画面は上のような感じです。{:rn:}
今回一番工夫した点は、冒頭のシーン(A)と次のシーン(B)とのクロスフェードです。単純なクロスフェードなら簡単ですが、シーンAではズームを行っているので、ズームしつつフェードというのを実現するためにカラクリが必要でした。上図をクリックして拡大して頂くとすぐ分かるのですが、最初のシーンがまず300フレーム続き、次に100フレーム、その後100フレームロールバック、さらにその後また100フレーム追加されています。この100進んで戻ってまた進んでいるところがオーバーラップ部分です。つまり、シーンAを300と100に分け、その100のところにシーンBの最初の部分をずれ込ませているのです。これだけならまだどうと言うことはありません。問題はシーンAのズームです。シーンAは画面の倍の解像度の画像を用意しズーム率を 1 から 0.5 へと変化させています。ズーム率0.5で丁度画面の解像度と同じになります。シーンAは300と100に分けられているので、0.5 を 3:1 の比、すなわち 0.375 と 0.125 で分け、最初の300フレームはズーム率 1 から 1 - 0.375 = 0.625 へと変化させ、残る100フレームで、0.625 - 0.125 = 0.5 へと変化させるわけです。{:rn:}
「簡単じゃん」と思われるかも知れませんが、頭の中で整理するのに少しばかり時間がかかりました。このように、ParaFla!はあまりWYSIWYG的でないのが難点と言えば難点ですね。{:rn:}
{:rn:}
このようにして動画を作っていくのですが、プロジェクトのプロパティで、SWFバージョンを特に理由のない限り"8"にしておくのが良いようです。そうしないと、筆者の環境では若干再生がカクつきました。{:rn:}
カクつきと言えば、FPSも同じくプロジェクトのプロパティで設定しますが、今回は最終的に15にしました。あまり動きの多くない動画なのでこのくらいで十分です。{:rn:}
{:rn:}

{:rn:}
フラッシュが完成すると、今度はニコ動にアップロードするための形式に変換しなければなりません。とりあえず、中間ファイルとして無圧縮ないし可逆圧縮のaviを作り、最後にAviutlのx264プラグインで出力することにしました。{:rn:}
ところが、その中間形式への変換が一苦労でした。現在、swfをaviに変換する方法はあまり多くありません。いくつかの方法を試した結果、Magic swf2avi というシェアウェアが一番きれいに変換できることが分かりました。他にもいくつかソフトはあるのですが、すべて、スプライトの再現性に問題がありました。スプライトというものはメインの画面とは独立した動きをするので、メインの画面がきれいにキャプチャできていてもスプライトはカクカクになってしまうのです。例えば、swfが30fps、変換ツールは1秒間に15フレームずつ変換できるとします。この場合、スプライトは2フレームに1つは欠落してしまいます。逆に、swfが15fpsで、変換能力が30fpsだと、同じフレームを二つずつ拾ってしまうわけです。困りました。{:rn:}
そこで上に書いたとおりMagic swf2aviの使用を検討しました。このソフトならば、スプライトまできちんと変換してくれます。レジストしないと勝手にURLを焼き込むという凶暴な仕様なのが玉に瑕ですが...orz{:rn:}
ただ、URL焼き込みは、すべてのシーンをY軸下方向に32ピクセルずらし(ニコニコ動画の標準解像度は512x384、従って、この方法だと中間ファイルの解像度は512x416になります)、この部分にURLを入れさせて、最終的にクロップすることで簡単に回避できます。可逆圧縮AVIならば、このような操作をしても画質に影響はありませんので。32ピクセルという数字には重要な意味があります。AVIファイルの縦の解像度は16の倍数でなければならないからです。例えば、もし、30ピクセルずらそうとすると、壊れたAVIが出来たりしてうまくいきません。{:rn:}
{:rn:}

{:rn:}
Magic swf2aviは、手軽な上に、ほぼ満足のいくAVIを作成出来るので一応おすすめなのですが、途中から、ロスレスのhuffyuvに対応しているにもかかわらず、出来上がりは若干ノイジーなことが気になり始めました。恐らく、ソフト内部のバーチャルマシーンでswfを再生し、1フレームごとにキャプチャしていく仕組みだと思うのですが、再生の段階で多少圧縮されているようです。このソフトにはswfの任意のフレームをbmpで保存する機能があるのですが、そのbmpからして既に圧縮ノイズが見られるので間違いないと思います。{:rn:}
{:rn:}
そこで、今回はMagic swf2aviの使用を取りやめ、すべてのフレームを愚直にスクリーンショットに撮り、それらをつなげてAVIにすることにしました。{:rn:}
まずは、ParaFla!のプロジェクトのプロパティで fps を 1 にします。{:rn:}
次に、プレビューウィンドウを表示し、一旦停止。{:rn:}
そして、再生しながら↓のようなスクリプトで毎秒スクリーンショットを撮ります。{:rn:}
{:rn:}
{:rn:}var numOfFrames = 3176;{:rn:}var milli = 1000;{:rn:}var d = new Date();{:rn:}var t = d.getTime();{:rn:}var start = Math.floor( t/milli );{:rn:}var count = 0;{:rn:}{:rn:}while( count < numOfFrames ){{:rn:}	d = new Date();{:rn:}	t = d.getTime();{:rn:}	if( Math.floor( t/milli ) - start == count ){{:rn:}		WshShell.SendKeys("{F2}");{:rn:}		count++;{:rn:}	}{:rn:}	WScript.Sleep("100");{:rn:}}

{:rn:}つくづくアホっぽいコードですが(^^; こんな力任せの方法でも、1フレームも落とさずにキャプチャできました。F2は今回使ったスクリーンショット用ユーティリティーで設定したホットキーです。ちなみに、アプリケーションにPrtScnキーを送っても何も起きません。ユーティリティーを使うか、自前でスクリーンショットを撮るプログラムを書く必要があります。{:rn:}
それから、上のように一秒間に何度もループして前回から一秒経ったかチェックしているのは無駄のように思われるかもしれませんが、そうではありません。確実に一秒に一回ずつキャプチャする必要があるからです。1000ミリ秒スリープして、キャプチャ、また1000ミリ秒スリープして……という方法では誤差が重畳してドロップフレームが出てしまいます。{:rn:}
{:rn:}

{:rn:}
上の方法は、なにしろ1fpsですから時間がかかります。が、品質においては、無圧縮でコマ落ちもないので最高です。キャプチャが終わると次はAVIへの変換です。VDMもAviutlも、連番bmpの最初の1枚を開くと、その後も全部読み込んでくれる機能があります。AVIを作らずいきなり最終形式にしても良いのですが、連番bmpには当然ながらフレームレートという概念が無く、今回最終形式へのエンコードに使うAviutlはフレームレートの設定にやや柔軟性を欠くので、まずはVDMで読み込んでフレームレートを設定し、fast recompress(recompressと言っても無圧縮)してAVIを作り、それをAviutlで読み込んで、最終的にx264でエンコードすることにしました。{:rn:}
{:rn:}
{:rn:}
{:rn:}
こちらのx264出力プラグイン(Aviutl用)を使えば、ニコ動用のプリセットがありますので、確実にニコ動に適合的な形式にすることができます。{:rn:}
{:rn:}
最後にmp4boxでMuxしてできあがり。一応書式。{:rn:}
{:rn:}
MP4Box.exe -add "元映像.mp4" -add "元音声.m4a" -new "保存先.mp4"

だいたい、以上のような感じで制作しました。モノは前回に引き続いて、友人が昔作った曲を初音ミクに歌わせたものです。近日中に公開されると思いますので、そのときはまたここでご紹介致します。
2009年5月5日追記:既に他の記事で紹介していますが、Parafla!を検索してこの記事にたどりつかれる方もいらっしゃるようなので、リンクしておきます【初音ミク】 はるかな未来 【オリジナル曲】です。よろしかったらご覧ください。


| ネット・PC | 19:38 | comments (3) | trackback (0) |
コメントをどうぞ
Paraflaから行き着いてここに来ました。スクリプトで1フレームずつショットを撮る方法、詳しく教えて頂けないでしょうか?スクリプトを実行する?とは具体的にどうすれば良いのでしょうか??
| 教えて欲しいです | 12/05/02 23:29 | Oi32hJrc |
上のソースコードをテキストファイルにコピーして、拡張子を .js 、例えば、screenshot.js などにして保存すると実行できますが、かなり泥臭い方法で、あまりお薦めできません。
すみません……。

デスクトップを動画として取り込むソフト、例えば CamStudio などを使うと良いと思います。

http://camstudio.org/
| Adrienne | 12/05/03 01:11 | ONaO7m2o |
ありがとうございます。一度ソフトを試してみたいと思います!!
| 教えて欲しいです | 12/05/03 18:39 | lF6ZoKhI |





この記事のトラックバックURL
http://adrienne.mints.ne.jp/diary/tb.php/20
トラックバック


  
CALENDAR
S M T W T F S
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30   
<<   11 - 2017   >>
Pixiv
ARCHIVES
COMMENTS
TRACBACK
LINKS