2008年7月24日木曜日

(Code: sh) seq-text

#!/bin/sh

FILE=src/text.txt
if [ ! -f $FILE ] ;then
echo "Error: file \"$FILE\" not exist" >&2
exit 1
fi

LISTS=`cat $FILE |tr '\n' ' '`
cat script/seq-text.scm \
|sed -e 's/;.*//g' -e 's/<lists>/'"$LISTS"'/' \
|gimp -i -b -

2008年7月22日火曜日

GIMP script-fu 弄り

GIMPのscript-fuの練習です。「警告」テキストをモチーフにバリエーションつくってみました。

紅白サイクル


紅白点滅 ※再生危険※ 光過敏性発作を誘発する危険性有


スクロールループ



Scheme弄りに徐々になれてきた!

(アニメ) ひだまりスケッチのMAD

レベル高すぎて感動した。



※著作権法的にどうななよ?的な話はゴメンなさい

GIMPをscript-fuで自動化

GIMPの動作中の画像です。




Schemeというプログラム言語"LISP"の一種があるんですが、
GIMPではこれで自動化スクリプトをコーディングします。
GIMP内では"script-fu"と呼ばれてます。スクリプト・フー。
以下はその例です。

(
(define (my-test-seq-filename-jpg i N)
(let*
(
(str_i (number->string i))
(LEN_i (string-length str_i))
(LEN_N (string-length (number->string N)))
(N_zero (- LEN_N LEN_i))
(Zeros)
(i)
)

(set! Zeros "")
(set! i 0)
(while (< i N_zero)
(set! Zeros (string-append Zeros "0"))
(set! i (+ i 1))
)
(string-append "src/" Zeros str_i ".jpg")
))

(define (my-test-func theLayer i TIME_CYCLE FPS)
(let* (
(Color)
(color)
(PI (acos -1))
)

(set! color
(* 255
(/ (+ (cos (+ PI (/ (* 2 (* PI i)) (* TIME_CYCLE FPS)))) 1) 2)))
(set! Color (list 255 color color))
(gimp-context-set-background Color)
(gimp-drawable-fill theLayer BACKGROUND-FILL)
theLayer
))

(define (my-test)
(let*
(
(W 704)
(H 396)
(TIME 20)
(TIME_CYCLE 2)
(FPS 25)
(N (* TIME FPS))

(theImage
(car
(gimp-image-new W H RGB)
))
(theLayer
(car
(gimp-layer-new
theImage
W
H
RGB-IMAGE
"layer 1"
100
NORMAL
)))

(i)
(filename)
)

(gimp-image-add-layer theImage theLayer 0)

(set! i 0)
(while (< i N)
(set! theLayer (my-test-func theLayer i TIME_CYCLE FPS))

(set! filename (my-test-seq-filename-jpg i N))
(file-jpeg-save
1 theImage theLayer filename filename 1 0 0 0 "" 0 0 0 0
)

(set! i (+ i 1))
)
))

(my-test)
(gimp-quit 0)
)


このようなスクリプト(script.scm)を用意して

$ cat script.scm | gimp -i -b -


とgimpに渡してやると、連番画像ファイルが作成されます。上の例では500枚。
この連番画像ファイルをFFmpegで動画化できます。


GIMP+FFmepgで製作した動画


紅白サイクル


紅白点滅 ※危険※ 光過敏性発作の危険がありますので再生には注意ください



他の動画作成ソフトを使えばall-in-oneですべて済みそうなものですが、
原理的に1frameづつGIMPで可能なあらゆる処理を適用できる点、楽しい動画作成方法です。
コマンドベースですのでシェルスクリプトで連番画像作成や動画化をバッチ処理できます。
ガツガツ製作できそうです。

2008年7月21日月曜日

ソフトキャプチャとffmpegでエンコ

キャプ板を使わずに動画をつくりたいな、と前から考えていたんですが
スクリーンショットを連続取得(ソフトキャプチャ)→ffmpegで動画化(エンコ)、の手順で製作できた!
というレビューです。

ためしに、うちで動いてるスクリーンセーバーを動画化してみました。こんな感じ。




おおまかな製作手順は以下の3ステップです。

25fpsで20秒間(画像500枚分)の動画を製作するとします。
スクリーンショットのダンプファイルはディレクトリ"src"以下に保存します。
スクリーンショットの画像ファイルはディレクトリ"seq"以下に保存します。
(あらかじめsrc、seqをmkdirしておきます。
それぞれ大量のファイル(500枚)が生成されるので別ディレクトリにしてます。)


(1) コマンド"xwd"を使って特定のウインドのスクリーンショットをダンプ
$ for ((i=0;i<250;i++)) ; do xwd -silent -id 0x2200042 -out src/`printf '%03d' $i`.wd ; sleep 0.040 ; done

※ 25fps = スクリーンショットの取得間隔 40ミリ秒 (sleep 0.040)
※ 特定のウインドを示す"-id"の引数"0x220042"はコマンド"xwininfo"で調べる



(2) コマンド"convert"を使ってxwdのダンプファイル(*.wd)をJPEGファイルに変換
$ for i in `ls src` ; do convert src/$i seq/`echo $i | sed 's/wd/jpg/'` ; done


(3) コマンド"ffmpeg"で連番JPEGファイルを動画に変換
$ ffmpeg -i seq/%03d.jpg -vcodec mjpeg -sameq out.avi


キャプ板といった特別なハードは必要なく、適当な速さ(上記例では40ミリ秒)で
スクリーンショットを連続取得さへできれば動画を製作できるのでお手軽でした。


環境

OS: Linux
debian-etch (i386)
linux-2.6.18
Xorg-7.1.1
xscreensaver-5.04
ffmpeg-SVN-r13618

※ xwdはパッケージ"xbase-clients"に含まれる
※ convertはパッケージ"imagemagick"に含まれる

2008年7月20日日曜日

(週刊漫画) PSYREN─サイレン─ 第31話 -- 合宿

ジャンプで一番先に読みます。
好きだ岩代先生の漫画!

激しい幼女フレデリカ、優しい幼女マリー
他、カイル、シャオ、ヴァンの天樹院チルドレン編面白かった。
未来で絡んできたら最高なのになあ…
成長したマリーとかマリーとかマリーとか…
「マリーの瞬きが どんどん増していく…」
もうずっとマリーのターン!
雨宮?センセ??今どきヤンデレとかないよね〜???
だけど僕には御褒美です。もっとだ!もっと岩代ヒロイン分を俺によこすんだ!!

ぜひアニメ化までつっぱしって欲しいです。

来週は未来でドリフト編。
ドリフトで何だけど未来編で乗物でてこないのかなあ…(意味ちゃうけど)

2008年7月18日金曜日

(アニメ) ひだまりスケッチ×365 第03話 -- 狛モンスター

1期みてなかったけど1-2話見てはまったよ!
むろん今日までに1期+特別編も完走しました。

鯛!
ゆのっちと宮ちゃんデート!
ちっちゃい子になつかれるちっちゃいゆのっち!
ヒロさん過カロリー!
沙英さん、っつかー夏目レギュラー化?!
OP早く発売してくれええ!!
EDもしてくれえええ!!!
吉野屋先生の半泣き顔でなぜかエイリアン9思い出した。

来週は04話「まろやかツナ風味」。
宮ちゃんが猫拾うけどひだまり荘で飼えないよ的な話みたい。

以下ネタバレサイト
http://anime.webnt.jp/program/index.php?pg_page=tv_detail&detail=633