抖音流行的字符视频如何实现
程序员文章站
2022-04-03 23:19:13
...
前几天,有个朋友给我分享了一个抖音短视频链接,是以代古拉k跳舞视频为原型的字符视频,朋友问我:“这个你知道怎么做吗?”。
我们都知道视频是由一帧一帧的静态图片组合而成的,所以当我们把原视频的每一帧变成对应的字符画时,字符视频就出来了。
所以将一个视频变成字符视频只需以下两步:
1.提取视频中的每一帧。
2.将每一帧的静态图片变成字符画。
关于第一步的具体实现,小编就不多加赘述了,我觉得应该不难吧,懂视频编辑的应该会做,下面小编着重说下第二步怎么做。
先附上效果图。
字符画是一系列字符的组合,而原图是一系列像素点的组合,我们可以将颜色相近的像素点替换为同一种字符就能实现原图转字符画。
实现原图转字符画也只需两步:
1.原图的颜色模型为RGB,通过灰度化转为灰度图。
2.将灰度值相近的像素点替换为同一种字符即可,最后将所有字符保存在txt中。
from PIL import Image
#定义一个ascii的列表,其实就是让图片上的灰度与字符对应
ascii_char = list("[email protected]%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
# 将256灰度映射到70个字符上
def get_char(r, g, b, alpha = 256):
if alpha == 0: #如果灰度是0,说明这里没有图片
return ' '
length = len(ascii_char) # 计算这些字符的长度
gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b) # 把图片的RGB值转换成灰度值
unit = (256.0 + 1) / length # 257/length
return ascii_char[int(gray / unit)] # 这个相当于是选出了灰度与哪个字符对应。
im = Image.open('1.png') #加载图片
width = im.size[0] #图片的宽
height = im.size[1] #图片的高
txt = ""
for i in range(height): #i代表纵坐标
for j in range(width): #j代表横坐标
txt += get_char(*im.getpixel((j,i))) #把图片按照横纵坐标解析成r,g,b以及alpha这几个参数,然后调用get_char函数,把对应的图片转换成灰度值,把对应值得字符存入txt中
txt += '\n' #每行的结尾处,自动换行
fobj=open('1.txt','w')
fobj.write(txt)
fobj.close()
上一篇: 涛涛画小旗