swf動画変換その1: コマ落ちとの戦い
2007.10.17 02:30
「動画ファイルがパラパラマンガなら、swfは影絵みたいなもの」とよく私は説明してるのですが、swfアニメーションを動画に変換するのは一筋縄ではいきません。Adobe Flash CS3新機能の高度mov書き出しですらコマ落ちするのには絶望すら覚えます。100%の精度を出そうとすると苦労するものです。
しかしYouTubeやニコニコが流行ったおかげで、ロード時間が待てない人がいるんです。もう映像の下にシークバーがないと落ち着かない人もいるんです。そう思ってMattari Factoryも全作品flv化に踏み切りました。(もともとswfの処理重すぎたし。)swfを動画変換するのはどうも理不尽な気もしますが、必ず需要はあると思います。
では前置きが長くなりましたが、Mattari Factoryで展示している作品の変換方法を紹介したいと思います。今回はflvやmovに書き出すまで。なお、あくまでも一例であって、ベストな方法ではないと思います。指摘お待ちしてます。
- 用意するもの
- 使用楽曲ファイル、もしくはHugFlash(フリーソフト)
- ベースとなるswfファイル(ASなど制約あり/flaファイルもあると便利)
- swf>>avi converter(フリーソフト)
- Adobe AfterEffects CS3 (他の動画エンコードソフトで代用可)
大まかな流れは、音声を単一ファイル化+swfを無圧縮avi化→合成エンコードという流れです。
- 1: 音声を単一ファイル化する
これは使用もとのmp3かなんかがあればそれをそのまま使いましょう。ただしロゴやオープニングなどで開始タイミングがずれている場合は、その時間を記録しておくこと。記憶に頼ると後で再エンコするときに泣きを見ます。flaファイルがあると確認しやすいですが、なくても感覚やトライアンドエラーでどうにかなります。
曲がない、複数の音声ファイルを使用している、フェードアウトがかかっているとかの場合、一度swfにしてからHugFlashで抽出すると一つのファイルとして保存出来ます。
- 2: swfを無圧縮aviに変換する
さて、メインです。 まずswf>>aviの動作には.NET framework 1.1が必須なので、インストールで手間取る人はないひとは.NET DLページの「NET Framework Version 1.1 再頒布可能パッケージ」をインストールしましょう。2.0が入っててもダメっぽいです。ちなみにwinXPとwinVistaで動作確認できてます。
無事インストールができたらいよいよavi変換です。swf変換ソフトはswfを再生キャプチャーする類のものではなく、コマ送りで1コマずつキャプチャーするソフトです。 おそらく「_root.stop();」→「『スクリーンショットを撮る→_root.nextFrame();』の繰り返し」を行っているソフトなのでコマ落ちは防げますが、音声は無視されます。また、その性質から変換もとswfに以下のような制約があります。
- 動く(=2フレーム以上のフレームがある)ムービークリップがステージにない
- 動くASがステージにない
- _root(「シーン1」)直下にメインのアニメーションがある
- _rootにgotoAndPlay();とかがない。(stop();は大丈夫)
要はコマ送り中に動くものがなければ大丈夫です。ASもコマ送りの邪魔にならなければいいので、_visible=falseとかは適用されます。無論Mattari Factoryの作品は全てこの条件を満たしています。1番目の制限さえなければマスクアニメにフィルタかけたり出来るのになぁ。
ソフトの操作は、起動→窓にswfをドロップ→Batch Convertクリックだけなのですが、設定(Manage Profile)についてちょっと触れときます。なかなか優れものなのです。
まず一つ目の値は「swfをいくつのサイズに広げてキャプチャするか」です。通常ならばswfのサイズに合わせます。しかし「広げる」というのはFlashPlayer上での話です。よってswfが全部ベクターならば高解像度版とかも作れるし、アスペクト比が違っても長辺に合わせられ、ステージの外が見えるだけです。swfに「目隠しレイヤー」が作ってあればこれを逆に利用して、上下に黒い帯をいれたりできます。てかやってます私は。
二つ目の値は「aviをいくつのサイズにリサイズするか」です。しかしこれはswfでやった方が劣化しないので、アスペクト比を変える目的でもなければ一つ目のサイズに合わせましょう。
fpsはswfにあわせましょう。三択はnone、チェックはなんもいりません。いざBatchConvert!一コマずつ記録されていく感じが面白いですよ。但しほんとにスクリーンショットをとっているようなので、他のものが表示されるとそれをとりこんでしまいますw あらかじめスクリーンセーバー等を全て無効にし、処理中はそっとしておきましょう。
ちなみに無圧縮aviはハンパ無く重いです。1ファイルで数ギガ単位です。
- 3: 合成エンコード
さて、1と2で作ったファイルを合成&圧縮します。ここまできてしまえばswfの問題ではないので色んな方法があると思います。私はAEを使ってますがAEの利点は
- 音のタイミングがフレーム単位で調整出来る
- 映像も同じく。ロード画面もaviにしてから切ることで、flaを弄らなくて済む
- そしてそれらのタイミング関係をプロジェクトファイルとして保存出来る
- 色んな形式で書き出せる(flvはCS3かららしい)
というAEにあるまじき使い方をしています。
試してないので詳しくは書けませんが、フリーソフトでもAviUtlを筆頭に数々の動画加工ソフトがあるので音声合成はできます。flv化もFlash Media EncoderがAdobeによって無償提供されてますし、より高画質をめざすならちょうどみんながこぞって高画質エンコードを研究しているニコニコ動画まとめwiki - エンコード設定を調べると大夫勉強出来ます。
以上です。何かお気づきの方は是非是非御指摘下さい。また「音ズレ」徹底研究やコーデック、flvをwebに表示する方法とかは別途紹介していくつもりです。
//どなたか「動くMC」を100%の精度で動画化する方法知りません?
//それができるとかなり表現の幅が広がるのですが…。
この前の記事内容のリスト順に書くつもりでしょうか。
別にリスト通りにしようって気はないですよ。
あれは「そのうち書こうメモ」って感じです。関係ない記事も書くと思います。
自分はイメージシーケンス(PNG)書き出ししたものをAEに持って行って、音を合わせます。
非圧縮aviは重いので…(>_
PNGシーケンスですか、なるほどなるほど。扱いづらそうで敬遠してたのですが、AEで読めるんですね。情報ありがとうございます。今度試してみようかな。
4Videosoft 動画変換 で変換するのは便利だと思います。
速いです。
[…] Flashオーサリングに制約があります。asで生成したシンボルやモーションは正常に書き出してくれなかったので、私は、yama_koさんのswf動画変換に関するエントリー「swf動画変換その1: コマ落ちとの戦い」のswfの条件の項に則って、制作しています。 […]
swivelにてtaktを4K60fpsでレンダリングしています。
https://www.dropbox.com/s/t24xu71ku4ew2tf/takt_v1_LossLess_4K60fps.rar?dl=0
※スクリーンを録画する方式で変換するエンコード方式ではなく、Adobe AIRと Adobe Flash Playerを利用してレンダリングしています。
swivel
http://www.newgrounds.com/wiki/creator-resources/flash-resources/swivel