有點厲害!用12萬行程式碼堆出來個"蔡徐坤",編譯還能透過!

程式設計師的成長之路發表於2020-07-17

有點厲害!用12萬行程式碼堆出來個"蔡徐坤",編譯還能透過!
程式設計師的成長之路
網際網路/程式設計師/技術/資料共享 


閱讀本文大概需要 2.8 分鐘。

作者:魚羊 白交
來自:量子位(ID:QbitAI)
有個程式猿,用12萬行程式碼堆出來個「蔡徐坤」,編譯還能透過?!
它是這樣的:
有點厲害!用12萬行程式碼堆出來個"蔡徐坤",編譯還能透過!
不是簡單的灰度字元畫!也不是控制檯控制顏色!而是在唱、跳、rap的程式碼!
連肩帶,都是有靈魂的。
有點厲害!用12萬行程式碼堆出來個"蔡徐坤",編譯還能透過!
這樣的作品,來自B站UP主NyeJu。他利用程式碼編輯器為不同關鍵詞顯示不同的顏色的原理,生成程式碼,然後滑動形成影片。
這項技術的關鍵在於:
在正確的位置上放上符合規範的程式碼,顯示不同的顏色。
也就是說,整個操作純人工打造!
並且,這份程式碼是可以編譯透過的,0 error:
有點厲害!用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萬行程式碼不是手敲,而是生成的。
為蔡徐坤的素材比較乾淨,顏色數量也比較適中。

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

評論區也有盆友補充解釋了一下其中的難點:可以編譯透過我驚了。
評論區也有盆友補充解釋了一下其中的難點:可以編譯透過我驚了。
有點厲害!用12萬行程式碼堆出來個"蔡徐坤",編譯還能透過!
對此,NyeJu說,其實專案一開始的底線就是能夠編譯透過,否則的話,VS Code的程式碼高亮會抽風。原理還是基於語法規則,比如conststatic可以無限疊加,識別符號和字串可以任意長,根據這些去構造想要的顏色的長度。

One More Thing

所以,為什麼會開這樣一個腦洞?
在採訪中,NyeJu也給出了答案:

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

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




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

相關文章