10.0上线整了个烂活,用WOW自带聊天框播放转换成文字的Bad Apple视频帧。
!RTVP
文件夹是插件本体,复制到该复制到的地方- 进入游戏之后新建一个叫
RTVP
的聊天窗口,建议手动取消所有频道和系统消息 - 不出意外的话,重载一下界面
/reload
然后敲命令/rtvp stage
- 此时在
RTVP
聊天窗口应该出现了黑白相间的方块文字,调整聊天框大小,让文字刚好形成一行黑一行白的样式 - 使用
/rtvp play
命令开始播放。备注:没有自带音乐,你需要自己在后台开个音乐
WOW的聊天框有两个基础功能:
- ChatFrame:AddMessage(msg):往聊天窗口显示文字,支持调整文字颜色,就暴雪那个格式
|cFFFF0000红色文字|r
。 - ChatFrame:Clear():清空聊天窗口。
有这两个基础功能,就可以依次先清屏再显示图片转成的文字,只要速度够快看起来就是视频了。
根据测试,WOW的聊天框拖到最大能显示22行文字,由于Bad Apple影绘原视频是4:3,所以选取了28x21的分辨率。
由于WOW聊天框行距比较宽,所以显示方块(■)字符的中间得插个空格。
再由于实际上分辨率太低,帧率高低影响不是很大,最终选取了折衷的15fps(原视频是30fps),三千多个视频帧,不少了。
因为Bad Apple影绘是黑白的,所以决定把像素设置成4种颜色,白色、浅灰(#212121)、深灰(#424242)、黑色,对应0~255以64分段的灰度。
tools
文件夹里就是用来生成原始视频数据的脚本。ffmpeg
和Bad Apple的视频没有自带在里面,如果你想自己转,记得把 ffmpeg.exe
和视频放进去。
video_to_image.bat
就是用来以15fps帧速率将视频转换成28x21黑白图片的脚本。双击即可。
其实就是 ffmpeg -vf scale=28:21,fps=15,hue=s=0
而已。
generate_frames.py
是利用 Pillow
库将图片转换成文字的脚本,原理也很简单,就读取每个像素的灰度,然后0~255按64分四段,分别对应一种颜色。
因为哪怕28x21也有快600个字符了,所以画蛇添足搞了个压缩:因为每个像素只有四种颜色,三个像素有4x4x4一共64种组合,分别用A-Z、a-z、0-9和符号来三个三个分组对应表示(伪Base64……)。这样每个视频帧就压缩到了大约200个字符,方便看。
双击运行之后会自动生成一个 generated_frames.lua
,里面一大堆的 table.insert
覆盖到 video_frames.lua
的对应位置就哦了。
就是读取这些帧,把压缩后的文字还原成像素,把像素替换成对应颜色的方框,然后按照每帧的时间戳依次在对应的聊天框里显示。