首页 > 行业资讯 > 我用 Python 做了个小仙女代码蹦迪视频

我用 Python 做了个小仙女代码蹦迪视频

时间:2024-03-15 来源: 浏览:

我用 Python 做了个小仙女代码蹦迪视频

点击关注 Python架构师
Python架构师

gh_1d7504e4dee1

回复:python,领取Python面试题。分享Python教程,Python架构师教程,Python爬虫,Python编程视频,Python脚本,Pycharm教程,Python微服务架构,Python分布式架构,Pycharm注册码。

来源: blog.csdn.net/hhladminhhl/article/details/118463344
前言
最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿遍又亿遍,久久不能离开!
看着仙紫小姐姐的蹦迪视频,除了一键三连还能做什么?突发奇想,能不能把小仙女的蹦迪视频转成代码舞呢?
说干就干,今天就手把手教大家如何把跳舞视频转成代码舞,跟着仙女姐姐一起蹦起来~
视频来源:
<iframe allowfullscreen="" class="video_iframe rich_pages" data-cover="http%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FutD23ZXCiaX15x8KXanX13qIgIrRI1VZp2bJmBUZ3KmjWKOyFTMnHrxhRIjEkLabCXlde5S1N59fKJa8YIIAcvQ%2F0%3Fwx_fmt%3Djpeg" data-mpvid="wxv_1947452448302792704" data-ratio="2.025925925925926" src="http://www.cnmhg.com/e/admin126459646/showimg.php?url=https://mp.weixin.qq.com/mp/readtemplate?t=pages/video_player_tmpl&action=mpvideo&auto=0&vid=wxv_1947452448302792704" data-vidtype="2" data-w="2188" frameborder="0" style="border-radius: 4px;"></iframe>
一、核心功能设计
总体来说,我们需要分为以下几步完成:
1、从B站上把小姐姐的视频下载下来
2、对视频进行截取GIF,把截取的GIF进行ASCII字符转换
3、把转换的字符gif根据每一帧的顺序重命名排序
4、将排序后的帧gif转换为图片
5、将字符图片合并成视频
6、视频添加背景音乐
二、实现步骤
1. 下载视频

首先我们需要准备工作,安装you-get用来下载视频。

pip  install  you- get

安装完成后,通过you-get将视频下载到本地。
仙女姐姐蹦迪视频链接:https://www.bilibili.com/video/BV124411Q7iV

you- get  -o 本地保存路径 视频链接 

这样我们就把视频成功下载到本地了。

资源分享

点击领取:最全Python资料合集
2. 截取GIF并转换成ASCII字符
接下来我们要将下载的视频进行GIF截取,方法也比较多,用python也可以实现。
因为后面需要把GIF转成ASCII字符,截取的GIF时长尽量不能太长,所以这里就介绍通过迅雷播放器自带的gif截取工具,每次截取20s。
将每段截取出来之后, 可以按照顺序1 2 3将gif命名。
使用ASCII Animator将截取的 GIF每一帧转换成ASCII
我们可以通过设置每100个像素宽度的字符数修改转换的字符密集程度。输出类型可以选择动画ASCII(.gif)
我们可以在目录文件下找到temp文件,里面就是存储的每个gif中每一帧转换的ASCII的gif。下面我们就是需要处理这些ASCII的gif,可以将文件夹拷贝到python项目下面。
3. GIF重命名

老规矩,最开始我们把后面要用到的库全部导入。

import os import re import shutil import cv2 from PIL import Image import moviepy.editor as mpy

所有转换成功的ASCII的gif已经拿到了,为了后面我们将图片合并成视频,接下来我们就要把这些gif进行排序。

我们先从temp文件夹中读取,筛选出所有后缀名是 .gif 的,然后根据命名规则,将这些gif重命名,方便后面排序。

def   rename_gif () : file_list = os.listdir( "./temp" ) # 读取当前文件夹所有文件 # print(file_list) print( "检测到文件夹下图片:" ) n = len(file_list) num_list = [] num1 = num2 = 0 for i in range(n): s = str(file_list[i]) if s[ -4 :] == ".gif" : # 检查后缀 res = re.findall( r"d+" , s) if res[ 0 ] == ’1’ : num1 += 1 if res[ 0 ] == ’2’ : num2 += 1 src = os.path.join(os.path.abspath( ’./temp/’ ), s) # 原先的图片名字 dst = os.path.join(os.path.abspath( ’./temp/’ ), res[ 0 ] + ’-’ + res[ 1 ]+ ’.gif’ ) # 根据自己的需要重新命名 os.rename(src, dst) # 重命名,覆盖原先的名字 num_list.append(num1) num_list.append(num2) file_list = os.listdir( "./temp" ) # 读取当前文件夹所有文件 for i in range(n): s = str(file_list[i]) if s[ -4 :] == ".gif" : # 检查后缀 res = re.findall( r"d+" , s) src = os.path.join(os.path.abspath( ’./temp/’ ), s) # 原先的图片名字 a = int(res[ 0 ]) -1 index = a*num_list[a -1 ] dst = os.path.join(os.path.abspath( ’./temp/’ ), str(index + int(res[ 1 ])) + ’.gif’ ) # 根据自己的需要重新命名 os.rename(src, dst) # 重命名,覆盖原先的名字

gif重命名之后,所有的gif都已经按照每一帧的顺序排好了。后面我们合成视频的时候,只要根据图片的名称来进行合并添加就可以了。
4. gif转换为图片jpg

接下来,我们要把按帧顺序排列的gif转换成jpg图片。

def gif2img (gif_path) : gifs = os.listdir(gif_path) gifs.sort(key=lambda x: int(x[ :- 4 ])) # 以名称字符串的数字从小到大排序 for gif in gifs: im = Image.open(gif_path+gif) # 打开gif格式的图片 im = im.convert( ’RGB’ ) if not os.path.exists( ’./img’ ): os.makedirs( ’./img’ ) for i, frame in enumerate(iter_frames(im)): frame.save( ’./img/’ + gif[ 0 :- 4 ] + ’.jpg’ , **frame.info) # 保存成jpg格式

5. 合成代码舞视频

图片合成视频,这里我们使用python-openvc模块实现,同样如果之前没有安装的小伙伴,需要先安装下。

pip install opencv-python

我们可以将图片文件夹的路径传入参数,还可以通过fps设置每秒多少张图片。

def   charts2video (img_path, video_path) : """将给定目录下的图片转成视频 Args: img_path: 图片路径 video_path: 输出视频的路径和名称 Returns: 图片转成的视频 """ images = os.listdir(img_path) images.sort(key= lambda x: int(x[: -4 ])) # 以名称字符串的数字从小到大排序   fps = 12 # 帧数 fourcc = cv2.VideoWriter_fourcc( ’M’ , ’P’ , ’4’ , ’V’ ) im = Image.open(img_path + images[ 0 ]) video_writer = cv2.VideoWriter(video_path, fourcc, fps, im.size) for img_i in images: frame = cv2.imread(img_path + img_i) print( ’开始将 ’ + img_i + ’ 加入视频 ’ ) video_writer.write(frame) # 注意:图片尺寸必须和视频尺寸一样,不然不会被加入视频中!!! video_writer.release()

6. 添加背景音乐
代码舞已经完成了,最后一步就是把视频中的背景音乐添加到代码舞中。我们使用的是moviepy 模块,截取原视频的背景音乐并保存,最后再将代码舞视频中插入音频保存。

def add_music () : # 读取代码视频 my_clip = mpy.VideoFileClip( ’asc.mp4’ ) # 截取背景音乐 audio_background = mpy.AudioFileClip( ’dance.mp4’ ).subclip( 0 , 60 ) audio_background.write_audiofile( ’bk.mp3’ ) # 视频中插入音频 final_clip = my_clip.set_audio(audio_background) # 保存最终视频 final_clip.write_videofile( ’char_video.mp4’ )

至此,小仙女跳舞视频转成代码舞就完成啦~
大家可以一起来欣赏下喔

<iframe allowfullscreen="" class="video_iframe rich_pages" data-cover="http%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FutD23ZXCiaX15x8KXanX13qIgIrRI1VZpBVjrJNNvqwDEibp4KsIQ4PnTor35wiclE6egWLuLGe50g7G9WZqN3JFQ%2F0%3Fwx_fmt%3Djpeg" data-mpvid="wxv_1947454292185939968" data-ratio="2.025925925925926" src="http://www.cnmhg.com/e/admin126459646/showimg.php?url=https://mp.weixin.qq.com/mp/readtemplate?t=pages/video_player_tmpl&action=mpvideo&auto=0&vid=wxv_1947454292185939968" data-vidtype="2" data-w="2188" frameborder="0" style="border-radius: 4px;"></iframe>

 
热门推荐
  • 用 Python 写了一个「表情包」,赚了250万
  • Pandas 教程-Pandas DataFrame.astype()
  • 程序员缺乏经验的 7 种表现!

下一条:返回列表
版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐