FlashからPNGシーケンス書きだすASを書きました 〜もうMCも怖くない〜 hushexport.PNGSequence
Flash, Programming ·ご無沙汰でした。hushです。
今回はFlashからPNGシーケンス書きだすASを書いたので公開します。
適当に名前をつけておきます→「hushexport.PNGSequence」
Sparkとか投稿する勇気がないのでブログでこっそり。
※こちらはflaファイル→PNGシーケンスの書き出しです。swf→PNGシーケンスはできません。
2012/2/24 追記: AIRアプリ化しました。詳しくはこちらから SWFからPNGシーケンスを作成するAIRアプリ「SWF2PNGSequence」を作りました! | FLATV
2012/4/7 追記: ライセンス表記を追加しました。
まえがき
なんでこんなものを書いたかというと、
Flashからきれいな動画を書き出したかったからです。
swf→mp4などの変換(エンコード)方法がありますが、なかなかうまくいきません。
前からFlashからの動画書き出しに不満だったのですが、AS書いたらあっさりとできました。
こちらがhushexport.PNGSequenceを使って書きだした動画です。
720pで60fpsなので、普通にswf再生するとカクカクして処理落ちしてしまうのですが、
動画形式にするとぬるぬる動いて気持ちいいですね。
他の手法との比較
-
Flash メニュー [ファイル]→[書き出し]→[ムービーの書き出し]
- フォーマット [aviとかQuickTime]
- ASやMCが反映されない。しかもマシンパワーに依存するので処理落ちする。
- フォーマット [PNGシーケンス]
- ASやMCが反映されない。 処理落ちはしない。メインタイムラインをすべて書き出し。
- フォーマット [aviとかQuickTime]
-
hushexport.PNGSequence
- ASやMCが反映される。 処理落ちはしない。 書き出すフレームの頭と最後を指定可能。
使い方は続きを読むから↓
使い方
ろくに検証していないので、不具合が出ても責任は取れませんごめんなさい・・・。
ライセンス
MIT License です。(日本語訳)
ダウンロード・環境設定
PNGEncoderというライブラリを使っているので、こちらからActionScript 3 corelibの最新版をダウンロードして解凍します。
hushexport.PNGSequence をダウンロードして解凍してください。 (2011/6/12 更新)
解凍してできたフォルダを適当な場所に置いたら、Flashからパスを通します。
Flash メニュー[環境設定] → [Actionscript] → [Actionscript3の詳細設定]でソースパスを追加します。解凍してできたフォルダの中にあるsrcを追加します(corelibとhushexport.PNGSequenceの2つ)。
パブリッシュ設定
Flashのパブリッシュ設定で、PlayerをAdobe AIR2にします。
AS追加
1フレーム目のフレームアクションに以下のコードを追加します。
import com.fdempa.ngtv.hushexport.PNGSequence;
var pngs:PNGSequence;
pngs = new PNGSequence(this,"foldername");
PNGSequence
の説明をしますと、
第二引数がフォルダ名、第三引数が開始フレーム、第四引数が終了フレームとなります。
- 例:
PNGSequence(this,"foldername",500)
500フレームから書き出し。 - 例:
PNGSequence(this,"foldername",500,1000)
500フレームから1000フレームまで書き出し。
PNGシーケンス書き出し
あとはムービープレビュー(swf書き出し)すると、
デスクトップにフォルダ("foldername"で指定した名前で)が作成され、
その中にPNGファイルが書き出されます。
動画変換
PNGシーケンス→動画への変換は、AviUtlなりPremiereなりAfterEffectsを使えばできるはずです。
お疲れさまでした!
改善点・コメントなどがありましたらTwitter @hush_inまでオナシャス!