这几天某音上很多高校都在拍高校手势舞,非常火,尤其是河南工业大学拍的小姐姐手势舞,一度上榜到热搜。

为什么会上榜?先来看原视频。

河南工业大学手势舞

嗯嗯,这回知道原因了。

那么接下来用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将视频转为字符动画相关推荐

  1. python视频转换字符动画_视频转字符动画

    导 语 原本今天想发用DQN玩T-Rex Rush,结果出现了一点小意外,昨天睡前开始RUN的模型,早上起来发现C盘内存溢出模型根本没被训练,万万没想到5万张图片竟然没法一次性保存.好的,说了一些废话 ...

  2. python视频转字符动画_python字符动画

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python3 & opencv 视频转字符动画本课程使用 opencv ...

  3. python视频转字符动画_Python实现视频转字符动画

    导语 又到了愉快地周末,应某好友的要求,本周来补一期视频转字符动画相关的内容,核心主题是将蔡徐坤打球的视频转成字符动画.我也不知道为什么,真的不知道,真的真的不知道为什么.嗯,重要的话说三遍.说干就干 ...

  4. python视频转换字符动画_视频转字符动画-Python-60行代码

    昨晚我朋友三十六咲跟我说在网上看到了别人做的视频转字符动画,觉得很厉害,我于是也打算玩玩.今天中午花时间实现了这样一个小玩意. 顺便把过程记录在这里. 注:最新版使用了画布方式实现,和本文相比改动非常 ...

  5. python视频转字符动画_Python 视频转字符动画 - 进阶

    这篇文章是 视频转字符动画-Python-60行代码 的后续,如果感兴趣,请先看看它. 0. 话说在前头 最新版使用了画布方式实现,和本文相比改动非常大,如果对旧版本的实现没啥兴趣,可以直接移步 vi ...

  6. Python 利用PIL将图片转为字符

    Python 利用PIL将图片转为字符 PIL(Python Imaging Library)是Python语言的一个图像处理库,已经是Python平台事实上的图像处理标准库了.PIL功能非常强大,而 ...

  7. python 替换array中的值_利用Python提取视频中的字幕(文字识别)

    我的CSDN博客id:qq_39783601,昵称是糖潮丽子~辣丽 从今天开始我会陆续将数据分析师相关的知识点分享在这里,包括Python.机器学习.数据库等等. 今天来分享一个Python小项目! ...

  8. access数据放到list中_利用Python提取视频中的字幕(文字识别)

    我的CSDN博客id:qq_39783601,昵称是糖潮丽子~辣丽 从今天开始我会陆续将数据分析师相关的知识点分享在这里,包括Python.机器学习.数据库等等. 今天来分享一个Python小项目! ...

  9. (Python3)视频转字符动画初学者超详细实战,亲测有效!

    之前是为了完成老师布置的一个作业,觉得视频转字符动画乍一看比较容易完成,于是就选了这个项目.但是实际做了之后才觉得对于初学者来讲,确实轻敌了. 在网上找了好几篇相关的文章,但是总觉得解释得不够详细,新 ...

最新文章

  1. python requests 重定向_认识Python最最最常用语重要的库Requests
  2. PDF与doc格式互换
  3. mysql ssd 性能测试 写入_MySQL服务器的SSD性能问题分析和测试详解
  4. 机器视觉-EasyDL商品检测-标准版-Demo
  5. python 堆排序的两种实现
  6. [力扣leetcode39]组合总和及回溯法
  7. Python 线性回归
  8. (引)ajax 经验-保留自己使用
  9. 在鹅厂做了14年开发
  10. 973分成功通过CCNA。。
  11. 面试又栽在JVM调优上了!
  12. linux 内存 virt,Linux 内存 virt res shr data swap 意义
  13. Quartz框架初学1
  14. java序列化与反序列化总结
  15. POJ1679 The Unique MST —— 次小生成树
  16. Cleaner Robot - CodeForces 589J(搜索)
  17. win10笔记本外接显示器显示输入信号超出范围
  18. Buffer() is deprecated due to security and usability issues.webpack 报错
  19. java 设置页面宽度_java – PDFBox设置A5页面大小
  20. winsat查询windwos里disk、mem、cpu性能

热门文章

  1. 我未来的CS学习纲领
  2. java编译点九图,Cocos2d-x3.2 Scale9Sprite点九图形式缩放图片
  3. 【Cocos2D-X 游戏引擎】初窥门径(7)无限地图滚动
  4. struts2 的一个action中配置多个result input
  5. C++报错:0x00528549 处有未经处理的异常(在 ....exe 中): 0xC00000FD: Stack overflow(参数: 0x00000001, 0x015D2FA4)
  6. RTD1619固件升级方法image烧录方法
  7. 阴历表 Lunar calendar table 1900--2099
  8. Axure仿微信UI
  9. Poi处理Excel学习
  10. nbiot mqtt调试-onenet注册BC20