ボディビルダーが泳ぐシェル芸


ボディビルダーが泳ぐシェル芸とは?


こういうアニメーションを作るシェル芸です。
ボディビルダーがなんか叫んでますね。ちょっとゆっくりにしてみましょう。

正弦波泳法という泳ぎ方のようです。
作っていきましょう。
前提条件は、textimgmuscularがインストールされていることです。

コマンドができるまで

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

出力アニメ

完成です。

まとめ

musculartextimgを使って、正弦波泳法で泳ぐボディビルダーのアニメを作ることができました。
いや正弦波泳法って何…?こわ…