前几天看了B站Up主何同学的视频,有了这个导出字符文档做成视频想法,比我想象中要费时间,卡点实在是太难了…
但是一旦脑子里有个想法,不实现出来浑身难受…
这是视频 ↓↓↓
我用Python导出了两万行字符,做成了动画...
B站主页:https://space.bilibili.com/279911711
如果感觉视频做的还不错,求点个赞鼓励一下~
视频中的字符动画的文档和代码我这这里贴一下,大家想要做类似视频的话可以参考~~
import os #文件模块
import random
# "♡"
snake1,snake2,snake3,snake4,snake5,snake6 = 0,0,0,0,0,0
data = ""
blank = 600
blank2 = 600
blank3 = 800
default_texts = ["o","■","□"]
repead = 6
repead2 = 5
repead3 = 8
speed = 5
food = "●●●●●"
# 效果1
while snake1 < 4:
index = 0
while index <= blank:
# print(index)
index += speed
text = ""
+' '*index + "" + default_texts[0]*repead + '' + ''
data += text + "\n"
while index+speed >= blank:
index += (speed//2)
if index+(speed//2) > blank:
# print(index)
for i in [1,2,3,4,5]:
index += 1
text = ""
+' '*index + "" + default_texts[0]*(repead+i) + '' + ''
data += text + "\n"
else:
text = ""
+' '*index + "" + default_texts[0]*repead + '' + ''
data += text + "\n"
if index > blank:
food_data = ""
+' '*index + "" + default_texts[0]*(repead//2) + "" + food + "" + default_texts[0]*(repead//2) + ""
for i in [1,2,3,4,5]:
data += food_data + "\n"
break
while index >= 0:
# print("index",index)
while index+(speed//2) > blank:
# print("index22",index)
index -= (speed//2)
for i in [5,4,3,2,1]:
index -= 1
text = ""
+' '*index + "" + default_texts[0]*(repead+i) + '' + ''
# print(text)
data += text + "\n"
if index < 0:
break
index -= speed
text = ""
+' '*index + "" + default_texts[0]*repead + '' + ''
data += text + "\n"
snake1 += 1
# print("data",data)
# 效果2
while snake2 < 50:
index = 0
if snake2 % 2 == 1:
time_blank = random.randint(0,(blank2//2))
else:
time_blank = random.randint((blank2//2),blank2)
while index < 6:
text = ""
+' '*time_blank + "" + default_texts[1]*repead2 + '' + ''
data += text + "\n"
index +=1
index = 0
while index < 3:
data += "
" + "\n"
index +=1
snake2+=1
# 效果3
while snake3 < 50:
index = 0
default_text = random.choice(default_texts[1:])
if snake3 % 2 == 1:
time_blank = random.randint(0,(blank2//2))
else:
time_blank = random.randint((blank2//2),blank2)
while index < 6:
text = ""
+' '*time_blank + "" + default_text*repead2 + '' + ''
data += text + "\n"
index +=1
index = 0
while index < 3:
data += "
" + "\n"
index +=1
snake3+=1
# 效果4
color_index = 1
while snake4 < 15:
index = 0
default_text = default_texts[0]
div_text = ""
while index <= blank3//repead3:
time_text = ""
for i in range(1, (repead3+1)):
time_text += "" + default_text + '' + ' '*index
# print(time_text)
text = ""
+ time_text +""
div_text += text + "\n"
index +=1
color_index += 1
print(color_index)
data = data + div_text + ""
div_text = ""
while index >= 0:
time_text = ""
for i in range(1, (repead3+1)):
time_text += "" + default_text + '' + ' '*index
# print(time_text)
text = ""
+time_text +""
div_text += text + "\n"
index -=1
color_index += 1
print(color_index)
data = data + div_text + ""
snake4+=1
# # 效果5
# while snake5 < 20:
# index = 0
# default_text = default_texts[0]
# div_text = ""
# while index <= blank3//repead3:
# time_text = ""
# for i in range(1, (repead3+1)):
# time_text += "" + default_text + '' + ' '*index
# # print(time_text)
# text = ""+ time_text +"
"
# div_text += text + "\n"
# index +=1
# color_index += 1
# print(color_index)
# data += div_text + ""
# div_text = ""
# while index >= 0:
# time_text = ""
# for i in range(1, (repead3+1)):
# time_text = "" + default_text + '' +' '*index + time_text
# text = ""+ time_text +"
"
# div_text += text + "\n"
# index -=1
# color_index += 1
# print(color_index)
# data += div_text + ""
# snake5+=1
# 效果6
while snake6 < 7:
index = 0
default_text = default_texts[0]
div_text = ""
while index <= blank3//repead3:
time_text = ""
for i in range(1, (repead3+1)):
time_text += "" + default_text + '' + ' '*index
text = ""
+ time_text +""
div_text += text + "\n"
index +=1
color_index += 1
print(color_index)
data += div_text + ""
div_text = ""
while index >= 0:
time_text = ""
index_length = 0
for i in range(1, (repead3+1)):
time_text = "" + default_text + '' +' '*index + time_text
index_length += index
time_index = blank3 - index_length
time_text = ' '*time_index + time_text
text = ""
+ time_text +""
div_text += text + "\n"
index -=1
color_index += 1
print(color_index)
data += div_text + ""
index = 0
div_text = ""
while index <= blank3//repead3:
time_text = ""
index_length = blank3
for i in range(1, (repead3+1)):
time_text += "" + default_text + '' + ' '*index
index_length -= index
# print("index_length",index_length)
time_text = ' '*index_length + time_text
text = ""
+ time_text +""
div_text += text + "\n"
index +=1
color_index += 1
print(color_index)
data += div_text + ""
index = blank3//repead3
div_text = ""
while index >= 0:
time_text = ""
# index_length = 0
for i in range(1, (repead3+1)):
time_text = "" + default_text + '' +' '*index + time_text
text = ""
+ time_text +""
div_text += text + "\n"
index -=1
color_index += 1
print(color_index)
data += div_text + ""
snake6+=1
# 效果7
# http://www.divcss5.com/peise/
style = ''''''
data = style + data
path = os.getcwd()
file = open(path+"/snake.html","w")
file.write(data)
print('写入文件成功')
小企鹅的动画用的是cv2计算机视觉插件,获取将视频转成视频帧,解析成字符
import os
import sys
import numpy
import cv2 # 读取视频 计算机视觉
gray_num = list("▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫▫ ")
def main(videoPath: str):
# 1、获取视频 2、获取视频帧 3、循环处理视频帧 4、将图片解析成字符
# 输出
data = ""
cap = cv2.VideoCapture(videoPath) # 读取视频
while True:
success, frame = cap.read() # 读取视频帧
if not success:
break
# 转换灰度图
grayFrame = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
# 调整尺寸
tsize = os.get_terminal_size()
fixFrame = cv2.resize(grayFrame, (tsize.columns, int(tsize.lines)))
img_array = numpy.array(fixFrame, "f")
asciiFrame = ""
for line in img_array:
row = ""
blank = 0
flag = 0
for p in line:
# p 浮点数数字
n = (p/255)*(len(gray_num)-1) # 灰度像素在字符列表中的位置
index = int(n) # 转换为整数
text = gray_num[index]
#如果碰到非空白像素,flag+1
if text != " ":
flag += 1
if flag == 1:
row = row + "" + " "*blank + ""
blank = 0
row += text
else:
flag = 0
blank += 1
asciiFrame = asciiFrame + ""
+ row[:-1] + "" + "\n" # 字符画帧换行
print(asciiFrame) # 输出
data = data + "" + asciiFrame + ""
cap.release()
path = os.getcwd()
file = open(path+"/txt.html","w")
file.write(data)
print('写入文件成功')
if __name__ == "__main__":
if len(sys.argv) > 1 and os.path.exists(sys.argv[1]):
main(sys.argv[1])
else:
print("No File")
import pyautogui
while(1):
# 负值为向下滚动,正值向上滚动,如果视觉往下走,就是有点慢,应该加点数值
# 企鹅速度
pyautogui.scroll(-18)
# 效果1丝带速度
# pyautogui.scroll(-11)
视频中的字符动画的文档和代码我都放到下面链接中了,大家想要做类似视频的话可以参考~~
链接:
https://pan.baidu.com/s/10fUIkXkq8d1S8RcuTafnFQ
密码:9cca