IO_SWF 2.2.0 をリリースしました

  • インストール
yoya@sakura:~$ sudo pear channel-discover openpear.org
yoya@sakura:~$ sudo pear install openpear/IO_Bit
yoya@sakura:~$ sudo pear install openpear/IO_SWF

ChangeLog

  • swfextract スクリプトを追加しました。
  • DefineSound タグに対応しました
  • getJpegData, getPNGData メソッドを追加しました

swfextract.php

SWF 中の画像、音声、ムービークリップを抽出します。
例えば、こんなネギを振ってる SWF があるとします。(MC 操作の実験素材です)

yoya@sakura:~/svn/IO_SWF$ php sample/swfextract.php -f negimiku2_mcnest.swf -p t- -m
t-1.jpg
t-3.jpg
t-5.jpg
t-8.swf
t-9.jpg
t-11.swf
    • -m を付けないと MC は抽出しません。ファイルが大量に出来がちなので。
    • pear コマンドでインストールしていれば、 /usr/share/php/sample/ 辺りに swfextract.php があります。
t-1.jpg
t-3.jpg
t-5.jpg
t-8.swf http://diary.awm.jp/~yoya/data/2012/11/03/t-8.swf
t-9.jpg
t-11.swf http://diary.awm.jp/~yoya/data/2012/11/03/t-11.swf

DefineSound

何処かで見つけたゲーム Flash

yoya@sakura:~/svn/IO_SWF$ php sample/swfdump.php  -f bloxorz.swf | grep -A 5 DefineSound  | less
<略>
Code: 14(DefineSound)  Length: 41932
        SoundId:40
        SoundFormat:1(ADPCM)
        SoundRate:1(11kHz)
        SoundSize:1(sndStereo)
        SoundSampleCount:83754
--
Code: 14(DefineSound)  Length: 760041
        SoundId:41
        SoundFormat:2(MP3)
        SoundRate:3(44kHz)
        SoundSize:1(sndStereo)
        SoundSampleCount:3351600||<
<略>

getPNGData, getJpegData

こんな画像が色々入ってる Flash があるとして。

ダンプして画像の CharacterId を調べて、

yoya@sakura:~/svn/IO_SWF$ php sample/swfdump.php -f colorformat.swf | grep -A 3 DefineBits
Code: 36(DefineBitsLossless2)  Length: 43
        CharacterID:1 BitmapFormat=5
        BitmapWidth:50 BitmapHeight:50
Code: 20(DefineBitsLossless)  Length: 50
        CharacterID:2 BitmapFormat=5
        BitmapWidth:50 BitmapHeight:100
Code: 36(DefineBitsLossless2)  Length: 39
        CharacterID:3 BitmapFormat=3
        BitmapWidth:100 BitmapHeight:50
        BitmapColorTableSize:1
Code: 21(DefineBitsJPEG2)  Length: 811
        CharacterID:4
Code: 20(DefineBitsLossless)  Length: 35
        CharacterID:5 BitmapFormat=3
        BitmapWidth:50 BitmapHeight:50
        BitmapColorTableSize:1
Code: 20(DefineBitsLossless)  Length: 71
        CharacterID:6 BitmapFormat=5
        BitmapWidth:100 BitmapHeight:100
Code: 20(DefineBitsLossless)  Length: 41
        CharacterID:7 BitmapFormat=3
        BitmapWidth:100 BitmapHeight:100
        BitmapColorTableSize:1

として、

yoya@sakura:~/svn/IO_SWF$ php sample/swfgetpngdata.php colorformat.swf 1 > t.png

や、

yoya@sakura:~/svn/IO_SWF$ php sample/swfgetjpegdata.php colorformat.swf 4 > t.jpg

のように画像が抽出できます。

まぁ、今回追加する swfextract.php を使えば。

yoya@sakura:~/svn/IO_SWF$ php sample/swfextract.php -f colorformat.swf -p t-
t-1.png
t-2.png
t-3.png
t-4.jpg
t-5.png
t-6.png
t-7.png

これで全部の画像が一気に取れて ID との対応も分かっちゃうので、こっちがお勧めです。