网易首页 > 网易号 > 正文 申请入驻

仅用8小时,用Vim编辑器手搓BadApple火了!

0
分享至

奇月 发自 凹非寺量子位 | 公众号 QbitAI

老二次元/科技宅倒背如流的Bad Apple动画,网友Nolen Royalty用Vim文本编辑器复现出来了!

而且仅耗时8小时、用了6500个正则表达式!

先来一起瞅瞅效果:

https://mp.weixin.qq.com/s/UaCpTGN6YAiIclorF4QhlA

可以看到,动画基本还原了人物的所有动作,整体视频也很流畅,画风很有经典像素风游戏的味道。

继终端、游戏引擎、ASCII码各种 Bad Apple 整活之后,Vim 编辑器也出息了一回!

难怪有网友说,这就是我们喜欢 Bad Apple 的原因,它总是能带给我们更多惊喜。

PS:如果你还不知道Bad Apple,它是来自《东方Project》中的一个音乐MV,已经成为动画界和科技界的一个梗。不仅有各种二创视频,大家还会在各种硬件和软件上复现它,可以说“有屏幕的地方就有Bad Apple”。

怎么做到的

网友 Nolen Royalty 还热心分享了用 Vim 制作Bad Apple的过程,主要分为以下4步:

1.提取画面帧转换成数组

第一步非常简单,使用 GitHub 用户 Felixoofed 的库就可以获取 Bad Apple 每一帧的数据。

这个仓库里面包含了原始的视频以及一个 ffmpeg 命令,可以将视频转换为约 6500 张 PNG 图片,每张代表一帧。

然后 Nolen 编写了一小段 Python 代码,将每个 PNG 文件转换为 0 和 1 的二维数组(其中 1 代表黑色像素)。

视频最初是 480x360 分辨率,在测量了终端后 Nolen 将其缩小到 120x90。

from PIL import Image

import numpy as np

def process_image(path, target_width=120, target_height=90):

img = Image.open(path)

img = img.resize((target_width, target_height), Image.Resampling.LANCZOS)

if img.mode != "L":

img = img.convert("L")

pixels = np.array(img)

binary_pixels = (pixels < 10).astype(int) # 1 for dark, 0 for light return binary_pixels

def text_preview(binary_pixels):

chars = {0: ".", 1: "#"}

return "\n".join("".join(chars[px] for px in row) for row in binary_pixels)

2.用Vim的高亮匹配功能绘制任意矩形

那么如何在 Vim 中绘制图形呢?

假设你在文本中创建了一个主要由 A 组成的网格,并在其中嵌入一个由 B 组成的绘图,这样如果你搜索 B,就会看到一个小的棍状人物图形:

使用这个方法就可以画图了,但是还存在2个问题:

a.蓝色高亮(Vim 默认)看起来不太清晰。

Vim 允许用户自行配置高亮功能,调用 hi Search cterm=NONE ctermfg=grey ctermbg=grey ,就可以让它用相同的颜色高亮匹配字符的前景和背景,这样就能得到漂亮的方块:

b.第二个问题是,如何将矩形变为正方形像素。

Nolen 最终找到了Square 字体,这是一个正方形的字体,它最初是为了让用户在终端中玩 roguelike 游戏而设计的,在 Vim 中使用它可以绘制一个非常漂亮的网格:

接下来就是分析每帧画面的信息,生成一个针对主要图形的正则表达式优化文件。

然后作者发现,用Vim 自带的搜索功能就可以生成连续的矩形。

/\%l /\%>l /\%

\%23l Matches in a specific line.

\%<23l Matches above a specific line (lower line number).

\%>23l Matches below a specific line (higher line number).

\%.l Matches at the cursor line.

\%<.l Matches above the cursor line.

\%>.l Matches below the cursor line.

Vim 搜索可以匹配特定的行号(和列号),你可以将多个这样的搜索组合在一起。

例如, \%>5c\%<15c\%>4l\%<9l 可以匹配第 5 列和第 15 列之间以及第 4 行和第 9 行之间的矩形区域。

而且,这种匹配模式还可以和其他 Vim 搜索进行 OR 操作,比如将上面的式子和 - \%>5c\%<15c\%>4l\%<9l\|\%>12c\%<25c\%>10l\%<15l 进行OR操作,就可以绘制出之前的矩形以及位于列 12 和 25 以及行 10 和 15 之间的新矩形。

这样,使用单个搜索式就可以轻松地在屏幕上绘制许多矩形。

3.将动画帧的图形转换成矩形

接下来,就得把图像的网格(90x120,约 10000 个像素)拆成一个个矩形。

Nolen 首先尝试找出所有不一样的矩形并生成长搜索字符串、或者把网格拆成最少可填满的矩形,但两种尝试均以失败告终。

最终他想出了一个很简单的算法,它是这样工作的:先在图像的第一行里,把所有连续的“1”的部分找出来。找完第一行,再看第二行,找出和第二行找到的部分有重叠的地方。

要是把这个重叠部分和第一行合起来形成的矩形的面积,比单独这两行形成的矩形的面积都大的话,就把它们合并成一个矩形。然后就一直持续下去,尽量把新找到的部分合并到之前的矩形里

这个算法通常情况下表现得不错。但当搜索字符串超过10000个字符,就会严重拉低每秒的帧数。

Nolen 于是又写了两个解决方案(从左到右构建矩形的算法版本和仅查看各个行的简单 RLE),然后通过三种算法运行每个帧并选择最短搜索模式,这个组合算法最终效果不错。

# Number of times each approach was picked

original approach (top to bottom merging) - 1110

left to right merging - 2239

single-row RLE - 3300

4.设置好Vim宏就可以在编辑器中播放动画了

分解好了图形,最后的一个问题就是:如何在 Vim 中播放视频。具体步骤如下:

1.Vim 设置:顶部中心窗口播放视频,是一个包含 90 行每行 120 个空格的文件,左右两侧是用于图像居中的空缓冲区,底部窗口是约 6500 个搜索模式列表。

2.使用 Vim 宏播放视频:Vim 宏可以记录一系列击键操作,方便重播。宏命令为“”ay$:let @/=@a^M+”,具体来说,就是对寄存器 a 操作,拉动到行尾,将寄存器/的内容设置为寄存器 a 的内容,执行命令,然后移动到下一行开头。这样设置宏可以让光标回归到正确位置,反复迭代即可实现重播。

3.优化:最有趣的优化操作是“let @/=@a”,相比“/^Ra^M”操作,它避免了过长的查询操作导致搜索窗口闪烁严重和帧率降低的问题。

4.运行宏:可以运行“1500@q”(假设宏记录在寄存器 q 中)播放宏 1500 次,快速运行 1500 帧。

这样一来,就终于能得到开头的 Bad Apple 视频啦!

,时长00:42

作者还表示,由于是在一天内完成的项目,还有很多可以完善的细节,比如可以创建结构良好的文件来使用传统正则表达式而非 Vim 的行/列搜索功能,以及帧率的稳定性方面还可以继续加强。

万物皆可BadApple

除了用 Vim 编辑器,网友们在 Bad Apple 整活上一直都脑洞大开,可以说只有你想不到,没有网友做不到的。(doge)

比如有人用马里奥游戏复现:

还有在电脑终端中敲几个命令就能运行的:

甚至包括一些奇奇怪怪的硬件,包括快被淘汰的老式电视机电磁显示屏、甚至做实验用的示波器都可以:

看来,人类对Bad Apple的开发可能还不到10%啊,期待以后能看到更多的整活视频(搓手手)


[1]https://news.ycombinator.com/item?id=42674116
[2]https://eieio.games/blog/bad-apple-with-regex-in-vim/

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
韩国财政部长:股市和外汇市场暴跌系外部因素所致 非国内基本面问题

韩国财政部长:股市和外汇市场暴跌系外部因素所致 非国内基本面问题

财联社
2026-03-04 16:25:06
钱学森36岁还未成家,钱学英打算帮他介绍对象,他却直言:不然你嫁给我好了

钱学森36岁还未成家,钱学英打算帮他介绍对象,他却直言:不然你嫁给我好了

文史明鉴
2026-02-28 13:43:16
骗光明星20亿,连亲妈都不放过,霍家“逆子”被钉上“耻辱柱”!

骗光明星20亿,连亲妈都不放过,霍家“逆子”被钉上“耻辱柱”!

小椰的奶奶
2026-03-04 17:32:40
宋平同志逝世,享年109岁

宋平同志逝世,享年109岁

上观新闻
2026-03-04 19:54:23
哈梅内伊有多少资产?或许他才是世界首富,李嘉诚都远不及他

哈梅内伊有多少资产?或许他才是世界首富,李嘉诚都远不及他

张老师担扑
2026-03-02 22:51:06
国人泪目!9旬院士平静宣布,中国导弹再无任何盲区!

国人泪目!9旬院士平静宣布,中国导弹再无任何盲区!

Thurman在昆明
2026-03-02 20:38:49
林诗栋退出重庆冠军赛真因曝光,伤病不是主因,王励勤说出真相

林诗栋退出重庆冠军赛真因曝光,伤病不是主因,王励勤说出真相

詹妹侃体育
2026-03-04 19:56:05
国内AI应用赛道呈现“马太效应”:豆包断层领先,DeepSeek、元宝分列二三位

国内AI应用赛道呈现“马太效应”:豆包断层领先,DeepSeek、元宝分列二三位

TechWeb
2026-03-03 17:45:07
哈梅内伊次子,要接班了?

哈梅内伊次子,要接班了?

中国新闻周刊
2026-03-04 11:08:23
祁发宝上将亮相,六排勋章胸前挂,淡然一笑尽显英雄本色

祁发宝上将亮相,六排勋章胸前挂,淡然一笑尽显英雄本色

老特有话说
2025-12-23 21:35:49
特朗普:一切来得太突然,第三波打击即将展开!美公民成牺牲品?

特朗普:一切来得太突然,第三波打击即将展开!美公民成牺牲品?

触摸史迹
2026-03-05 04:35:57
亚洲首个倒下的国家要出现了?曾叫嚣取代中国,如今却步日本后尘

亚洲首个倒下的国家要出现了?曾叫嚣取代中国,如今却步日本后尘

八斗小先生
2026-03-02 15:56:32
联合国前主席称:中国人的风俗,世界上没有一个国家能够学得来

联合国前主席称:中国人的风俗,世界上没有一个国家能够学得来

原来仙女不讲理
2026-02-13 17:31:20
8分钟口嗨,骗了全世界!美军炸了三天才发现:伊朗这局破不了?

8分钟口嗨,骗了全世界!美军炸了三天才发现:伊朗这局破不了?

浯江孤舟
2026-03-04 11:44:43
第十二波打击将至,31国拒参战,伊朗走投无路求助中国

第十二波打击将至,31国拒参战,伊朗走投无路求助中国

心灵得以滋养
2026-03-04 04:52:59
伊朗的终极计划出炉,好猛!美国转头向中国摊牌,连说两个“不”

伊朗的终极计划出炉,好猛!美国转头向中国摊牌,连说两个“不”

狡黠之狐
2026-03-05 04:12:05
伊朗革命卫队:完全控制霍尔木兹海峡,超680名美以军人伤亡

伊朗革命卫队:完全控制霍尔木兹海峡,超680名美以军人伤亡

咣当地球
2026-03-05 04:41:55
机关事业单位退休人员,养老金8037元,职业年金871元,正常吗?

机关事业单位退休人员,养老金8037元,职业年金871元,正常吗?

史行途
2025-12-19 09:40:38
“高速节假日免费”改“每年固定里程免费”,连续4年都有全国两会代表委员提建议,专家:短期内不具备全面落地可行性

“高速节假日免费”改“每年固定里程免费”,连续4年都有全国两会代表委员提建议,专家:短期内不具备全面落地可行性

极目新闻
2026-03-04 12:28:35
美国股市开盘走高,消息称伊朗与美国进行秘密接触

美国股市开盘走高,消息称伊朗与美国进行秘密接触

财闻
2026-03-04 22:57:21
2026-03-05 05:31:01
量子位 incentive-icons
量子位
追踪人工智能动态
12218文章数 176402关注度
往期回顾 全部

科技要闻

多位核心离职,阿里亲手废掉最强AI天团?

头条要闻

外媒称伊朗封锁霍尔木兹海峡只让中俄船通行 中方回应

头条要闻

外媒称伊朗封锁霍尔木兹海峡只让中俄船通行 中方回应

体育要闻

2026年中超,为什么值得你多看一眼?

娱乐要闻

谢谢谢娜 贡献出26年内娱的第一个笑话

财经要闻

人大代表建议:将农民养老金提到500元

汽车要闻

鸿蒙智行首款猎装车 尚界Z7/Z7T首发

态度原创

房产
本地
亲子
数码
公开课

房产要闻

400组,30套!聚亿·椰海锦程为何能在春节火出圈?

本地新闻

食味印象|一口入魂!康乐烤肉串起千年丝路香

亲子要闻

罕见七胞胎超市排队看海鲜

数码要闻

苹果发布新款MacBook Pro:首发M5 Pro/Max芯片 17999元起

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版