程序员 PK 刘畊宏 | 我用代码实现刘畊宏龙拳

简介: 程序员来挑战刘畊宏健身操了,我用代码实现了刘畊宏的龙拳和周大侠,对比原版,来看看代码版本健身操怎么样。

image.png


Hi 大家好,我是 DHL。公众号:ByteCode ,分享有用、有趣的硬核原创内容,Kotlin、Jetpack、性能优化、系统源码、算法及数据结构、动画、大厂


程序员来挑战刘畊宏健身操了,我用代码实现了刘畊宏的龙拳和周大侠,对比原版,来看看代码版本健身操怎么样。



我相信有很多小伙伴会好奇,视频中的字符是如何做出来的。难道是程序员一个一个字符敲出来的?


No,No,No,这肯定不是一个一个字符敲出来的,如果真是一个一个字符敲出来的,那么不吃不喝也得花好几年的时间,如果不是敲出来的那么肯定是通过某些软件或者技术实现的。我们先来看看如何实现一个字符视频。大概分为三步。


  1. 将视频的每一帧转成图片
  2. 将生成图片转成 ASCII 图形(字符化)
  3. 最后将步骤 2 生成的图片作为序列帧,一帧一帧播放


想要实现上面三步,大概有两种方式:


  • 通用方式,通过软件实现(适合所有人)
  • 通过代码实现(适合程序员)


通用方式,通过软件实现字符视频



这里需要用到两款软件 Adobe Premiere Pro  、Ascgen2


  • 首先使用  Adobe Premiere Pro  将视频每一帧转成图片
  • 然后通过 Ascgen2 将上一步生成的图片转换为 ASCII 文本图形(字符化),如下图所示


image.png


  • 最后将生成的 ASCII 文本图形,通过 Adobe Premiere Pro 以序列帧的方式导入


这种方式适用于所有人,但是费电脑,因为 Adobe Premiere Pro 对电脑的配置有要求,另外 Adobe Premiere Pro 是收费软件,如果对这种方式感兴趣的小伙伴,可以在后台回复,我会在出一期教程。今天这篇文章主要介绍如何通过代码实现字符视频。


通过代码实现字符视频



这里我直接使用开源库中的 python 脚本 video2chars.py


git.1024dhl.com/https://git…


PS:前缀 git.1024dhl.com 是 GitHub 的加速器,在 GitHub 地址前面添加这个前缀,提高 GitHub 访问速度和下载速度,我会在后面的文章和视频中介绍


想要运行上面的 python 脚本,还需要安装 opencv-python,执行下面的命令即可安装。


pip3 install opencv-python===3.4.13.47 -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com


注意这里需要指定 opencv-python 版本号,如果不指定默认安装最新版本,最新版本无法正常编译。我将安装过程中遇到的错误,做了一个汇总,放在文末了,如果你在安装过程中遇到了问题,可以在评论区分享。


opencv-python 安装成功之后,执行下面命令,运行 python 脚本即可。


pthton3 video2chars.py


我将安装过程中遇到的错误,做了一个汇总,如果你在安装过程中遇到了其他问题,可以在评论区分享,一起讨论。


安装 opencv-python 遇到的错误


错误一


ERROR: No matching distribution found for numpy


出现这个问题,我猜测是因为国内网络环境的原因,通过 -i 指定 aliyun 的仓库下载即可。


pip3 install opencv-python===3.4.13.47 -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com


错误二


ERROR: Could not build wheels for opencv-python which use PEP 517 and cannot be installed directly


上面的错误,是因为没有指定 opencv-python 版本号,默认使用最新版本导致的,执行下面命令即可解决。


pip3 install opencv-python===3.4.13.47 -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com


如果有帮助点个赞就是对我最大的鼓励


欢迎关注公众号:ByteCode,分享有趣硬核原创内容


最后推荐长期更新和维护的项目:


  • 个人博客,将所有文章进行分类,欢迎前去查看 hi-dhl.com
  • KtKit 小巧而实用,用 Kotlin 语言编写的工具库,欢迎前去查看 KtKit
  • 计划建立一个最全、最新的 AndroidX Jetpack 相关组件的实战项目以及相关组件原理分析文章,正在逐渐增加 Jetpack 新成员,仓库持续更新,欢迎前去查看 AndroidX-Jetpack-Practice
  • LeetCode / 剑指 offer / 国内外大厂面试题 / 多线程题解,语言 Java 和 kotlin,包含多种解法、解题思路、时间复杂度、空间复杂度分析


image.png



近期必读热门文章



目录
相关文章
|
8月前
|
算法 C++ 容器
【C++STL基础入门】list改、查操作
【C++STL基础入门】list改、查操作
734 0
vc入门宝典十二(调用其它程序)
vc入门宝典十二(调用其它程序)
|
数据管理 索引
零基础VB教程023期:list控件使用-求最值问题解法
零基础VB教程023期:list控件使用-求最值问题解法
151 0
Java小白翻身教程-链表结构与编译大法(3)
D盘下面的tool文件夹已经有三个工具类了(其实是两个,CustNode是为了TuziLinkedList服务的),我们这一节来进行打包,这样的好处就是不用每次编译都把tool里面的类也带上了。
|
IDE Java 开发工具
Java小白翻身教程-链表结构与编译大法(4)
tools.jar是刚打出来的工具包,现在把它导入项目。
Java小白翻身教程-链表结构与编译大法(1)
咳咳,我是小白,没错,主线剧情又回来了。现在我遇到麻烦了,老板要我设计一个类,可以用来保存多个客户的资料。
114 0
|
C++
AcWing语法基础课笔记 第二章 printf语句与C++中的判断结构
学习语言最好的方式就是实践,每当掌握一个新功能时,就要立即将这个功能应用到实践中。 ——闫学灿
109 0
|
编译器 C语言
『C语言从入门到进阶』第 ① 期 - 分支语句
『C语言从入门到进阶』第 ① 期 - 分支语句
101 0
|
Java 测试技术
剑指offer第二版Java代码,参考对应的LeetCode题目
剑指offer第二版Java代码,参考对应的LeetCode题目
|
Java
Lambda基本使用方法(二)——再看不懂我找不到女朋友
Lambda基本使用方法(二)——再看不懂我找不到女朋友
99 0