10

12万行代码堆出来个「蔡徐坤」

 4 years ago
source link: https://www.qbitai.com/2020/05/14841.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

还能编译通过?!

鱼羊 白交 发自 凹非寺

量子位 报道 | 公众号 QbitAI

有个程序猿,用 12万行 代码堆出来个「蔡徐坤」,编译还能通过?!

它是这样的:

YZFRjuv.gif

不是简单的灰度字符画!也不是控制台控制颜色!而是在唱、跳、rap的代码!

连肩带,都是有灵魂的。

YJRZNzE.gif

这样的作品,来自B站UP主 NyeJu 。他利用代码编辑器为不同关键词显示不同的颜色的原理,生成代码,然后滑动形成视频。

这项技术的关键在于:

在正确的位置上放上符合规范的代码,显示不同的颜色。

也就是说,整个操作 纯人工 打造!

并且,这份代码是可以编译通过的,0 error(手动狗头):

2Q3iUvR.gif

一经发出,网友纷纷表示:希望编译器没事。

bqIzIbI.jpg!web

vUBj2ee.jpg!web

EFzeAfB.jpg!web

还有盆友说:希望肝没事。

YbQnU3Y.jpg!web

12万行代码你太美

当然也有盆友发出了这样的惊叹:纯手敲?!UP太强了!

B3aUnyI.jpg!web

不过UP主虽是真·肝帝无疑,但还没有魔鬼到这个地步。

qMBFryI.jpg!web

UP主也简单介绍了一下自己的操作思路。

首先,选择一个 配色主题 ,比如UP主用的是Code Blue,并且需要获取每一种关键词的颜色。

AVBjemV.jpg!web

然后,把原视频切分成一堆图片,识别每张图片的像素,匹配到最相近的关键词颜色上,记录下(颜色,长度)。

根据(颜色,长度)生成对应的代码。这涉及到两个步骤:

  • 定义一系列的pattern,比如「粉、红、白」就是声明,「灰、透明」就是注释;
  • 用pattern去匹配(颜色,长度),匹配成功就进行转换。

而UP主的这个视频能做到如此流畅,是因为他为原视频的每一帧都生成了代码。

3mMR7jr.jpg!web

最后,让这12万行代码滑动起来,开头那般的唱、跳、rap视频就制作成功了。

即便如此,B站现场的小伙伴们还是嗅到了爆肝的气息,比如评论区就有5级号提供了一个清新的思路:没用专业团队当素材,可能是因为UP肝了一整年。

nyYFbqA.jpg!web

于是,量子位带着小伙伴们的好奇采访了一下UP主NyeJu本人。

NyeJu表示,整个项目的完成其实只用了大概一周多的时间,毕竟12万行代码不是 手敲 ,而是 生成 的。

另外,NyeJu也解释说,没有选择现在更火的其他素材,是因为蔡徐坤的素材比较干净,颜色数量也比较适中。

其他的素材都不是很合适,比如像「黑人抬棺」颜色就有点多,「bad apple」的话又太少。(本人对蔡徐坤没有任何恶意。)

评论区也有盆友补充解释了一下其中的难点:可以编译通过我惊了。

BjuaMnM.jpg!web

对此,NyeJu说,其实项目一开始的底线就是能够编译通过,否则的话,VS Code的代码高亮会抽风。原理还是基于 语法规则 ,比如 conststatic 可以无限叠加,标识符和字符串可以任意长,根据这些去构造想要的颜色的长度。

One More Thing

所以,为什么会开这样一个脑洞?

在采访中,NyeJu也给出了答案:

是受「何同学」最新一个视频——《我用一万行备忘录做了个动画…》的启发,想做一个更厉害一点的。

另外,虽然展示给大家的代码是C++,NyeJu本人其实在日常的coding中用Python多一点,这个项目的C++代码也是用Python生成的。

— 完 —

版权所有,未经授权不得以任何形式转载及使用,违者必究。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK