让Python代码和迈克杰克逊一起跳舞

编程入门 行业动态 更新时间:2024-10-22 13:59:15

让Python代码和<a href=https://www.elefans.com/category/jswz/34/1716898.html style=迈克杰克逊一起跳舞"/>

让Python代码和迈克杰克逊一起跳舞

项目环境

语言: Python3

工具:Pycharm

工具准备

ffmpeg,刚才说的处理视频的程序,可去官网下载.html#build-windows。

PIL 包:Python 的图形处理库。

numpy 包:Python 的一种开源的数值计算扩展,可用来存储和处理大型矩阵。

 

程序结构

我写了三个 py 文件,一个用来把视频转换为图片,一个用来把图片转为编码,最后一个来做最后的执行。

视频处理

下面的 ffmpeg 程序后面的几个参数我解释一下,-i 后面需要指定输入的文件名。-f 指定格式(音频或视频格式)。-vframes 设置转换多少桢(frame)的视频。-ss 从指定的时间(s)截图。

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('图片收集结束!!!')

用这个函数获取视频的每帧图片,给出的视频存放路径和获取图片的路径调用此函数就可以获取视频每帧的图片,我设置了每 0.1 秒保存一张图片。

图片转换

用 convert('L') 把图片转换为为二值图像,非黑即白。但是它每个像素用 8 个bit 表示,0 表示黑,255 表示白。

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')

    for row in data:

        for pixel in row:

            if pixel > 127:

                f.write('1')

            else:

                f.write(' ')

        f.write('\n')

    f.close()

执行这个函数不会有数据返回,用下一个 go.py 文件导入调用才行。

控制输出

调用上个函数 image2txt,图片转换为编码。

defgetTxt(imagePath, txtPath):

img_count =1

whileimg_count <= len(os.listdir(imagePath)):

imageFile = imagePath + str(img_count) +'.png'

txtFile = txtPath + str(img_count) +'.txt'

image2txt.image2txt(imageFile, txtFile)

print('MJ舞蹈加载中: '+ str(img_count) +'%')

img_count +=1

通过 os.system('cls') 控制屏幕的及时清除,以便及时显示下一帧图片的编码。

def play(txtPath):

txt_count =1

whiletxt_count <=len(os.listdir(txtPath)):

os.system('type '+ txtPath + str(txt_count) +'.txt')

txt_count +=1

os.system('cls')

给出编码文件路径和图片路径,执行函数。

txt_dir_path =r'D:\MJ\mjtxt'+'\\'

img_dir_path =r'D:\MJ\mjimages'+'\\'

getTxt(img_dir_path, txt_dir_path)

play(txt_dir_path)

收集完视频图片后在 cmd 控制台执行 go.py 文件,编码出现后点击视频播放就能达到刚才视频中的效果了。

你们可以用自己的视频去做,视频背景固定的话效果更好。

在公众号回复「jacksondm」获取源码。

写在最后

方法教给大家了,视频素材可以优化,大家可以自己收集好的视频素材,发到朋友圈,让代码骚动起来!

 

更多推荐

让Python代码和迈克杰克逊一起跳舞

本文发布于:2024-03-07 04:53:39,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1716899.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:迈克   杰克逊   代码   Python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!