python - 输出文件里的字符串之帧输出

猫宁一:我用Python导出了两万行字符,做成了动画

import os
while 1:
    fo = open("a:\\1.txt", "r", encoding="UTF-8")
    i = 0
    l = ""
    for line in fo.readlines():
        l=l+"\n"+line
        i+=1
        if i==60:
            os.system("cls")
            print(l)
            l=""
            i=0

下载的up的码导出的是html,大概是需要在手机上特定的浏览器滑行看出效果。在电脑上没得搞,但随手看看代码吧!简单的调用函数的重复操作,虽然没看懂,但还是修改了几个参数把本地一个视频片段导了出来。
于是又把html复制成txt尝试用逐帧输出的方法让他输出。
于是有了上面的代码。
疑问1:我明明数着行数是30,但是我 if i= =30,只输出一半的内容,于是又改成了if i = = 60。
问题:这个帧输出太慢,我现在尝试先把l保存起来再输出!

以下是猫宁一的代码,将视频转成html,大家可以直接参考下,不用去B站那下载了

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 time
import os
ss=time.time()
# while 1:
fo = open("a:\\1.txt", "r", encoding="UTF-8")
i = 0
l = ""
lf=len(fo.readlines())//60
for z in range(lf):
    exec("z"+str(z)+"=\"\"")
z=0
fo = open("a:\\1.txt", "r", encoding="UTF-8")
for line in fo.readlines():
    l=l+"\n"+line
    i+=1
    if i==60:
        exec("z"+str(z)+"=l")
        z+=1
        l=""
        i=0
for i in range(lf):
    os.system("cls")
    exec("print(z%i)"%i)
    # time.sleep(0.04)
print(time.time()-ss)

16.837197065353394

之前的代码播放时长
16.910979986190796

视频片段实际播放时长
8.934

看来影响时长的还是print

python - 输出文件里的字符串之帧输出_第1张图片至于想让字符输出约等于原视频比例的话,设置这里即可。

你可能感兴趣的:(python)