ボディビルダーが泳ぐシェル芸とは?
こういうアニメーションを作るシェル芸です。
ボディビルダーがなんか叫んでますね。ちょっとゆっくりにしてみましょう。
正弦波泳法という泳ぎ方のようです。
作っていきましょう。
前提条件は、textimg
、muscular
がインストールされていることです。
コマンドができるまで
STEP1. ボディビルダーを出す
ボディビルダーを出します。
コマンドと実行結果
$ muscular shout フロントリラックス -p front-relax
.-~-.
/ \
| /
,_-/ ,.*`--.,
.r ; `` \
.`,` ,: ,.`A`,\
/,`/\`'' '' ? \` \ _人人_
/ / \ ; , ; / ) } > フ <
| / \:':': | | 7 > ロ <
| | ) ':' | ,` / > ン <
( \ `-,_,-~} | l > ト <
`~ / `, /' \ '"' > リ <
,7 \/ |. > ラ <
{ ; |, , ) > ッ <
|,`: |`,`: | > ク <
\` , /\`.; / > ス <
|`;/ \ , |  ̄Y^Y^ ̄
\``\ |` (
\ . ) { /
\ `/ ( }
\ | | /
) \ | |
c~^_~d V _`,
qiitaのシンタクスハイライトでちょっとカラフルになっちゃってますが、
muscular shout
の-p
オプションでポーズを指定しています。
STEP2. スクロールしてアニメートする
1行ずつスクロールしてアニメーションにしましょう。
コマンド
$ muscular shout 上がれ! -p front-relax|tee >(cat) >(cat) >(cat) >(cat)|tee >(cat) >(cat) >(cat) >(cat)|textimg -asl25
出力アニメ
前ステップで出したボディビルダーは身長が24行あるので、
25人に分裂させて、25行ごとに区切ってやると
25行24フレームの、1行ずつずれたボディビルダーが得られます。
25人に分裂させるために、前ステップのコマンドのうしろに
|tee >(cat) >(cat) >(cat) >(cat)|tee >(cat) >(cat) >(cat) >(cat)
としていますね。ここが今回ちょっと苦しいところなんですけど、
5回リピートを2回かけて25回リピートしています。
続けてtextimg -asl25
とすることで、25行ごとに区切ってアニメートしています。
STEP3. 正弦波のスペースを入れる
ボディビルダーの左側に正弦波のスペースを入れてやると、
正弦波泳法になります。
コマンド
$ muscular shout 正弦波泳法 -p front-relax|tee >(cat) >(cat) >(cat) >(cat)|tee >(cat) >(cat) >(cat) >(cat)|awk '{PI=4*atan2(1,1);for(i=0;i<(sin(NR/25*PI*2)+1)*5;i++){printf " "}{print $0}}'|textimg -asl25
出力アニメ
前ステップのあと、awk
のfor文で繰り返しスペースを入れています。
繰り返し回数を決めている部分は(sin(NR/25*PI*2)+1)*5
となっています。
25行ごとに位相が2πだけ進んで正弦波が一周します。
円周率PIはatan
で得ています。
1を加えて5をかけることで、0から10までの幅の正弦波になります。
スピードアップしましょう。
コマンド
$ muscular shout 正弦波泳法 -p front-relax|tee >(cat) >(cat) >(cat) >(cat)|tee >(cat) >(cat) >(cat) >(cat)|awk '{PI=4*atan2(1,1);for(i=0;i<(sin(NR/25*PI*2)+1)*5;i++){printf " "}{print $0}}'|textimg -asl25 -d5
まとめ
muscular
とtextimg
を使って、正弦波泳法で泳ぐボディビルダーのアニメを作ることができました。
いや正弦波泳法って何…?こわ…