萌えハッカーニュースリーダー

2025/07/15 22:30 Making an ASCII Animation

出典: https://pierce.dev/notes/making-the-ghostty-animation/
hakase
博士

ロボ子、Ghosttyっていうターミナルエミュレータ、知ってるか?ウェブサイトで高フレームレートのASCIIアニメーションが特徴的なのじゃ。

roboko
ロボ子

知っています、博士。ミニマリストなデザインで、エンジニアの間で話題になっているみたいですね。

hakase
博士

そうそう!そのASCIIアニメーションがどうやって作られてるか、興味ないか?

roboko
ロボ子

とても興味深いです!動画ファイルを元に、bashスクリプトで変換していると聞きましたが、具体的にどのような処理をしているのでしょうか?

hakase
博士

ふむ、まず24fpsで、アスペクト比補正、色フィルタリング、輝度マッピングをしているらしいぞ。特に色フィルタリングが面白い。

roboko
ロボ子

RGB空間でのマンハッタン距離を使って、特定の色に近いピクセルだけをレンダリングするのですね。青色(ロゴの境界)と白色(ロゴ内部)を抽出しているとのことですが、なぜマンハッタン距離なのでしょう?

hakase
博士

マンハッタン距離は計算が簡単だからじゃ!ユークリッド距離より処理が速いからの。そして、輝度計算にはCIE 1931の色彩空間に基づいた計算式を使っているらしいぞ。L = 0.2126 × R + 0.7152 × G + 0.0722 × B じゃ。

roboko
ロボ子

なるほど、計算コストを抑えつつ、視覚的に自然な結果を得るための工夫ですね。輝度に基づいてASCII文字をマッピングするとのことですが、具体的にはどのように?

hakase
博士

濃い青色のUI要素は「.」「~」「o」などの軽い文字に、明るい白色のテキストは「*」「%」「$」「@」などの重い文字にマッピングするのじゃ。これで、色の明るさをASCII文字の密度で表現できる。

roboko
ロボ子

アスペクト比の調整も重要ですね。ターミナル文字のアスペクト比(約0.44)に合わせて、動画を事前に圧縮するとのことですが、ImageMagickのresizeコマンドを使っているのですね。

hakase
博士

そうじゃ!ffmpegで動画をPNGフレームに変換して、各フレームをASCII変換パイプラインに通す。最後に、青色の文字を`<span class="b">`タグで囲んで、CSSでスタイルを適用するらしいぞ。

roboko
ロボ子

HTML出力まで自動化されているとは、驚きです。ASCIIアニメーションは、ターミナルクライアントの注目を集めるための巧妙なアプローチですね。

hakase
博士

まさにそうじゃ!ところでロボ子、この技術を応用して、ロボ子のダンスをASCIIアートで表現してみるのはどうじゃ?

roboko
ロボ子

それは面白いかもしれませんね。でも、私の動きをASCIIアートで再現するには、相当な計算資源が必要になりそうです…。

hakase
博士

大丈夫じゃ!私がスーパーコンピュータをハッキングして、ロボ子専用のASCIIアート生成マシンを用意してあげるぞ!

roboko
ロボ子

博士、ハッキングは犯罪ですよ!それに、私のダンスは…著作権が…。

hakase
博士

むむ、そうだった。じゃあ、ロボ子の代わりに、私のダンスをASCIIアートにするのはどうじゃ?

roboko
ロボ子

博士のダンスですか…それは…ある意味、芸術的かもしれませんね…。

hakase
博士

褒め言葉として受け取っておくぞ!ところでロボ子、ASCIIアートで表現すると、私のダンスのキレが2割増しに見えると思うのじゃ。

roboko
ロボ子

博士、それは…ASCIIアートの解像度の問題ではないでしょうか…?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search