利用Python将视频转为字符动画
这几天某音上很多高校都在拍高校手势舞,非常火,尤其是河南工业大学拍的小姐姐手势舞,一度上榜到热搜。
为什么会上榜?先来看原视频。
河南工业大学手势舞
嗯嗯,这回知道原因了。
那么接下来用Python将视频转为字符动画看看是什么效果?
脚本代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:AllTests软件测试import numpy as np
import subprocess
import time
import cv2# 用于生成字符画的像素
pixels = " .,-'`:!1+*abcdefghijklmnopqrstuvwxyz<>()\/{}[]?1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ%&@#$"# 按帧读取视频
def video2imgs(video_name, size):""":param video_name: 字符串, 视频文件的路径:param size: 二元组,(宽, 高),用于指定生成的字符画的尺寸:return: 一个img对象的列表,img对象实际上就是 numpy.ndarray 数组"""img_list = []# 从指定文件创建一个VideoCapture对象cap = cv2.VideoCapture(video_name)# 如果cap对象已经初始化完成了,就返回true,换句话说这是一个 while true 循环while cap.isOpened():# cap.read() 返回值介绍:# ret 表示是否读取到图像# frame 为图像矩阵,类型为 numpy.ndarry.ret, frame = cap.read()if ret:# 转换成灰度图gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# resize 图片,保证图片转换成字符画后,能完整地在命令行中显示img = cv2.resize(gray, size, interpolation=cv2.INTER_AREA)# 分帧保存转换结果img_list.append(img)else:break# 结束时要释放空间cap.release()return img_list# 图像转化为字符画
def img2chars(img):""":param img: numpy.ndarray, 图像矩阵:return: 字符串的列表:图像对应的字符画,其每一行对应图像的一行像素"""res = []# 灰度是用8位表示的,最大值为255。# 这里将灰度转换到0-1之间# 使用 numpy 的逐元素除法加速,这里 numpy 会直接对 img 中的所有元素都除以 255percents = img / 255# 将灰度值进一步转换到 0 到 (len(pixels) - 1) 之间,这样就和 pixels 里的字符对应起来了# 同样使用 numpy 的逐元素算法,然后使用 astype 将元素全部转换成 int64 值indexes = (percents * (len(pixels) - 1)).astype(np.int64)# 要注意这里的顺序和 之前的 size 刚好相反(numpy 的 shape 返回 (行数、列数))height, width = img.shapefor row in range(height):line = ""for col in range(width):index = indexes[row][col]# 添加字符像素(最后面加一个空格,是因为命令行有行距却没几乎有字符间距,用空格当间距)line += pixels[index] + " "res.append(line)return res# 转换所有的帧
def imgs2chars(imgs):video_chars = []for img in imgs:video_chars.append(img2chars(img))return video_chars# 播放字符视频
def play_video(video_chars):"""播放字符视频:param video_chars: 字符画的列表,每个元素为一帧:return: None"""# 获取字符画的尺寸width, height = len(video_chars[0][0]), len(video_chars[0])for pic_i in range(len(video_chars)):# 显示 pic_i,即第i帧字符画for line_i in range(height):# 将pic_i的第i行写入第i列。print(video_chars[pic_i][line_i])time.sleep(1 / 24) # 粗略地控制播放速度。# 调用 shell 命令清屏# subprocess.run("clear", shell=True) # linux 版subprocess.run("cls", shell=True) # cmd ,windows 版if __name__ == "__main__":imgs = video2imgs("D:\\test.mp4", (64, 48))video_chars = imgs2chars(imgs)input("转换完成,按回车键开始播放!")play_video(video_chars)
运行结果:
Python将视频转为字符动画
精彩推荐
面试笔试系列
思维导图系列
Linux常用命令壁纸
接口Requests系列
测试框架pytest系列
Jmeter快速上手之接口测试
自动化测试框架结构图
移动安全框架(MobSF)
利用Python将视频转为字符动画相关推荐
- python视频转换字符动画_视频转字符动画
导 语 原本今天想发用DQN玩T-Rex Rush,结果出现了一点小意外,昨天睡前开始RUN的模型,早上起来发现C盘内存溢出模型根本没被训练,万万没想到5万张图片竟然没法一次性保存.好的,说了一些废话 ...
- python视频转字符动画_python字符动画
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python3 & opencv 视频转字符动画本课程使用 opencv ...
- python视频转字符动画_Python实现视频转字符动画
导语 又到了愉快地周末,应某好友的要求,本周来补一期视频转字符动画相关的内容,核心主题是将蔡徐坤打球的视频转成字符动画.我也不知道为什么,真的不知道,真的真的不知道为什么.嗯,重要的话说三遍.说干就干 ...
- python视频转换字符动画_视频转字符动画-Python-60行代码
昨晚我朋友三十六咲跟我说在网上看到了别人做的视频转字符动画,觉得很厉害,我于是也打算玩玩.今天中午花时间实现了这样一个小玩意. 顺便把过程记录在这里. 注:最新版使用了画布方式实现,和本文相比改动非常 ...
- python视频转字符动画_Python 视频转字符动画 - 进阶
这篇文章是 视频转字符动画-Python-60行代码 的后续,如果感兴趣,请先看看它. 0. 话说在前头 最新版使用了画布方式实现,和本文相比改动非常大,如果对旧版本的实现没啥兴趣,可以直接移步 vi ...
- Python 利用PIL将图片转为字符
Python 利用PIL将图片转为字符 PIL(Python Imaging Library)是Python语言的一个图像处理库,已经是Python平台事实上的图像处理标准库了.PIL功能非常强大,而 ...
- python 替换array中的值_利用Python提取视频中的字幕(文字识别)
我的CSDN博客id:qq_39783601,昵称是糖潮丽子~辣丽 从今天开始我会陆续将数据分析师相关的知识点分享在这里,包括Python.机器学习.数据库等等. 今天来分享一个Python小项目! ...
- access数据放到list中_利用Python提取视频中的字幕(文字识别)
我的CSDN博客id:qq_39783601,昵称是糖潮丽子~辣丽 从今天开始我会陆续将数据分析师相关的知识点分享在这里,包括Python.机器学习.数据库等等. 今天来分享一个Python小项目! ...
- (Python3)视频转字符动画初学者超详细实战,亲测有效!
之前是为了完成老师布置的一个作业,觉得视频转字符动画乍一看比较容易完成,于是就选了这个项目.但是实际做了之后才觉得对于初学者来讲,确实轻敌了. 在网上找了好几篇相关的文章,但是总觉得解释得不够详细,新 ...
最新文章
- python requests 重定向_认识Python最最最常用语重要的库Requests
- PDF与doc格式互换
- mysql ssd 性能测试 写入_MySQL服务器的SSD性能问题分析和测试详解
- 机器视觉-EasyDL商品检测-标准版-Demo
- python 堆排序的两种实现
- [力扣leetcode39]组合总和及回溯法
- Python 线性回归
- (引)ajax 经验-保留自己使用
- 在鹅厂做了14年开发
- 973分成功通过CCNA。。
- 面试又栽在JVM调优上了!
- linux 内存 virt,Linux 内存 virt res shr data swap 意义
- Quartz框架初学1
- java序列化与反序列化总结
- POJ1679 The Unique MST —— 次小生成树
- Cleaner Robot - CodeForces	589J(搜索)
- win10笔记本外接显示器显示输入信号超出范围
- Buffer() is deprecated due to security and usability issues.webpack 报错
- java 设置页面宽度_java – PDFBox设置A5页面大小
- winsat查询windwos里disk、mem、cpu性能
热门文章
- 我未来的CS学习纲领
- java编译点九图,Cocos2d-x3.2 Scale9Sprite点九图形式缩放图片
- 【Cocos2D-X 游戏引擎】初窥门径(7)无限地图滚动
- struts2 的一个action中配置多个result input
- C++报错:0x00528549 处有未经处理的异常(在 ....exe 中): 0xC00000FD: Stack overflow(参数: 0x00000001, 0x015D2FA4)
- RTD1619固件升级方法image烧录方法
- 阴历表 Lunar calendar table 1900--2099
- Axure仿微信UI
- Poi处理Excel学习
- nbiot mqtt调试-onenet注册BC20