程序员不骚,那当什么程序员
前言
程序员在人们的映像中是一个高智商、但同时又很呆板的一个形象。今天我就教如何大家骚起来,可以说学会今天的教程,发到朋友圈,非常的酷。今天教给大家 python3 一个程序,用来读取一个 mp4 格式的视频,并以终端的形式输出出来。最后呈现的效果,真的相当的骚气。我们可以先看下最后的输出结果。
前期准备
这个程序有 3 个代码文件:getIamge.py、image2txt,py、play.py,两个存放图片和文本的文件夹,以及一个 mp4 视频。在运行之前首先要确定你是否已经安装了 PIL 与 numpy 第三方库,以及 ffmpeg 插件。
项目文件结构
PIL 和 numpy 可以通过 pip 来安装。而 ffmpeg 可以去官网下载(https://www.ffmpeg.org/download.html#build-windows)。打开官网对应你的系统,点击下面的图标,去下载。
安装好 ffmpeg,在配置下环境变量:右击我的电脑-属性-高级系统设置-环境变量-Path,加上「;d:\ffmpeg\bin」(你自己的安装路径)即可。
getImage.py
所需的第三库和 ffmpeg 安装好以后,就可以开始运行 python 代码。首先运行的是 getImage.py。getImage.py 是用于从视频中提取帧图片,提取的帧图片存放于「images/」文件夹,若文件夹中已存在帧图片可不运行该程序。若要调整每帧图片数可调整变量 crop_time 累加的数值,清空已存在的图片集,修改视频路径「videoPath」、帧图片目录路径「imagePath」,再运行 getImage.py。
getImage.py 代码:
importos
defgetImage(videoPath, imagePath):
img_count =1
crop_time =0.0
whilecrop_time <=15.0:
os.system('ffmpeg -i %s -f image2 -ss %s -vframes 1 %s.png'% (videoPath, str(crop_time), imagePath + str(img_count)))
img_count +=1
print('Geting Image '+ str(img_count) +'.png'+' from time '+ str(crop_time))
crop_time +=0.1
print('Image Collected')
if__name__ =='__main__':
videoPath ='E:/badapple/a/1.mp4'
imagePath ='E:/badapple/a/images/'
getImage(videoPath, imagePath)
image2txt.py
image2txt.py 用于将图片转化为一定尺寸的字符画,从「images/」文件夹中提取图片并转化为 txt 文本存放于「txt/」文件夹。默认要求的终端尺寸为 100x50 ,若屏幕不能支持该大小,可以将参数 charWidth 修改为自定义的每行显示字符数,调整后若运行 play.py 要求终端大小为 (charWidth)x(charWidth/2) 。参数值具体多少,没有一个固定的值,可以自己多尝试下。
注意:这个文件单独运行是没有任何反应的,因为在这个文件中只是定义了 getImage 函数,并没有去调用。具体的调用是在「play.py」中。
代码:
from PILimportImage
importnumpy
def image2txt(inputFile, outputFile):
im = Image.open(inputFile).convert('L')
charWidth =100
im = im.resize((charWidth, charWidth// 2))
target_width, target_height = im.size
data= numpy.array(im)[:target_height, :target_width]
f =open(outputFile,'w',encoding='utf-8')
forrowindata:
forpixelinrow:
ifpixel >127:
f.write('1')
else:
f.write(' ')
f.write('\n')
f.close()
play.py
「play.py」用于获取 txt 文本集与依次显示 txt 文本集,以达到在终端播放字符动画的效果。运行之前请修改视频目录「videoPath」、txt 文件夹目录「txt_dir_path」、images 文件夹目录「img_dir_path」。然后运行 play.py。
注意:如果你是苹果系统,那你还需要把代码中的「type」改成「cat」,window 的就不用改。即:
os.system('cat '+ txtPath + str(txt_count) +'.txt')
写在最后
我已经把对应的程序源码和视频文件上传到网盘上,你只需在后台回复「python代码」就可以获得。如果觉得这期的教程不错,欢迎点赞和转发到朋友圈。最后赶紧把代码下载下来,运行起来,录制一个视频,发朋友圈吧。
程序员也是可以骚起来的!