前言
上一篇,我们分享了给图片转成代码图片的源码,这次分享一个视频转代码动图的一个源码,需要有图像和动图像的一些基本知识。
图片来自网络
- 环境配置
python版本: 3.6.0
代码编辑工具:pycharm
录屏软件、控制台(win+r, cmd)
项目所需要的环境安装包
pip install opencv-python
第一步:导入相关的python包
# encoding:utf-8
import cv2
import os
cv2:是一个强大的图像、视频处理工具包。有兴趣做图像处理或视频处理,可以稍微研究一下openCV。
os: 这里使用它文件存储和清屏功能。
第二步:全局变量
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,"^`'. ")
char_len = len(ascii_char)
show_height = 40
show_width = 80
ascii_chat 是像素值转化的代码列表,show_height 和show_width 分别是最终转化动图的高和宽。 这里为了方便演示,就把它作为全局变量。如果是实际项目,就必须用配置文件或者从数据库中读取。
第三步:视频处理
def frame_process(video_path):
vc = cv2.VideoCapture(video_path) # 加载一个视频
if vc.isOpened(): # 判断是否正常打开
rval, frame = vc.read()
else:
rval = False
frame_count = 0
outputList = [] # 初始化输出列表
while rval: # 循环读取视频帧
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 使用opencv转化成灰度图
gray = cv2.resize(gray, (show_width, show_height)) # resize灰度图
text = ""
for pixel_line in gray:
for pixel in pixel_line: # 字符串拼接
text += ascii_char[int(pixel / 256 * char_len)]
text += "rn"
outputList.append(text)
frame_count = frame_count + 1
if frame_count % 100 == 0:
print("已处理" + str(frame_count) + "帧")
rval, frame = vc.read()
print("处理完毕")
return outputList
视频是由一帧帧图片组成,有些视频每秒有24帧图片、有些12帧图片,帧的数量取决于视频的质量。这里处理步骤是:
1 加载视频
2 循环读取每一帧图片
3 对图片进行大小重置、灰度转化、字符转换
4 结果保存在列表中
5 返回列表结果
第四步:打印结果
def output(outputList):
for frame in outputList:
os.system("cls") # 清屏
print(frame)
print()
print()
os.system("cls"): 表示把控制台所有信息清空。
模拟视频播放,一帧一帧地打印所有的图片。
第五步:主函数
if __name__ == '__main__':
# 在命令行中,运行效果更明显
video_path = '跳舞.mp4'
frame_list = frame_process(video_path)
output(frame_list)
print("OK")
随意在抖音上下载一个小姐姐的跳舞视频,作为函数的参数。
输入输出
打开控制台(Win+R),输入cmd,并进入到代码所在目录。运行命令: python 视频转代码.py,再利用录屏软件录制屏幕,导出动图GIF。
结语
不知不觉,代码库又多了一块砖。虽然代码对于老程序员来说,这代码 so easy, so simple。但是,对于新手而言,这就是一个非常好的练手小项目。不仅仅代码量少,更重要的是容易上手。如果大家有疑问,欢迎下方评论。未来编程的路还很长,放下你手中的手机,跟我们一下写代码吧!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。