我用Python导出了两万行字符,做成了动画...

前几天看了B站Up主何同学的视频,有了这个导出字符文档做成视频想法,比我想象中要费时间,卡点实在是太难了…

但是一旦脑子里有个想法,不实现出来浑身难受…
我用Python导出了两万行字符,做成了动画..._第1张图片
这是视频 ↓↓↓

我用Python导出了两万行字符,做成了动画...

B站主页:https://space.bilibili.com/279911711

如果感觉视频做的还不错,求点个赞鼓励一下~

视频中的字符动画的文档和代码我这这里贴一下,大家想要做类似视频的话可以参考~~

1、前面的字符效果

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('写入文件成功')

2、后面的企鹅动画

小企鹅的动画用的是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")

3、屏幕自动下滑代码

import pyautogui

while(1):
	# 负值为向下滚动,正值向上滚动,如果视觉往下走,就是有点慢,应该加点数值
	# 企鹅速度
	pyautogui.scroll(-18)
	# 效果1丝带速度
	# pyautogui.scroll(-11)

视频中的字符动画的文档和代码我都放到下面链接中了,大家想要做类似视频的话可以参考~~

链接:
https://pan.baidu.com/s/10fUIkXkq8d1S8RcuTafnFQ
密码:9cca

你可能感兴趣的:(Python)