1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| import cv2 import numpy as np import os import threading import re from PIL import Image, ImageDraw, ImageFont import time
class video_chr_figure():
def __init__(self, video_adr): self.txt = '' self.video_adr = video_adr self.pix_weight = 0 self.pix_height = 0 print('即将载入的视频是%s' % re.search(r'(.*)\..*', video_adr).group(1)) self.ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\"^`'. ") self.chr_l = len(self.ascii_char)
def video_fig(self): cap = cv2.VideoCapture(self.video_adr) i = 0 try: while cap.isOpened(): ret, frame = cap.read() fig_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) if not ret: print('视频读取错误,请检查视频格式') break self.pix_weight = int(np.size(np.array(fig_gray), 1) / 6) self.pix_height = int(np.size(np.array(fig_gray), 0) / 6) img = Image.fromarray(fig_gray) img.save('C:/Users/yplit/Documents/python projects/ceshi/' + 'img_' + str(i) + '.jpg') i += 1 except: return i
def fig_ch(self, num):
img = cv2.imread('C:/Users/yplit/Documents/python projects/ceshi/' + 'img_' + str(num) + '.jpg', 0) im_g = cv2.resize(img, (self.pix_weight, self.pix_height), interpolation = cv2.INTER_AREA) print(self.pix_height, self.pix_weight) for k in range(self.pix_height): for j in range(self.pix_weight): pix_ch = self.ascii_char[int(im_g[k][j] / 256 * self.chr_l)]
self.txt += pix_ch self.txt += '\r\n' im = Image.new('L', (self.pix_weight *3, self.pix_height*9), 255) dr = ImageDraw.Draw(im) font = ImageFont.truetype(os.path.join("fonts", "simsun.ttc"), 5) dr.text((0, 0), self.txt, font=font, fill="#000000") img = im.resize((self.pix_weight *6, self.pix_height*6)) img.save('C:/Users/yplit/Documents/python projects/ceshi/' + 'img_' + str(num) + '.jpg') del dr im.close()
def fig_vid(self, i):
fps = 25 size = (self.pix_weight * 6, self.pix_height * 6) videowriter = cv2.VideoWriter('C:/Users/yplit/Documents/python projects/ceshi/2/ceshi.avi', cv2.VideoWriter_fourcc('M', 'J', 'P','G'), fps, size)
for k in range(i): frame = cv2.imread('C:/Users/yplit/Documents/python projects/ceshi/2/' + 'img_' + str(k) + '.jpg') videowriter.write(frame) videowriter.release()
if __name__ == '__main__': vcf = video_chr_figure('C:/Users/yplit/Documents/WeChat Files/wxid_vh6shev3b8lj22/FileStorage/Video/2020-08/ceshi.mp4') i = vcf.video_fig() a = [] for num in range(207, i): t = threading.Thread(target=vcf.fig_ch, args=(num,)) t.start() a.append(t) time.sleep(1) for t in a: t.join() vcf.fig_vid(i)
|