12萬行代碼堆出來個「蔡徐坤」
本文經(jīng)AI新媒體量子位(公眾號ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。
有個程序猿,用12萬行代碼堆出來個「蔡徐坤」,編譯還能通過?!
它是這樣的:

不是簡單的灰度字符畫!也不是控制臺控制顏色!而是在唱、跳、rap的代碼!
連肩帶,都是有靈魂的。

這樣的作品,來自B站UP主NyeJu。他利用代碼編輯器為不同關(guān)鍵詞顯示不同的顏色的原理,生成代碼,然后滑動形成視頻。
這項技術(shù)的關(guān)鍵在于:
在正確的位置上放上符合規(guī)范的代碼,顯示不同的顏色。
也就是說,整個操作純?nèi)斯?/strong>打造!
并且,這份代碼是可以編譯通過的,0 error(手動狗頭):

一經(jīng)發(fā)出,網(wǎng)友紛紛表示:希望編譯器沒事。



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

12萬行代碼你太美
當(dāng)然也有盆友發(fā)出了這樣的驚嘆:純手敲?!UP太強了!

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

UP主也簡單介紹了一下自己的操作思路。
首先,選擇一個配色主題,比如UP主用的是Code Blue,并且需要獲取每一種關(guān)鍵詞的顏色。

然后,把原視頻切分成一堆圖片,識別每張圖片的像素,匹配到最相近的關(guān)鍵詞顏色上,記錄下(顏色,長度)。
根據(jù)(顏色,長度)生成對應(yīng)的代碼。這涉及到兩個步驟:
- 定義一系列的pattern,比如「粉、紅、白」就是聲明,「灰、透明」就是注釋;
- 用pattern去匹配(顏色,長度),匹配成功就進行轉(zhuǎn)換。
而UP主的這個視頻能做到如此流暢,是因為他為原視頻的每一幀都生成了代碼。
最后,讓這12萬行代碼滑動起來,開頭那般的唱、跳、rap視頻就制作成功了。
即便如此,B站現(xiàn)場的小伙伴們還是嗅到了爆肝的氣息,比如評論區(qū)就有5級號提供了一個清新的思路:沒用專業(yè)團隊當(dāng)素材,可能是因為UP肝了一整年。

于是,量子位帶著小伙伴們的好奇采訪了一下UP主NyeJu本人。
NyeJu表示,整個項目的完成其實只用了大概一周多的時間,畢竟12萬行代碼不是手敲,而是生成的。
另外,NyeJu也解釋說,沒有選擇現(xiàn)在更火的其他素材,是因為蔡徐坤的素材比較干凈,顏色數(shù)量也比較適中。
其他的素材都不是很合適,比如像「黑人抬棺」顏色就有點多,「bad apple」的話又太少。(本人對蔡徐坤沒有任何惡意。)
評論區(qū)也有盆友補充解釋了一下其中的難點:可以編譯通過我驚了。

對此,NyeJu說,其實項目一開始的底線就是能夠編譯通過,否則的話,VS Code的代碼高亮?xí)轱L(fēng)。原理還是基于語法規(guī)則,比如const和static可以無限疊加,標(biāo)識符和字符串可以任意長,根據(jù)這些去構(gòu)造想要的顏色的長度。
One More Thing
所以,為什么會開這樣一個腦洞?
在采訪中,NyeJu也給出了答案:
是受「何同學(xué)」最新一個視頻——《我用一萬行備忘錄做了個動畫…》的啟發(fā),想做一個更厲害一點的。
另外,雖然展示給大家的代碼是C++,NyeJu本人其實在日常的coding中用Python多一點,這個項目的C++代碼也是用Python生成的。