首页 > 电脑软件 > 电脑软件
发布日期:2025-01-16 17:32:42

网友仅用8小时,用Vim编辑器打造出惊艳BadApple动画

「8小时Vim魔法,BadApple惊艳重现!」

   老二次元和科技宅对BadApple动画早已烂熟于心,近日,网友NolenRoyalty利用Vim文本编辑器成功再现了这一经典动画。

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

   先来一起瞅瞅效果:

   可以看到,动画几乎完美地还原了人物的所有动作,整体视频非常流畅,画风也颇具经典像素游戏的韵味。 这样的表现手法不仅唤起了许多老玩家对往日经典游戏的回忆,同时也向年轻一代展示了像素艺术的独特魅力。通过精细的动作捕捉技术与复古风格的巧妙结合,这部作品成功地在怀旧与创新之间找到了平衡点,为观众带来了一种新颖且令人愉悦的视觉体验。

   继终端、经过游戏引擎和ASCII码的“BadApple”热潮之后,Vim编辑器也迎来了属于它的高光时刻! 随着技术的发展与创意的碰撞,如今的Vim不仅是一款强大的文本编辑工具,更是编程爱好者展示创意与艺术感的平台。从游戏引擎到ASCII艺术,再到Vim的精彩表现,这种跨领域的融合无疑拓宽了我们对软件应用的传统认知。它向我们展示了技术与艺术结合的可能性,也激励着更多开发者探索工具的更多可能性,让日常的编码工作充满了无限的乐趣与想象空间。 这种创新精神不仅丰富了编程文化的内涵,也为广大的开发者群体提供了新的灵感来源,推动了整个行业向着更加开放和多元的方向发展。

   难怪有网友表示,这就是我们如此喜爱BadApple的原因,它总能给我们带来意想不到的惊喜。 BadApple作为一个备受瞩目的焦点,确实经常能够打破常规,超出我们的预期。它的每一次更新或发布都能引发广泛的关注和讨论,这不仅体现了其独特的魅力,也反映了广大用户对创新和变化的渴望。在当今这个快速发展的时代,能够持续提供新意和突破的产品无疑更能吸引用户的兴趣与支持。

   PS:如果你尚未听说过BadApple,它是源自《东方Project》的一部音乐MV,在动画界和科技界都成为一个流行梗。不仅有许多二次创作的视频,人们还在各种硬件和软件上重现它,可以说,“只要有屏幕存在,就能找到BadApple的身影”。

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

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

   第一步非常简单,通过使用GitHub用户Felixoofed的代码库,我们能够获取到BadApple每一帧的信息。

   这个仓库里存放了原始视频文件以及一个使用FFmpeg命令的说明,通过该命令可以将视频拆分成大约6500张PNG图片,每一张都代表视频中的一帧画面。 我认为这样的处理方式非常有利于对视频内容进行细致分析。将视频拆解成单独的图像帧,能够帮助研究者或分析人员更深入地观察和理解每一帧所传达的信息。这种技术在新闻报道、学术研究等领域有着广泛的应用前景,特别是在需要对视频内容进行深度解析时,这种方法可以提供更为详尽的数据支持。此外,这也展示了现代技术手段如何使我们能够以前所未有的精度来审视和理解多媒体内容。

   随后,Nolen编撰了一小段Python程序,用于将每张PNG图像转化为一个由0和1构成的二维数组(其中1表示黑色像素)。

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

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

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

   假设你在文本中构建了一个主要由A构成的网格,并在其中嵌入了一个由B构成的图案,这样如果你查找B,就会看到一个小型的棍状人物图形。

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

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

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

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

   Nolen终于发现了Square字体,这种字体以正方形为基础,最初是为方便用户在终端中玩Roguelike游戏而设计的。在Vim中应用这一字体能够创建出非常精致的网格。

   在处理视频数据的过程中,我们需要深入分析每一帧画面的信息,进而生成一个专门针对主要图形的正则表达式优化文件。这个过程不仅要求技术上的精准,还需要对图像细节有极高的敏感度。通过这种方式,我们能够更有效地识别和提取出关键信息,这对于提高数据分析的效率和准确性至关重要。这不仅仅是一项技术挑战,也是对耐心和细致程度的考验。在这个过程中,每个步骤都必须精确无误,以确保最终结果的可靠性。这种方法的应用有望在未来的图像识别领域发挥重要作用,为各种应用场景提供更加可靠的数据支持。

   作者观察到,使用Vim编辑器自带的搜索功能,可以轻松地创建连续的矩形区域。这一发现不仅展示了Vim的强大功能,也提醒我们,有时候解决问题的方法可能就在眼前,只是需要一些时间和经验去发掘。熟悉这些内置工具不仅可以提高工作效率,还能激发更多创意,让编程或文本处理过程变得更加有趣和高效。

   Vim编辑器中的搜索功能不仅强大而且灵活,它可以精确地定位到特定的行号和列号,这对于需要精确定位的情况非常有用。你可以将多个这样的搜索条件组合起来,实现更复杂的文本查找与替换操作。这种精准控制的能力使得Vim成为专业程序员和文本处理高手的首选工具之一。 使用Vim进行开发或文本处理时,这种强大的搜索功能可以帮助用户快速找到所需信息,提高工作效率。尤其是在处理大型文件或者复杂代码时,能够准确地定位到某一行或某一列,可以极大地节省时间,减少错误。此外,Vim的这种灵活性也鼓励用户探索更多高级功能,进一步提升自身的技术能力。

   例如,“%>5c%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在尝试找出所有不相同的矩形时,先是构建了一个复杂的搜索字符串,试图覆盖所有的可能性,但最终发现这种方法效率低下且难以实现。随后,他转向了另一种方法,即尝试将网格分割成最小数量的矩形来完全填充整个区域,然而这一尝试也未能成功。 这种探索方式虽然展示了Nolen解决问题的决心,但也暴露出在复杂几何问题上寻找高效解决方案的挑战。这不仅需要创新思维,还需要对现有算法和技术有深入的理解。面对这样的难题,或许更需要跨学科的合作与交流,才能找到更为有效的解决路径。

   最终,他提出了一种非常简洁的算法,其工作原理如下:首先在图像的第一行中识别出所有的连续“1”段。完成第一行的扫描后,接着检查第二行,找出与前一行识别出的段落存在重叠的部分。 我认为这种算法不仅高效而且实用,特别适合用于处理大量图像数据。它能够显著减少图像分析的时间成本,并且对于自动化图像处理系统来说,是一种非常有价值的工具。通过简化处理流程,这种算法可能为图像识别技术的发展带来新的突破。

   如果将这个重叠区域与第一行组合形成的新矩形面积大于单独这两行构成的矩形面积,则将其合并为一个矩形。之后,持续进行这样的操作,尽可能地将新发现的区域并入之前的矩形中。

   该算法在大多数情况下表现良好,但当搜索字符串长度超过10000个字符时,会显著降低每秒的帧数。

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

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

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

   1.在最近的一次技术展示中,有人展示了如何使用Vim编辑器来实现一种全新的工作方式。在这个配置下,Vim的顶部中心窗口被用来播放视频,这个视频文件有90行,每行120个空格。而左右两侧则是两个空白的缓冲区,用于图像的居中显示。底部窗口则显示了大约6500个搜索模式的列表。 这种创新的方法不仅挑战了我们对传统文本编辑器功能的认知,还为多任务处理提供了新的可能性。通过在Vim这样一个传统的文本编辑环境中集成多媒体和搜索功能,用户可以在一个界面内完成多种任务,从而提高了工作效率。尽管这种方法可能需要一定的学习曲线,但它无疑为那些希望提高生产力的专业人士提供了一种有趣的新选择。

   2.使用Vim宏可以录制一系列按键操作,以便于重复播放。宏命令为“”ay$:let@/=@a^M”,具体而言,是对寄存器a进行操作,移动到行尾,将寄存器/的内容设为寄存器a的内容,执行该命令后,再跳转到下一行的开头。如此设置宏可以确保光标回到恰当的位置,多次迭代即可实现连续播放。

   3.最有趣的优化措施是采用“let@/=@a”,相较于使用“/^Ra^M”的方法,它有效避免了因长时间查询导致的搜索窗口频繁闪烁以及帧率显著下降的问题。

   4.运行宏:“1500@q”(假设宏已记录在寄存器q中),即可实现宏1500次的连续播放,从而迅速完成1500帧的处理。

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

   作者还表示,由于项目在一天内完成,还有很多可以改进的细节,例如可以构建结构化的文件来使用传统的正则表达式,而不是依赖Vim的行/列搜索功能,并且在帧率的稳定性上还有提升的空间。

   除了使用Vim编辑器外,网友们在BadApple二次创作方面一直展现出无穷的创意,可以说只有你想象不到,没有网友无法实现的。(doge)

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

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

   即使是一些奇特的硬件,包括即将淘汰的老式电视机、电磁显示屏,甚至用于实验的示波器都包括在内:

   看来,人类对BadApple的开发可能还不到10%吧,这让我非常期待未来能有更多创意十足的整活视频出现。BadApple作为一个新兴的技术领域,目前所展现的功能和应用仅仅是冰山一角。随着技术的进步和创新思维的发展,我们有理由相信未来的BadApple将会带来更多惊喜,为我们的生活增添更多色彩。这不仅是技术上的突破,更是人类智慧与创造力的体现。希望开发者们能够继续努力,探索更多可能性,让这个领域的潜力得到更充分的挖掘。

   参考链接:

   [1]https://news.ycombinator.com/item?id=42674116

   [2]https://eieio.games/blog/bad-apple-with-regex-in-vim/

   本文来自微信公众号:量子位(ID:QbitAI),作者:奇月

电脑软件最新资讯
友情链接 百度权重≥3友情链接交换
数界探索  |  科技快讯中文网  |  经济脉动  |  科技先锋  |  财智慧  |  慧算财经  |  财经探秘  |  财经日报  |  今日财经  |  财经风向标
Copyright © 2025 智慧科技官网 网暻网络
备案号:陇ICP备16003923号-4 版权所有