今天分享的这段代码,看起来没啥实际用处,而且有些反潮流,因为现如今大家看视频都追求更高分辨率的超清画质,而我们这个,是 一个“超不清”的视频播放器

在控制台里播放视频,用字符来表示画面

不过我觉得它至少可以有三个作用:1.用来 练习视频和图像处理 的编程开发;2. 在没有图形界面的服务器上播放视频 (虽然效果不咋地);3.作为一种独特的 艺术风格化 处理

程序的原理其实很简单,关键是你要理解 计算机中一张图像的组成:一堆像素点。 我们平常说的 1920*1080 之类的分辨率,也就是指这个像素点的多少。我们想做成字符画,也就是考虑如何用不同的字符来表示一个像素。

通常 一个像素点由3个0~255的值表示 ,分别表示 红、绿、蓝三种颜色值 ,值越大表示颜色越深。但字符画是没有颜色的,所以需要将图像 转成灰度图 ,这样就可以跟一组从深到浅的字符形成一种对应关系。比如深的点就是 @,浅色的点就是 .。

一幅图像全部转成字符序列后,就可以直接在控制台输出了。对于一个视频来说,只需要将每一帧都转换后输出,并按照一定的时间间隔清屏、输出下一帧,即可达到我们的需要的效果。

转换后的效果:

代码:

# coding: utf8
import cv2 as cv
import os
import time
# 替换字符列表
ascii_char = list(r"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
char_len = len(ascii_char)
# 加载视频
cap = cv.VideoCapture('video.mp4')
while True:# 读取视频每一帧hasFrame, frame = cap.read()if not hasFrame:break# 视频长宽width = frame.shape[0]height = frame.shape[1]# 转灰度图img_gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)# 缩小图片并调整长宽比img_resize = cv.resize(img_gray, (int(width / 10), int(height / 10)))text = ''# 遍历图片中的像素for row in img_resize:for pixel in row:# 根据像素值,选取对应的字符text += ascii_char[int(pixel / 256 * char_len)]text += '\n'# 清屏os.system('cls')  # mac是'clear'# 输出生成的字符方阵print(text)# 适当暂停一下time.sleep(0.03)

代码不长,稍微解释下其中几处:

  1. ascii_char 这个字符序列并不是必须这样,只要大致上满足其中的 字符看起来从深到浅 即可,字符越多越准确,效果就越好。
  2. 读取视频使用了 opencv-python ,并直接用它提供的方法转了灰度图,在之前的文章中也有过介绍:OpenCV-Python,计算机视觉开发利器
  3. resize 这一步比较重要,因为有的视频分辨率很高,直接一个像素转一个字符的话量太大,所以 先缩小图片 。另一个原因是字符一般都不是正方形,所以在 图片长宽比上要做一定的调整 ,这样最终效果比较好。(实际中要根据你自己控制台中的字体效果来调整缩放比例)
  4. ascii_char[int(pixel / 256 * char_len)] 是整个转换的核心,因为一个像素的颜色范围是 0~255,通过 pixel / 256 * char_len 可以 将一个像素值对应于字符序列中灰度相当的字符
  5. 关于输出,有几个值得注意的点: 输出一帧前需要清屏 ,不同平台命令有区别; 时间间隔、控制台的字体大小、缩放比例都要根据实际情况作调整 ;如果计算时间过长、刷新太慢而屏幕闪烁,可以考虑进一步缩小图片,或者先将所以帧转换完毕后再统一输出。

最后请各位欣赏最终的视频效果:

《极乐净土》字符版 https://www.zhihu.com/video/1063899647084568576

文中完整代码已上传,包括 转单张图片转视频 两份代码。
获取地址请在公众号“ Crossin的编程教室 ”里回复关键字 播放器

════

其他文章及回答:

如何自学Python | 新手引导 | 精选Python问答 | Python单词表 | 人工智能 | 爬虫 | 我用Python | requests | 计算机视觉

欢迎搜索及关注公众号: Crossin的编程教室

超不清视频播放器-用Python将视频转成字符相关推荐

  1. amigo幸运字符什么意思_超不清视频播放器-用Python将视频转成字符

    今天分享的这段代码,看起来没啥实际用处,而且有些反潮流,因为现如今大家看视频都追求更高分辨率的超清画质,而我们这个,是一个"超不清"的视频播放器: 在控制台里播放视频,用字符来表示 ...

  2. 测试:视频播放器、视频通话、视频类网站 测试点

    文章目录 前言 一.视频播放器测试用例 二.视频通话测试用例 三.视频网站测试用例 参考文章 前言 百度和字节面试被问到视频相关的测试用例,作为一个研究方向是视频编解码的人来说,这个问题回答不好,着实 ...

  3. Android VR Player(全景视频播放器) [7]:视频列表的实现-网络视频

    Android VR Player(全景视频播放器) [7]:视频列表的实现-网络视频 前期准备 在之前的博文,Android VR Player(全景视频播放器) [6]:视频列表的实现-本地视频 ...

  4. Android VR Player(全景视频播放器) [6]:视频列表的实现-本地视频

    Android VR Player(全景视频播放器) [6]:视频列表的实现-本地视频 (本篇博客参考<Android第一行代码(第二版)>中关于RecyclerView的部分) 列表的实 ...

  5. Android本地视频播放器开发 - 搜索本地视频(1)

    这一章的主要内容是搜索手机本地视频,添加到ListView列表里,每一个表项含有这个视频的缩略图,视频的播放时间,视频的标题,在搜索本地视频(1)中我们先制作搜索功能.   Video.java--视 ...

  6. 干货分享:高效办公工具【视频转文字、视频播放器、B站视频下载软件、贴图、截图提取文字并翻译、笔记记录软件、任务管理网站】

    高效办公工具分享--视频转文字.视频播放器.B站视频下载软件.贴图.截图提取文字并翻译.笔记记录软件.任务管理网站 一 前言 二.下载链接及效果 1.视频自动转文字-飞书妙记(目前免费使用!!) 2. ...

  7. python篮球-用Python把蔡徐坤打篮球视频转换成字符动画!

    原标题:用Python把蔡徐坤打篮球视频转换成字符动画! 说到现在网络最火的梗,非"蔡徐坤打篮球"莫属.最近,蔡徐坤当仁不让地成为了娱乐圈被黑的最惨的明星. 自从2019年1月份, ...

  8. python动画篮球大小_用Python把蔡徐坤打篮球视频转换成字符动画!

    说到现在网络最火的梗,非"蔡徐坤打篮球"莫属.最近,蔡徐坤当仁不让地成为了娱乐圈被黑的最惨的明星. 自从2019年1月份,蔡徐坤成为了NBA官方形象代言人之后,他打篮球的视频片段被 ...

  9. 用python把视频分解成图片

    # 用python把视频分解成图片 import cv2 # 读取一段视频 cap=cv2.VideoCapture("d:/1.mp4") # 用作计数 i=0 # 循环判断视频 ...

最新文章

  1. java 大数据处理之内存溢出解决办法(一)
  2. python2d 平滑插值处理_python中平滑的、通用的2D线性插值
  3. non-overlapping-intervals
  4. Google AdSense中文官方博客今天公布了AdSense内容广告与AdSense搜索广告的收入分成比例...
  5. Learning to Rank入门小结 + 漫谈
  6. 【elasticsearch】es直接put一个数据到es Can‘t merge because of conflicts Cannot update enabled setting _source
  7. MSSql ID自动增长删除数据重1开始
  8. 用贪心算法来解决沙袋装箱问题
  9. 监控延迟严重怎么解决_监控画面故障解决:网络监控画面没有图像显示或无视频信号怎么办...
  10. 课堂经验值管理小程序_济南小程序开发,微信小程序应用开发实现单店管理
  11. 【友元、异常和其他】——C++ Prime Plus CH15
  12. 批量打印证书 php,巧用WPS2013批量打印证书
  13. 锐捷EG易网关与NBR路由器命令执行漏洞-2
  14. oracle dataguard 日志传输,从alert日志看Oracle 11g DataGuard日志传输
  15. Jeffery Pinto和Om Kharbanda:项目经理的12项工作
  16. 102 613 SWP协议学习笔记--数据链路层
  17. 离散元后处理,将PFC数据写出并导入到matlab中形成云图
  18. android 通知 广告,解决三星/小米等Android手机通知栏推送广告的问题
  19. git+commitize+cz-customizable 代码 提交规范
  20. html 转pdf 之wkhtmltopdf

热门文章

  1. Java初学者推荐学习书籍free下载
  2. Eclipse配置外部Tomcat
  3. 需求评审五个维度框架分析及其带来的启示-5-结束语
  4. ssm拼接html,SSM前后端分离 ssm+html+js(ajax) 这种controll层的返回值是结合或者网址...
  5. mysql 管理端口_MySQL8新增管理端口
  6. 年度重磅!中国《营销自动化应用基准报告 2021》正式发布!
  7. C+ 轮融资发布会抽奖名单公布,还有 20 万礼物正在路上
  8. 硅谷增长专家 Ian Thiel 来华,首次揭秘数据驱动增长的道与术
  9. 覆盖 19 个城市,19,000 个样本,零售业深度研究报告发布
  10. TPYBoard:一款可以发挥无限创意的MicroPython开发板