序言
参考了博文:https://blog.csdn.net/qq_39687901/article/details/83347915的思路。参考pygame官方文档:https://www.pygame.org/docs/。和之前的图片转字符画不同,用颜色来区分,所以字符集没有特殊要求。
目标
如题,实现视频转彩色字符动画。
步骤
声明以及初始化
WIN_SIZE = (1280, 720) # 720p
VIDEO_PATH = './video/test02.mp4'
VIDEO_WIDTH = 80
VIDEO_HEIGHT = 45
VIDEO_SIZE = (VIDEO_WIDTH, VIDEO_HEIGHT)
FONT_SIZE = 16
CHARS = 'ERROR'
CHARS_LEN = len(CHARS)
先声明一些需要用到的常量,WIN_SIZE
和VIDEO_WIDTH
、VIDEO_HEIGHT
、FONT_SIZE
是乘积的对应关系。
WIN_SIZE = (VIDEO_WIDTH * FONT_SIZE, VIDEO_HEIGHT * FONT_SIZE)
pygame.init() # 初始化模块
win_sur = pygame.display.set_mode(WIN_SIZE) # 创造图形窗口
视频转换成图片
def video2images(video_path, video_size):
imgs = []
video_cap = cv2.VideoCapture(video_path) # 打开视频
while video_cap.isOpened():
ret, frame = video_cap.read() # 按帧读取
if ret:
img = cv2.resize(frame, video_size, interpolation=cv2.INTER_AREA) # 调整尺寸,像素重采样
imgs.append(img)
else:
break
video_cap.release()
return imgs
这里用到cv2模块打开并按帧读取视频,之后将帧存放到数组中。
图片转换成彩色字符
def images2chars(imgs):
sur_list = []
font = pygame.font.SysFont('fangsong', FONT_SIZE) # 从系统字库创建Font对象
font.set_bold(True) # 加粗
for img in imgs:
surface = pygame.Surface(WIN_SIZE) # 创建图