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

2024-03-11 23:04

本文主要是介绍我用 Python 做了个小仙女代码蹦迪视频,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿遍又亿遍,久久不能离开!

看着仙紫小姐姐的蹦迪视频,除了一键三连还能做什么?突发奇想,能不能把小仙女的蹦迪视频转成代码舞呢?

说干就干,今天就手把手教大家如何把跳舞视频转成代码舞,跟着仙女姐姐一起蹦起来~

视频来源:

一、核心功能设计

总体来说,我们需要分为以下几步完成:

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 本地保存路径 视频链接 

图片

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

 

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 osimport reimport shutilimport cv2from PIL import Imageimport 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 + ' 加入视频\n')        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')

至此,小仙女跳舞视频转成代码舞就完成啦~

大家可以一起来欣赏下喔

这篇关于我用 Python 做了个小仙女代码蹦迪视频的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/799354

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该