12萬行程式碼堆出來個「蔡徐坤」

量子位發表於2020-05-29
魚羊 白交 發自 凹非寺
量子位 報導 | 公眾號 QbitAI

有個程式猿,用12萬行程式碼堆出來個「蔡徐坤」,編譯還能通過?!

它是這樣的:

12萬行程式碼堆出來個「蔡徐坤」

不是簡單的灰度字元畫!也不是控制檯控制顏色!而是在唱、跳、rap的程式碼!

連肩帶,都是有靈魂的。

12萬行程式碼堆出來個「蔡徐坤」

這樣的作品,來自B站UP主NyeJu。他利用程式碼編輯器為不同關鍵詞顯示不同的顏色的原理,生成程式碼,然後滑動形成視訊。

這項技術的關鍵在於:

在正確的位置上放上符合規範的程式碼,顯示不同的顏色。

也就是說,整個操作純人工打造!

並且,這份程式碼是可以編譯通過的,0 error12萬行程式碼堆出來個「蔡徐坤」

12萬行程式碼堆出來個「蔡徐坤」

一經發出,網友紛紛表示:希望編譯器沒事。

12萬行程式碼堆出來個「蔡徐坤」

12萬行程式碼堆出來個「蔡徐坤」

12萬行程式碼堆出來個「蔡徐坤」

還有盆友說:希望肝沒事。

12萬行程式碼堆出來個「蔡徐坤」

12萬行程式碼你太美

當然也有盆友發出了這樣的驚歎:純手敲?!UP太強了!

12萬行程式碼堆出來個「蔡徐坤」

不過UP主雖是真·肝帝無疑,但還沒有魔鬼到這個地步。

12萬行程式碼堆出來個「蔡徐坤」

UP主也簡單介紹了一下自己的操作思路。

首先,選擇一個配色主題,比如UP主用的是Code Blue,並且需要獲取每一種關鍵詞的顏色。

12萬行程式碼堆出來個「蔡徐坤」

然後,把原視訊切分成一堆圖片,識別每張圖片的畫素,匹配到最相近的關鍵詞顏色上,記錄下(顏色,長度)。

根據(顏色,長度)生成對應的程式碼。這涉及到兩個步驟:

  • 定義一系列的pattern,比如「粉、紅、白」就是宣告,「灰、透明」就是註釋;

  • 用pattern去匹配(顏色,長度),匹配成功就進行轉換。

而UP主的這個視訊能做到如此流暢,是因為他為原視訊的每一幀都生成了程式碼。

12萬行程式碼堆出來個「蔡徐坤」

最後,讓這12萬行程式碼滑動起來,開頭那般的唱、跳、rap視訊就製作成功了。

即便如此,B站現場的小夥伴們還是嗅到了爆肝的氣息,比如評論區就有5級號提供了一個清新的思路:沒用專業團隊當素材,可能是因為UP肝了一整年。

12萬行程式碼堆出來個「蔡徐坤」

於是,量子位帶著小夥伴們的好奇採訪了一下UP主NyeJu本人。

NyeJu表示,整個專案的完成其實只用了大概一週多的時間,畢竟12萬行程式碼不是手敲,而是生成的。

另外,NyeJu也解釋說,沒有選擇現在更火的其他素材,是因為蔡徐坤的素材比較乾淨,顏色數量也比較適中。

其他的素材都不是很合適,比如像「黑人抬棺」顏色就有點多,「bad apple」的話又太少。(本人對蔡徐坤沒有任何惡意。)

評論區也有盆友補充解釋了一下其中的難點:可以編譯通過我驚了。

12萬行程式碼堆出來個「蔡徐坤」

對此,NyeJu說,其實專案一開始的底線就是能夠編譯通過,否則的話,VS Code的程式碼高亮會抽風。原理還是基於語法規則,比如conststatic可以無限疊加,識別符號和字串可以任意長,根據這些去構造想要的顏色的長度。

One More Thing

所以,為什麼會開這樣一個腦洞?

在採訪中,NyeJu也給出了答案:

是受「何同學」最新一個視訊——《我用一萬行備忘錄做了個動畫…》的啟發,想做一個更厲害一點的。

另外,雖然展示給大家的程式碼是C++,NyeJu本人其實在日常的coding中用Python多一點,這個專案的C++程式碼也是用Python生成的。

最後,奉上完整視訊~

作者系網易新聞·網易號“各有態度”簽約作者


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69971123/viewspace-2695042/,如需轉載,請註明出處,否則將追究法律責任。

相關文章