bad apple英文版 原作者是用什么软件制作的?

后使用快捷导航没有帐号?
查看: 8398|回复: 22
注册时间最后登录阅读权限150积分25124精华9帖子
TA的每日心情开心9&小时前签到天数: 829 天[LV.10]以坛为家III
本帖最后由 小菜儿 于
10:48 编辑
网上有很多用各种显示屏、字符界面、甚至是激光、示波器等去播放动画的视频。而在视频的选择上,很多视频播放的是。这个视频全程黑白,所以在各种设备上播放效果都特别良好,经常被用来做各种实验,所以也有句名言“有屏幕的地方就有Bad Apple”。
我买到树莓派之后一直在想树莓派+GPIO这个组合能做些什么有意思的事情。正好最近找到了一个一直都没有玩的3.3V小尺寸12864液晶模块,就决定用这个也放一放Bad Apple,见证一下树莓派远超过单片机的实力。
09:02 上传
设备与材料:
MzL05-12864液晶模块 (控制器: ST7565)
“Bad Apple影绘”等视频资源
功能:12864液晶模块的单色视频播放
开发周期:几个小时
程序的下载及用法,请见项目首页:
树莓派12864视频播放器
—————————————————————————————-
注:本日志为开发过程记录。对编程不感兴趣就请读到这里为止
—————————————————————————————-
视频数据的准备
视频是以前从niconico上下载下来的原画质视频。(512×384, 3’39″=6566帧@30fps/容器mp4/视频AVC/音频AAC)
128×64单色无压缩视频的数据量是128*64*6566/8 = 6.41MiB,不大。所以为了最高效率起见,还是把视频的每一帧先处理成符合液晶屏幕的,可以直接写入液晶模块的格式。
格式是由液晶模块主控ST7565所规定的:
09:04 上传
这个格式是纵向的,和更常见的大12864里用的ST7920(横向)不一样。个人感觉纵向的有点烦人。
处理步骤:视频 → 每一帧截图为BMP文件 → 目标文件。
中间需要在某个位置,将图片尺寸从512×384缩小为128×64。
我选择的是在“视频→BMP”这一步直接缩小。不过先转出BMP来,再把所有的BMP批处理了也可以。
一处理视频就比较麻烦,工具繁多、方法复杂。
将视频转换成图片序列(当然不能一帧一帧去截图了@_@),使用。但是VirtualDub不能读.mp4容器的文件,并且支持的解码器极其有限(AVC和H264都不行)……。
我是不希望用视频转换工具重新压一遍(损画质)。所以找了个解决办法:。这个软件可以通过写脚本,将任何视频“伪装”成AVI文件,供其他软件无障碍读取。并且可以做一些简单的视频处理。
但是AviSynth也不能直接读.mp4 AVC的文件,还需要给它加插件。
步骤:(1)安装AviSynth和FFmpegSource。
下载FFmpegSource时选择32位稳定发布版ffms-2.17.7z;
(2)写伪装用的.avs脚本,和badapple.mp4放在同一目录下:
A = FFAudioSource(“badapple.mp4″)
V = FFVideoSource(“badapple.mp4″).BicubicResize(128,64)
AudioDub(V, A)
# 注意:这个脚本里直接顺手把视频尺寸缩小到了128×64。
(3)开VirtualDub,把.avs脚本当做视频打开。然后File→Export→Image Sequence输出图像序列,输出格式选BMP。
由于这么麻烦,所以我把我转换出来的BMP文件序列,放出来提供下载
不用管这么多步骤,用就好了:
(Bad.Apple.开发大礼包.[逐帧BMP截图+原画质视频].z01
& Bad.Apple.开发大礼包.[逐帧BMP截图+原画质视频].zip)
注:网盘早晚是会失效的。如果不能下载,请留言告诉我。
BMP→液晶屏数据
虽然点阵液晶取模软件不少,但想做批量的,现成的程序肯定没有,自己写是跑不了的。
程序流程:读BMP文件→判断每个像素(黑或白)→转换成液晶屏规定的数据字节→写二进制文件。
读BMP我拉了一个BMP识别库来用——BMP格式再简单也不值得做重复发明轮子的事情
这个库可以方便的读取每个像素的RGB颜色值,功能够用了。
尽管BadApple是黑白视频,但灰度部分也是存在的——比如1’29″妹红的火焰,和1’54″幽灵乐团的影子。所以使用RGB→YUV公式中亮度分量Y的部分,先将每个像素点转换成灰度值:Y = 0.299R + 0.587G + 0.114B
我的判断方法,是简单的50%阈值:亮度过一半为白,不到一半为黑。保险,但不完美。至少因为图片太小,在0’55″就丢失掉了二小姐的“奸笑”这个细节。
总之写出的取模程序,最后输出output.bin即为动画数据。尺寸应该是一字节不差的:1024B/帧 × 6566帧 = 6566KiB。
使用GPIO/SPI驱动12864
我手里这个12864是串行驱动的,时序符合SPI——尽管只能单向写入,MISO没有用到。
树莓派的GPIO里直接有SPI。树莓派需要设置的SPI参数检查一下:
字节顺序(MSB First)
时钟极性(CPOL=1, CPHA=1)
时钟分频(即SPI总线频率,64分频=4MHz。检查液晶的时序图,确保总线频率不超过液晶模块支持的最高频率)
片选信号(随意,我用的CS0)
片选极性(低有效)
操作树莓派的GPIO和SPI,我用了。用法很简单,看Example就够了。
12864的上电初始化时序,我偷懒参考了北京集粹的资料
(326.17 KB, 下载次数: 42)
09:19 上传
点击文件名下载附件
——这家公司的资料很准确。注:对于液晶模块,只要控制器一致,资料一般可以通用。
动画的流程:读取一帧的数据→写入液晶模块→等待1/30s→下一帧。
但是“等待1/30s”,肯定不是字面意思的“延时1/30s”。因为写SPI总线这个操作本身就使用时间,并且这个时间无法确定、不可忽略。忽略就会造成明显的时间不准。
其实这个“等待1/30s”,准确来说,应该表达为“等待下一个1/30s时刻的到来”。也就是说,在程序中要维持一个ms级的时标,每显示一帧就标注一下当前的时刻,然后等待到时标相比上一个标记点超过了33ms,就该显示下一帧了。
Linux环境下ms级的时标,这个问题正经找了一阵……。有不少人认为该使用gettimeofday()函数,但是用这个,在跨越两天的时间不就出问题了……
最后找到&sys/timeb.h&提供的ftime()函数可以解决。ftime()函数可以得到当前的毫秒级的UNIX时间戳。不过也不是没有隐患:程序运行中,不能更改系统时间。这个问题暂时放着了。
其实这个项目相比单片机播放视频,是相当轻松的:
性能够用,海量内存和存储随便使,无需自己操心SD卡操作、FAT32等等
开发资源丰富,甚至无需交叉编译和烧录下载
SPI使用很方便。
果然用树莓派做点短开发周期的玩具再合适不过了。
作者:沙渺,原文
注册时间最后登录阅读权限150积分25124精华9帖子
TA的每日心情开心9&小时前签到天数: 829 天[LV.10]以坛为家III
本帖最后由 xinxincaijq 于
09:15 编辑
树莓派12864动画播放程序更新+发布
树莓派12864动画播放程序更新完善。处理掉了程序中不谨慎的大量细节,完善了取模程序。播放程序增加了两项功能:音频同步播放、帧率自定义。
本次更新,将程序做到了可以发布的水平。放出供爱好者下载赏玩。
视频更新:树莓派12864液晶模块视频播放器(正式视频)
程序的下载、用法等,详见项目主页:
树莓派12864视频播放器
其实相当的简单:在开始播放视频时,直接调用外部的音频播放器播放MP3文件即可。
音频播放器,就从debian提供的软件包里随便抓了一个:。
帧率自定义
实现帧率自定义,应该是只需要算一下,每一帧持续的时间为(1000/fps)ms即可。但是有点小问题。程序中使用的时标均为整数,这样除法所产生的小数部分(舍去)就会产生误差。
例如30fps,.3ms,反过来33*30=990ms,则每24帧就会比1秒种不足10ms。
实际现象就是:一开始音画是同步的,越到后面画面就快的越多。
我考虑的解决办法是,将不足的毫秒数平均分配到各帧中补偿回来。还以30fps为例,不足10ms,则每3帧多播放1ms,就将30帧的时间补回了准确的1000ms。
帧率通过参数输入。程序中将帧率限制在最高60fps——虽然这个液晶模块可以达到的更高,但是由于严重的拖影,其实高了也没用处。甚至60都有点多,30的效果就很好了。
作者:沙渺&&原文:
注册时间最后登录阅读权限70积分13887精华4帖子
翰林, 积分 13887, 距离下一级还需 16113 积分
TA的每日心情无聊8&小时前签到天数: 973 天[LV.10]以坛为家III
这个不错啊&&有些拖影
注册时间最后登录阅读权限50积分1896精华0帖子
进士, 积分 1896, 距离下一级还需 1104 积分
TA的每日心情开心 10:55签到天数: 517 天[LV.9]以坛为家II
为啥都喜欢bad apple
注册时间最后登录阅读权限60积分3114精华0帖子
状元, 积分 3114, 距离下一级还需 6886 积分
TA的每日心情奋斗 11:16签到天数: 146 天[LV.7]常住居民III
真心不错,这个不知道TFT彩显效果怎么样?
注册时间最后登录阅读权限150积分25124精华9帖子
TA的每日心情开心9&小时前签到天数: 829 天[LV.10]以坛为家III
ht868788 发表于
真心不错,这个不知道TFT彩显效果怎么样?
拿到板子,自己尝试就知道效果啦!
注册时间最后登录阅读权限60积分4281精华0帖子
状元, 积分 4281, 距离下一级还需 5719 积分
TA的每日心情奋斗 08:32签到天数: 773 天[LV.10]以坛为家III
这个板真心想佣有啊。
注册时间最后登录阅读权限150积分25124精华9帖子
TA的每日心情开心9&小时前签到天数: 829 天[LV.10]以坛为家III
louyj 发表于
这个板真心想佣有啊。
哈哈~心动不如行动,爱板现在做活动,价格优惠哦!
注册时间最后登录阅读权限60积分4281精华0帖子
状元, 积分 4281, 距离下一级还需 5719 积分
TA的每日心情奋斗 08:32签到天数: 773 天[LV.10]以坛为家III
还有抢楼活动就好了。
注册时间最后登录阅读权限40积分913精华0帖子
举人, 积分 913, 距离下一级还需 87 积分
TA的每日心情奋斗 09:01签到天数: 188 天[LV.7]常住居民III
这个要顶!!非常赞啊!
超级版主职务勋章
爱板网超级版主
爱板会员勋章
注册成为爱板网会员
在线之王勋章
在线时间非常长,且活跃度高
在线达人勋章
在线时间长,且活跃度高
发帖机器勋章
在论坛积极发帖,数量巨大,质量较高
分区版主职务勋章
爱板网分区版主
论坛骨干勋章
在论坛积极发帖,并积极与坛友交流互动,成为论坛骨干力量
活跃会员勋章
经常参与各类话题的讨论,发帖内容较有主见
优秀会员勋章
经常在论坛发帖,与论坛互动交流,对论坛贡献很大
优秀版主勋章
活跃且尽责职守的版主
热心会员勋章
经常帮助其他会员答疑
推广达人勋章
积极宣传本站,为本站带来更多注册会员
技术先锋勋章
经常在论坛进行技术交流、传播、讨论
原创达人勋章
经常在论坛发表原创帖,且质量较高
灌水专家勋章
长期在论坛灌水,活跃论坛气氛
站长推荐 /3
为回报网友对爱板网AVAGO活动的持续支持,特组织本次“邀好友奖品大升级”活动,赶紧邀请你的好友,帮你升级你的奖品基金吧!你有我有大家有!
随着物联网的快速崛起,视频联网的解决方案也在不断推陈出新。Intel凭借着强悍的处理器(桌面/服务器)性能优势,诞生了诸多优异的视频监控、存储解决方案,如以物理安保门禁方案与数字安全监控(DSS)结合的箱式门禁监控解决方案,或者说基于为智能城市量身打造的智能视频存储方案。
可编程逻辑的设计方法从根本上改变了现代数字电路的设计,不管是从最简单的与非门还是到最复杂的SoC。通过一句句硬件描述语言可编程逻辑器件FPGA帮我们实现了各种数字电路,这一切显得十分神奇又十分神秘。目前市场上有各种各样的FPGA开发板,它们不是功能太复杂,使用门槛太高就是核心芯片老旧,几乎要被淘汰。Step团队经过精心挑选,打造了小脚丫一代FPGA开发板,为大家提供一个非常酷,实用,入门简单的学习开发平台。
Powered by Discuz!试用12864液晶播放《Bad Apple》 | aheadlead的生活博客
菊(nao)花(can)一片
南京航空航天大学
计算机学院2013级
我是个傻子 jijiji
2015年八月
2015年六月
2015年四月
2015年三月
2015年一月
2014年十一月
2014年十月
2014年九月
2014年八月
2014年七月
2014年六月
2014年五月
2014年一月
2013年十二月
2013年十一月
2013年九月
2013年八月
2013年七月
2013年一月
2012年十一月
2012年十月
2012年九月
2012年八月
2012年七月
2012年六月
2012年四月
2012年三月
2012年二月
2012年一月
2011年十二月
2011年十一月
2011年九月
2011年八月
想要得到的礼物
Mac Pro 十二核+64G内存
Macbook Pro MJLT2
墨镜 & 新眼镜
自豪的采用 Wordpress 。Posts - 58,
Articles - 0,
Comments - 537
技术总是用来服务于人的。
Technique must serve people all the time.
10:57 by JimLiu, ... 阅读,
在中,小弟向大家展示了一个用JavaScript制作的《Bad Apple》,这次我将对这个程序创作过程中的一些有意思的细节做解释。
这个并不在JavaScript范畴内,我们用KMPlayer导出视频的每一帧,然后插值缩小到指定分辨率,没有用.NET库里的插值,因为那个会造成边缘效果不佳(用三次立方的话),还有杂乱色斑(这个也有可能是jpg的原因),这个插值非常简单,就是根据分辨率取周围几个点的平均值而已&&然后再生成js里用的格式(下文会说到),这个过程没什么好说的了&&
所谓画布,就是一个用来显示画面的HTML元素,里面有1px元素若干,用来表示视频中的像素点。在demo程序中,点create canvas以后会生成一个用来做画布的div,一开始我是用表格做的,但是发现不管是创建速度还是修改速度都很一般。后来改成全用span,float:left,然后同时设置上外层div的宽度高度,这样就可以内外吻合了。然后再每一帧中改变每个像素的背景色。
后来发现当颜色不变的时候,虽然设置了颜色,浏览器本身也会有一定优化,比改变的时候要快一些,但是那一句xxx.style.backgroundColor=...;还是会白白占用一些时间。所以和上一帧对比一下如果颜色没改变就不赋值了。但是这样一来,因为每一帧的变化程度是不一样的,有时候一个点也没变,有时候全变了,所以帧率变得非常不稳定,下面我会继续说到如何稳定帧率。
我们使用的颜色编码比较特殊,是64色的,一个字符串表示一行,一个字符表示一个像素。64个不同的字符,映射到256级灰度,这样对单个字符的利用率就很高了,64色也足以应付视频中的灰度平滑过度。在实际中,需要把字符转换成RGB颜色表示,这里我们深刻地体会到js字符串连接是有多么多么的慢。所以只好预处理一个拼接好的颜色表,用的时候直接查表,就不用费时去每次都连接字符串了。
在经过前面两层优化之后,程序运行的速度已经比较快了,由于上文说到帧率不稳定,所以需要在画面过快的时候限制速度,我们采取了如下方式:
根据当前时间,计算期望帧数
如果实际帧数&期望帧数,则延迟(当前帧数*每帧时间(固定值) - 当前实际时间)
如果实际帧数&期望帧数,则跳帧至期望帧(按每帧时间逐一累加,直到时间补偿到正数,既跳至这一帧)
这样一来在速度快的电脑、浏览器和低分辨率下,可以以比较稳定的速度播放,即使遇到画面大幅变化的时候,也就丢几帧,不会造成fps急剧下降。而对于低速电脑和比较慢的浏览器,就只能狂跳帧了(这种情况下已经没有观赏价值了)。
动态加载JS
这个就比较简单了,参考的。我做了一个简单的ScriptLoader,这样就不用让无辜的用户一访问网页就承担那么大的数据量。这里要注意一下浏览器兼容性。
JavaScript代码压缩
这里说的并不是以前我们常用的那种js/css压缩的方法,比如去掉whitespace,长变量名换短变量名等。因为这里的js代码中,程序代码很少,也就几K。但是用来表示视频的那些代码却非常巨大。160*120分辨率15fps的数据就有64MB之多,而就算是最小的80*60(即前文中DEMO用的分辨率),完整版也有17MB,截取其中150帧,也就是10秒的动画,还是有700+KB,这对于在网络上演示和传播极为不利。而用传统的js压缩方法就毫无办法了。
所以这里我们用LZW算法对数据进行了压缩,是以前用C++写的,先压缩成二进制,再用可见字符表示二进制,然后我把解压的C++代码翻译成了js&&在一个不极限的算法之下从700多KB压缩到了111KB,效果还算满意,极限算法应该可以压缩到100K以内。然后再作为字符串变量加载,在动态加载JS之后,eval这个字符串,就可以把它正常执行成程序用的内存数据了。
浏览器横测
完事后兴起,我们对Chrome3.0, Firefox3.5, IE8, Safari4,进行了对比测试。
测试的时候还没有JS代码压缩,只有动态加载,所以测试对比了4个方面:加载速度,画布生成速度,丢帧率/fps,内存占用。
测试用的电脑:AMD 9550/4GB RAM/Windows 7
测试在160*120(19200个点,约288000像素操作/s), 80*60(4800个点,约72000像素操作/s)两个分辨率下进行,总帧数3286,fps15,最终结果如下:
分辨率:160*120,数据64.7MB
丢帧率和FPS
总共才放了个位数帧
丢了大部分,基本2fps
补充:在Chromium4.0 nightly build中,这四个指标分别提升到了6s/11s/丢395帧/280MB,可谓提升惊人。
分辨率:80*60,数据17MB
丢帧率和FPS
最终结果并不出人意料,Chrome凭借超凡的V8引擎鹤立鸡群,虽然它的速度快很大程度上基于对内存的贪婪,但是也不得不佩服它运行的确很快。而号称最快浏览器的Safari却下场惨淡。firefox很奇怪,在我的电脑上非常慢,跟IE差不多下场,但是在测试电脑上还不错,最后我想可能是因为我装了firebug,据说它有bug,会造成TraceMonkey的JIT罢工,大幅影响速度。而IE就啥也不说了&&
一个自娱自乐的游戏,没想到最后可以说的东西还是蛮多的,最后在这里提供三种分辨率(160*120, 120*90, 80*60)的(无JS压缩版本)。
希望大家玩的高兴&&有问题?请留言&&
后来用HTML5中的canvas重写了,LZW也改成一帧一帧解压,速度很安逸,在现代浏览器里,结合audio,可以音画同步(480*360*15FPS),再无怨念。

我要回帖

更多关于 bad apple 的文章

 

随机推荐