基于Python如何实现视频转字符画动漫小工具
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,本篇文章给大家分享的是有关基于Python如何实现视频转字符画动漫小工具,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。导语今天带大家来点
千家信息网最后更新 2025年11月08日基于Python如何实现视频转字符画动漫小工具
本篇文章给大家分享的是有关基于Python如何实现视频转字符画动漫小工具,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
导语
今天带大家来点儿好玩儿的东西,我想你们肯定是喜欢的!

上面这个大家都认识吧
对,就是字符动画啦,之前也是不是再那个旮旯里面看见过,但是还没上手自己试的。
小编给大家先试试效果了,那么如何将视频动画转成字符画呢?今天就来教大家怎么转换,非常简单,今天教大家制作的
这款工具就能一键转换!
正文
一、准备中
1)素材的话可以自己找一小段视频的哈。
2)环境安装
本文用到的环境如下:Python3、Pycharm、numpy、cv2以及部分自带模块。
模块安装:
pip install -i https://pypi.douban.com/simple/ +模块名
二、原理简介
1)视频转为一帧帧的图片这个利用OpenCV就可以实现了。
2)**将每帧图片转为字符画,**原理是根据图片的像素值确定每个像素点用什么字符。
3)按顺序播放字符画即可。
三、代码演示
# 视频转字符动画import osimport cv2import sysimport timeimport ctypesimport subprocessimport numpy as np# 暗蓝色FOREGROUND_DARKBLUE = 0x01# 暗绿色FOREGROUND_DARKGREEN = 0x02# 暗天蓝色FOREGROUND_DARKSKYBLUE = 0x03# 暗红色FOREGROUND_DARKRED = 0x04# 暗粉红色FOREGROUND_DARKPINK = 0x05# 暗黄色FOREGROUND_DARKYELLOW = 0x06# 暗白色FOREGROUND_DARKWHITE = 0x07# 暗灰色FOREGROUND_DARKGRAY = 0x08# 蓝色FOREGROUND_BLUE = 0x09# 绿色FOREGROUND_GREEN = 0x0a# 天蓝色FOREGROUND_SKYBLUE = 0x0b# 红色FOREGROUND_RED = 0x0c# 粉红色FOREGROUND_PINK = 0x0d# 黄色FOREGROUND_YELLOW = 0x0e# 白色FOREGROUND_WHITE = 0x0f# 上面颜色对应的RGB值cmd_colors = { 'FOREGROUND_DARKBLUE': [FOREGROUND_DARKBLUE, (0, 0, 139)], 'FOREGROUND_DARKGREEN': [FOREGROUND_DARKGREEN, (0, 100, 0)], 'FOREGROUND_DARKSKYBLUE': [FOREGROUND_DARKSKYBLUE, (2, 142, 185)], 'FOREGROUND_DARKRED': [FOREGROUND_DARKRED, (139, 0, 0)], 'FOREGROUND_DARKPINK': [FOREGROUND_DARKPINK, (231, 84, 128)], 'FOREGROUND_DARKYELLOW': [FOREGROUND_DARKYELLOW, (204, 204, 0)], 'FOREGROUND_DARKWHITE': [FOREGROUND_DARKWHITE, (255, 250, 250)], 'FOREGROUND_DARKGRAY': [FOREGROUND_DARKGRAY, (169, 169, 169)], 'FOREGROUND_BLUE': [FOREGROUND_BLUE, (0, 0, 255)], 'FOREGROUND_GREEN': [FOREGROUND_GREEN, (0, 128, 0)], 'FOREGROUND_SKYBLUE': [FOREGROUND_SKYBLUE, (135, 206, 235)], 'FOREGROUND_RED': [FOREGROUND_RED, (255, 0, 0)], 'FOREGROUND_PINK': [FOREGROUND_PINK, (255, 192, 203)], 'FOREGROUND_YELLOW': [FOREGROUND_YELLOW, (255, 255, 0)], 'FOREGROUND_WHITE': [FOREGROUND_WHITE, (255, 255, 255)] }CHARS = " .,-'`:!1+*abcdefghijklmnopqrstuvwxyz<>()\/{}[]?234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ%&@#$"'''Function: 视频转图片Input: -videopath: 视频路径 -size: 指定图片大小 -interval: 视频每interval帧取一帧Return: -img_list: 图像列表'''def video2imgs(videopath, size, interval=1): img_list = list() capture = cv2.VideoCapture(videopath) i = -1 while capture.isOpened(): i += 1 ret, frame = capture.read() if ret: if i % interval == 0: # frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) img = cv2.resize(frame, size, interpolation=cv2.INTER_AREA) img_list.append(img) else: break capture.release() return img_list'''# 根据距离将图片的RGB值转为Windows-CMD窗口支持的颜色def RGB2Cmdcolor(color): cmd_color = None min_distance = 1e6 for key, value in cmd_colors.items(): distance = np.square(np.array(color) - np.array(value[1])).sum() if distance < min_distance: min_distance = distance cmd_color = value[0] return cmd_color''''''Function: 图像转字符画Input: -img(np.array): 图像Return: -img_chars: 像素点对应的字符集合'''def img2chars(img): img_chars = [] height, width, channel = img.shape for row in range(height): line = "" for col in range(width): percent = int(np.array(img[row][col]).sum() / 3) / 255 char_idx = int(percent * (len(CHARS) - 1)) line += CHARS[char_idx] + ' ' img_chars.append(line) return img_chars'''Function: 视频转字符画sInput: -imgs: 视频里捕获的所有图片Return: -video_chars: img_chars的集合'''def imgs2chars(imgs): video_chars = [] for img in imgs: video_chars.append(img2chars(img)) return video_chars'''Function: 播放字符画sInput: -video_chars: imgs2chars中获取的video_chars -iscmd(bool): 是否在Windows的cmd窗口播放 -color: 颜色选择, cmd中有效'''def play(video_chars, color=None, iscmd=True): if color and iscmd: STD_OUTPUT_HANDLE = -11 std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE) color_choice = None if color.isdigit(): color_choice = list(cmd_colors.values())[int(color)][0] else: color_choice = cmd_colors.get(color)[0] if color_choice is not None: _ = ctypes.windll.kernel32.SetConsoleTextAttribute(std_out_handle, color_choice) width, height = len(video_chars[0][0]), len(video_chars[0]) for img_chars in video_chars: for row in range(height): print(img_chars[row]) time.sleep(1/24) if iscmd: os.system('cls') else: subprocess.call("clear")# 主函数def main(videopath, color=None, iscmd=True): imgs = video2imgs(videopath=videopath, size=(64, 48), interval=1) video_chars = imgs2chars(imgs) input("[INFO]: Complete Pre-processing! Enter button to start to play...") if iscmd: os.system('cls') else: subprocess.call("clear") play(video_chars, color=color, iscmd=True)if __name__ == '__main__': import argparse parser = argparse.ArgumentParser() parser.add_argument('-f', '--file', help='Video file.') parser.add_argument('-c', '--color', help='Color for playing.') args = parser.parse_args() main(args.file, color=args.color) 四、效果展示
1)截图效果展示
第一组随机截图:

以上就是基于Python如何实现视频转字符画动漫小工具,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
字符
视频
图片
工具
像素
动画
图像
效果
模块
颜色
动漫
原理
天蓝色
就是
截图
更多
环境
白色
知识
篇文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全的理解与认识
后端服务器安全组规则
福建精英网络技术咨询项目
黑龙江网络技术开发参考价
qc 数据库
软件开发企业主营业务成本结转
好的网络技术加盟价格
上海童臣网络技术有限公司
数据库在哪里开发
剑门关服务器
奉贤区个性化软件开发项目信息
攻防演练网络安全师证如何考
尺寸比例数据库书籍
服务器自动结束进程
网络安全面临哪些外在威胁
万德 下载数据库
勇士与旅途连接服务器失败
网络安全公司申请条件
数据库dba认证
如何设置显示无法连接到服务器
联通代理服务器和端口
从零开始学软件开发
jsp 在线数据库管理
软件开发合同 百度网盘
数据库是指那些数据的集合
外文期刊收录数据库
警告服务器位于美国
服务器2003分区
乌镇互联网医疗科技有限公司
惠州餐饮软件开发报价