Bad Apple:技术宅的盛宴

标签: bad apple 技术 | 发表时间:2011-08-25 15:11 | 作者:(author unknown) Zane
出处:http://www.guokr.com/site/diy/
/gkimage/yk/tk/99/yktk99.png
DIYer:艾斯昆
制作时间:从3小时到一天不等 因人而异
制作难度:★★★☆☆
GEEK指数:★★★★★

Bad Apple最初是作为日本同人游戏社团“上海爱莉丝幻乐团”所制作的“东方Project”系列游戏背景音乐出现的。后来在日本著名视频站点NicoVideo上有人萌发了为此系列制作MADMovie的想法,最后有了这段3D制作的影绘风格视频:

这段视频由不断变换的影绘风格游戏人物组成,完全黑白,视觉震撼力十足。此视频在网络上引发了一场宏大的运动,各种技术宅使用了各种方法来演奏这段三分多钟长的视频。

看完本文后,你将能做出如下效果的视频:

双向电梯


1   所需工具

● PC机一台
● Visual Studio 2010
● KMPlayer 3.0

2   思路原理

● 我们想要做的就是在Windows控制台(也就是命令提示符,俗称“DOS窗口”)下播放Bad Apple视频,视频的基本原理就是利用人眼的视觉暂留效果,快速在控制台输出字符-清屏-输出字符-清屏,达到“动画”的效果。

而输出的字符需要从原始视频获取,将原始视频压缩成一个较低的分辨率,再获取到每一帧上的所有像素点,转换成对应的字符串。


3   确定思路

● 首先要选定使用的语言,这个根据大家的爱好,随便C/C++、Java、Python等等绝大部分编程语言都可以实现,这里选用的是C#。
● 关于素材的来源,这个是难度最大的步骤。原始1080P视频素材在网上很容易下到,但要处理成我们需要的字符串形式。也就是在视频黑色像素的位置输出一个字符,白色像素的位置输出为空格,每一帧都依据像素排列位置输出成这种形式,如图:
/gkimage/ml/hj/63/mlhj63.png

● 获取字符图像大概有两个思路:
1. 根据视频格式(我下到的是H264编码方式的),读取二进制文件并进行转码;
2. 使用第三方工具或者类库,将视频的每一帧转换为图片格式,再将图片转换为所需字符串形式。
● 第一种方式需要研究视频编码的问题,而且比较复杂,因此我们选择取巧的方式。KMPlayer是个很好的视频播放软件,它的截图功能非常强大,可以将视频每一帧图像都保存为截图,完全能够满足我们的需要。

4   捕获图像

● 使用KMPlayer打开原始视频,点击右键选择“捕获”->“高级捕获”(如果没有捕获项,请勾选“设置”->“高级菜单”项),就可以了。
● 需要考虑的是分辨率与帧数的问题,Windows7下1366×768分辨率默认命令提示符窗口最大一行显示80个字符,最大44列,因此我们截取的视频分辨率应该小于等于这个值。当然还可以在后面过程中在调整分辨率,但要设计插值计算的问题,因此还是交给KMPlayer比较轻松一些。
● 另外命令提示符每个字符的上下间距与左右间距是不同的,上下间距要高上许多,如果按照视频原始宽高比截图的话最后输出的画面会有上下拉伸现象,因此截图的时候就要故意把视频截的“胖”一些。
● 最后综合考虑,决定一秒截25帧图像,图像分辨率为80×30。
/gkimage/x0/9a/ur/x09aur.png

● 这时还可以顺便将音频也用KMPlayer截取下来,以便保证视频与音频的同步(如果再如此折腾下还没有对此歌产生审美疲劳的话还可以丢进MP3里听)。音频比较简单,从头到尾录制,保存为mp3或者其他常见格式就可以,只要你使用的语言有可用的将它播放出来的库就可以。

● 截取的图片一共有3553张,保存在一个文件夹中。
/gkimage/zc/rw/iv/zcrwiv.png
● 其实这个时候就有一个简单的方法将这些静态图片播放出来了,只要使用Picasa附带的图片查看器打开第一帧图片,鼠标点中下一张,如何,动起来了吧?其他能够点种下一张不放就可以连续切换图片的查看器也能实现同样的效果。

5   编码

● 下面就可以开始编码了,思路很容易,依次读取每一张图片,遍历图片上每一个像素点,如果是黑色的话输出一个字符(这里用#字符,因为#块头比较大并且用的是C#),白色的话输出一个空格,将字符串保存在一个文本文件里。
● 仔细观察保存的图片时会发现一个问题,Bad Apple视频里并不是绝对的黑色与白色,还有少量的灰色作为渐变色彩,因此判断黑白的时候还是根据RGB值,只要其中一项大于200便当作黑色处理就好了。
● 第一次保存的时候发现数据量比较大,未压缩大概有将近10M大小,有些难以接受。因为保存的文本大部分字符都是重复的,因此压缩空间应该非常大,于是使用.net自带的Gzip压缩了一下,果然文件大小降至517KB了。
● 此时还可以用另外一种方法播放这段“文本视频”,只要用记事本打开数据文件,调整记事本窗口的宽度与高度(宽度大于一行80个字符,高度刚好每行30个字符),然后按下PageDown按钮,看到效果了吧~!

6   输出

● 剩下的工作就比较简单,只要读取这个文件,并在控制台不停的输出,每次输出30行(因为横向分辨率为30),然后清屏,继续输出。只要设定好每次输出时间的间隔,与截屏的间隔相符的话,动画就可以顺利的在控制台播放出来了。
● 只要仔细调节截屏的帧数、分辨率,控制台的宽度与高度、输出时间的间隔,就一定可以顺利播放出来,当然这个过程比较繁琐。
● 最后给程序添加上背景音乐,这里使用第三方的NAudio库来播放我们一开始截取的音频文件,只要你之前调节的参数没有问题,音频应该和动画达到神同步的境界的。让我们随着Bad Apple的旋律哼唱着“多少红颜为傻逼 多少傻逼不珍惜”来运行我们的程序吧!
/gkimage/7t/5h/o0/7t5ho0.png

7   作品展示

程序及源代码下载 (需要本机安装.net2.0或以上运行环境)

当然这是最简单的实现Bad Apple播放的方式,这里有技术宅达人们使用各种天马行空的方式实现Bad Apple,绝对会颠覆你之前的世界观:

由于版本实在太多,小编在推荐观看的版本前加上了☆号。最为推荐的是☆☆☆定格动画版,其次是☆☆中文填词的沙画版和☆☆彩色激光双屏投影版。

【以下是基于影绘版产生的版本】

7.1   ☆彩色3D重现版

根据影绘版本重构出来的彩色3D版


7.2   Excel版

原理和上面用记事本实现差不多,但是使用更多的单元格做像素可以让画面更加精细


7.5   魔兽争霸版

使用魔兽争霸3自带的地图编辑器 制作,这个比较强大

点击这里 下载地图


7.6   ☆扫雷版

这个很强,使用程序控制鼠标的位置,在相应地方按下右键点上小红旗,就可以实现动画效果了,最后作者用六个扫雷窗口播放Bad Apple


7.8   ☆沙画版

这个版本后面貌似是CG动画而不是沙画的定格...求鉴定


7.14   ☆☆☆定格动画版

这个无论是创意还是工作量都令人汗颜...动用了6566张纸片...


7.15   ☆苹果雕刻版

技术宅拯救世界啊!


7.16   围棋版

使用围棋拍摄的定格动画


7.18   ☆红白机版

出现了!出现了!编程使用红白机输出显示画面,并且使用FC做音源。从0:45开始。


7.22   九格对比版


【以下为脱离了影绘MV,仅基于《Bad Apple》音乐衍生的其他版本】

7.23   ☆☆中文神填词

词填的相当有水平


7.25   midi键盘游戏版

估计不可能有人能弹...两个人估计都完成不了...


7.30   单人分饰四声部...

这人也够神的了...自己演奏完四个声部以后自己剪辑合成...

相关 [bad apple 技术] 推荐:

Bad Apple:技术宅的盛宴

- Zane - DIY - 果壳网
DIYer:艾斯昆 制作时间:从3小时到一天不等 因人而异 制作难度:★★★☆☆ GEEK指数:★★★★★. Bad Apple最初是作为日本同人游戏社团“上海爱莉丝幻乐团”所制作的“东方Project”系列游戏背景音乐出现的. 后来在日本著名视频站点NicoVideo上有人萌发了为此系列制作MADMovie的想法,最后有了这段3D制作的影绘风格视频:.

苹果即将在 Apple Store 中部署 iBeacon 技术

- - 果迷网
当你走进一家苹果零售店,iPhone 立刻发来了一条推送信息:. 感谢你光临 Apple Store,摆在你面前的是我们最新推出的 Retina iPad mini,她是我们迄今为止做出的最棒的产品…. 这不是科幻,而是苹果即将在 Apple Store 中部署的一种技术,它的名字叫 —— iBeacon.

Nginx 502 Bad Gateway问题分析与踩过的坑 - 凝雨 - Yun

- -
我相信使用Nginx的都会遇到过502 504 这种bad gateway错误,下面我把碰到这个问题分析过程记录并分享出来. 从字面上的意思理解,nginx从upstream没有接受到信息,第一感觉就是连接被close. 超时的话一般错误信息是 timeout. 下面是尝试解决这个问题尝试过的手段.

Apple文案初品

- 中雨 - 互联网的那点事
几天前因为iPhone4的好文案在微博上分享了一下,说如果没人研究apple文案的话,我研究. 最近就一直吊着这个事儿,翻看了apple和同类消费电子产品的网页,再次真切体会到了apple文案的强大. 但发现,落笔之时,自己却极为底气不足,充其量只是“初品”或者“管窥”. 我认为研究apple的文案,要从他们英文网站看起,大抵因为中国站绝大部分是从英文上直接翻译过来,当然有少数本土化的发挥,我们后面会提到.

一路上有你 Apple

- Shearer - 译言-电脑/网络/数码科技
For the last thirty five years, time after time, Apple has revolutionized the way we look at technology and dragged the rest of the industry kicking and screaming into the future.

iPhone 4S — Apple 的「My Pace」

- hailin - Mr. Jamie 看網路與創投
大家期待已久的 iPhone “5″ 終於出現了,只不過它不叫 iPhone 5,它叫 iPhone 4S. 它跟 iPhone 4 基本上沒什麼不同,除了 CPU 從 A4 升級成 A5,加入 GSM/CDMA 雙模支援,和主相機的光學元件稍許更新之外. 這個網誌的讀者,大多是科技的「早期採用者」,看到這麼「沒力」的更新,大概會失望 — 尤其如果你又是昨天晚上熬夜看影片的話.

Apple Lossless Audio Codec 开源

- leafduo - LinuxTOY
Apple 宣布旗下的无损音频压缩格式 ALAC 开源. Apple Lossless Audio Codec (ALAC) 是一款由 Apple 开发的无损音乐压缩格式,被广泛的应用在 iOS 系列设备及 OS X 系统上. 本次将该格式及对应的编解码器按照 GPL 兼容的 APL2.0 的协议开源.

Apple 发布 iOS 8.0.2 更新

- - 果迷网
在昨天 Apple 闹出 iOS 8.0.1 的”乌龙”事件之后,今天 Apple 上线了 iOS 8.0.2 的更新,修正了 iOS 8.0.1 导致的 Touch ID 和 蜂窝数据网络不能在 iPhone 6 机型上工作的问题,同时还修复了其他一系列 Bug. 修正了 iOS 8.0.1 在 iPhone 6 和 iPhone 6 Plus 上蜂窝数据和 Touch ID 不工作的问题;.

[原]Apple WatchKit 基础篇

- - justinjing的专栏
       当平台的制约成为限制开发者的角色的时候,WatchKit 倾听了最为早期的 iOS 开发. 相比 OS X & AppKit 之前参差不齐的十年,iPhoneOS& UIKit 像一阵清风. Apps 也是小巧的、简单的、短小的.         在经历了7年时间和许多重大版本的发布,从 iPhones 和 iPads 的全部尺寸和形状到TV 和 CarPlay ,iOS 已经成长到包含无数设备型号和配置了.

Apple:年度最佳 iOS 应用榜单

- jicknan - 爱范儿 · Beats of Bits
过去的一年堪称苹果的丰收年,革命性的 iPad 和大卖特卖的 iPhone 4 的各种故事贯穿了整个 2010,然而,除去优秀的硬件设计,iOS 的真正竞争力,在于它那恐怖的 30 万应用. 今天,苹果公布了 2010 的最佳 iOS 应用榜单(应该是北美的统计). 1:美国人对于职棒的爱超过了一切,在总榜单上,MLB.com 的免费应用甚至超过了愤怒小鸟.