用 Python 自动生成快闪文字视频
今天我们来教大家
用 Python 自动生成快闪文字视频
最出名的快闪文字视频
当属苹果16年的广告了
文字搭配着音乐节奏闪现
效果简单又震撼
虽说这两年好像已经被做烂了
前两天出去吃个烤串发现店家的广告都是快闪类型的
但是如果真的想做其实还有点麻烦
不管你是用PPT还是Premier
都得慢慢对齐鼓点节奏
做一个视频怕是要循环这首歌上百遍
做完就不想再听到这首歌了
效果堪比把歌曲设为早晨的闹钟
今天!
悦创来帮一下各位苦逼的视频从业人员
我们用万能的Python
自动生成快闪文字视频!
就算老板要求做两小时的快闪文字视频
都不用害怕了!
首先我用非常出名的一首鬼畜来尝试
改革春风吹满地
原作品为小可儿在B站创作的
https://www.bilibili.com/video/av19390801
可以点击阅读原文观看
然后我们看看由程序自动找鼓点生成的快闪文字视频
上面视频当中
所有的鼓点都是由程序自动找到的
视频的生成也是全部由程序完成
唯一需要手动操作的就是
将文字按照需要切分出来
其实这一步也可以省略
比如下面这个视频
我利用分词模块
将这篇新闻
https://news.163.com/19/0618/20/EHVSFA1J0001875P.html
用快闪文字的方式
呈现出来
这个新闻呈现的方式
是不是很带感呢
当然如果每篇新闻都这么看
估计得累死……
如果你想直接获取这个快闪文字的Python代码
可以在后台回复:快闪文字
接下来我们一步步简单讲解这个代码是如何实现的
首先我们需要用到的模块有
librosa
moviepy
jieba
click
其中
librosa用来分析鼓点节奏
moviepy用来生成视频
jieba用来分词
click用来制作命令行工具
首先导入我们需要的模块
import librosa
from moviepy.editor import TextClip, CompositeVideoClip, AudioFileClip
import jieba
import click
接下来定义我们的主函数main()
其中输入参数有6个
width: 生成视频的宽度
height: 生成视频的高度
text: 存有文字的文本文件地址
music: 背景音乐
word_split: 是否自动分词(不自动分词就按换行切分)
output: 生成视频的文件名
同时我们利用click来帮我们
将这个python文件做成命令行工具
click的用法如下
具体可以看github
https://github.com/pallets/click
于是我们的main()函数变成下面这样
@click.command()
@click.option('--width', prompt='Width', default=360, help='The width of video clips')
@click.option('--height', prompt='Height', default=240, help='The height of video clips')
@click.option('--text', prompt='Text file', default='text.txt', help='The source text file')
@click.option('--music', prompt='Music file', default='改革春风吹满地.mp3', help='The music file')
@click.option('--word_split', prompt='Split words', default=False, help='Split words or not')
@click.option('--output', prompt='Output file', default='FlashText.mp4', help='The output file name')
def main(width, height, text, music, word_split, output):
其中prompt参数表示运行程序时会弹出的输入提示
default为默认值
即用户直接回车时选取的值
接下来在main()函数里
我们完成所有的事情
首先读入存有文字的文本文件
with open(text, 'r', encoding='utf-8') as f:text_str = f.read()
然后我们根据用户选择来看是否要分词
if word_split:seg_list = jieba.lcut(text_str)punct = set(''':!),.:;?]}¢'"、。〉》」』】〕〗〞︰︱︳﹐、﹒﹔﹕﹖﹗﹚﹜﹞!),.:;?|}︴︶︸︺︼︾﹀﹂﹄﹏、~¢々‖•·ˇˉ―--′’”([{£¥'"‵〈《「『【〔〖([{£¥〝︵︷︹︻︽︿﹁﹃﹙﹛﹝({“‘-—_…/\\''')word_list = list(filter(lambda x: x not in punct, seg_list))else:word_list = text_str.split('\n')
这里当word_split为True时
我们用jieba.lcut(text_str)获得分词后的列表
类似下图这样
接下来我们用两句话来剔除掉
分词后的列表中的标点符号
其中最主要就是用filter()函数
结合lambda来剔除
算是一个比较简单的剔除符号的方法
而如果word_split为False
那么我们直接将文档以换行符来切分
完成文字的分割以后
我们就来分析音乐鼓点
这里librosa就帮上大忙了
librosa是个非常强大的Python模块
可以分析音频的各种信息
这里我们用到它的beat_track方法
y, sr = librosa.load(music)tempo, beats = librosa.beat.beat_track(y=y, sr=sr)beat_times = list(librosa.frames_to_time(beats, sr=sr))beat_times.append(beat_times[-1] + 1)
最终我们会得到一个beat_times列表
里面包含了每个鼓点的时间
同时可以注意到最后一行
beat_times.append(beat_times[-1] + 1)
这里我将列表最后一位重复了一下
并往后偏移1秒
主要是方便我们后面处理最后一个鼓点的视频片段
得到了鼓点时间列表以后
我们来开始制作每个文字视频片段
clips = []for index, beat_time in enumerate(beat_times[:-1]):if index >= len(word_list):breakprint(f'{index + 1}/{len(beat_times)}——{word_list[index]}')text_clip = TextClip(word_list[index],fontsize=width // 8,color='white',size=(width, height),method='caption',font='msyhbd.ttc')\.set_start(beat_time)\.set_end(beat_times[index + 1])text_clip = text_clip.set_pos('center')clips.append(text_clip)
这里我们用到moviepy
moviepy是我个人非常喜欢的一个python模块
一个非常强大的python视频制作模块
以后有机会再多讲讲这个模块的使用
这里我们用到了moviepy的文字片段
TextClip()
里面第一个参数是具体的文字
然后可以设置字体大小、颜色等
method='caption'是表示这个文字是标题类
当TextClip设置为标题类时
我们可以同时设置size
当文字宽度超过size时会自动换行
然后可以直接链式调用两个方法
set_start()和set_end()
用来设置这个视频片段的起始和结束时间
这里我们就正好设置为某个鼓点和下一个鼓点之间的时间
这样我们就完成了每个文字片段视频的制作
最后来生成完整的视频
final_clip = CompositeVideoClip(clips)audio_clip = AudioFileClip(music)final_video = final_clip.set_audio(audio_clip)final_video.write_videofile(output,fps=30,codec='mpeg4',preset='ultrafast',audio_codec="libmp3lame",threads=4)
利用moviepy的CompositeVideoClip
来合成多个视频片段clip
用AudioFileClip制作音频片段
然后合成
最后直接用write_videofile()方法生成完整视频
这个方法里可以设置视频、音频编码
以及帧率FPS
最后加上
if __name__ == '__main__':main()
就大功告成啦!
这样以后想要制作简单的快闪文字视频
只需要运行这个python文件
根据提示输入信息
就可以等着程序帮你搞定啦
是不是超方便
本期悦创小课堂到这里就结束了啦
欢迎关注AI悦创
我会继续教大家一些好玩有趣的脑洞项目
用 Python 自动生成快闪文字视频相关推荐
- 使用Python自动生成带有图表文字的PDF(附带万字完整代码)
目录 1.前言 2.数据取数与Reportlab包说明 3 .导入PDF生成相关包 4.初始化函数封装
- 用Python自动生成NBA巨星生涯数据曲线
1.序 之前写过一个用 python 自动生成球员职业生涯数据的程序(原文请关注本人公众号),大家的反响很好,我也感到很欣慰.有问我怎么做的,如何学 python 的,也有提建议说集成到 web 里面 ...
- 用Python自动生成数据日报!
今天聊聊怎么用Python自动生成数据日报! 其实我觉得蛮简单,核心就是你组装好日报的内容模板,然后将变化的量交给python去填充,需要用到的基本就是python处理excel.word和ppt等相 ...
- Python自动生成代码 - 通过tkinter图形化操作生成代码框架
Python自动生成代码 - 通过tkinter图形化操作生成代码框架 背景 脚本代码 Demo_CodeGenerator.py display.py FileHandler.py: 脚本运行结果: ...
- python新建word文档_使用Python 自动生成 Word 文档的教程
当然要用第三方库啦 :) 使用以下命令安装: pip install python-docx 使用该库的基本步骤为: 1.建立一个文档对象(可自动使用默认模板建立,也可以使用已有文件). 2.设置文档 ...
- python自动生成和读取word_使用Python自动生成Word文档的教程
当然要用第三方库啦 :) 使用以下命令安装: pip install python-docx 使用该库的基本步骤为: 1.建立一个文档对象(可自动使用默认模板建立,也可以使用已有文件). 2.设置文档 ...
- 情人节到了,用Python自动生成520照片墙吧~
导语 情人节到了,用Python自动生成520照片墙可好,没有对象的自己看 相关文件 关注微信公众号 Python日志, 公众号内回复'照片墙'获取. 视频教学 视频教学:哔哩哔哩照片墙制作 开发工具 ...
- FCPX插件:快闪文字排版动画Stomp Typography
Stomp Typography这是一组快闪文字排版动画fcpx插件,可以为大家的视频添加闪烁的文字排版元素,非常适用于展示您的个人品牌.照片.视频.商业幻灯片.商业广告.活动开场白.演示文稿.电视节 ...
- python自动生成word报告
python自动生成word报告 运用zipfile解压docx并替换模版内容 本文章主要介绍根据所提供的word模版,运用python zipfile库将word解压为xml格式,并通过文字替换自动 ...
- python自动汇总表格_用Python自动生成Excel报表
作者 / 来源:林骥(ID:linjiwx) 01 安装和导入模块 以 Python 中的 openpyxl 模块为例,它能够读取和修改 Excel 文件,如果你还没有安装,可以通过以下命令进行安装: ...
最新文章
- 【3DMax教程】三维产品可视化视频教程 3d Products Visualization Course
- 连接LilyPad之Windows平台的驱动
- VTK:模型之Spring
- 如何使用SAP Cloud for Customer OData服务创建Lead
- java 字符串数组定义_「string数组」string 数组怎么定义 - seo实验室
- [软技能] 在前后端分离项目里,请说说前端传递的token的流程?
- Docker安装禅道项目管理平台zendao-v11.6.x
- “跨界养猪”这件事,华为正式回应了
- linux 反汇编目标文件,用于查看目标文件或可执行文件的组成信息的命令:objdump命令...
- 解决:fatal: not a git repository (or any of the parent directories): .git的问题
- python数据分析-《Python数据分析与数据化运营》电子版
- html5小游戏代码-2048游戏
- 简单记录如何通过 VS Code 和 Auto Build Marlin编译和更新marlin固件
- 基于SSM的医院科室人员管理系统
- 云服务器htdocs文件夹在,htdocs文件夹
- 免服务器软件库源码实现超级管理动态发布会员系统卡密系统充值对接卡密网软件发布板块后台功能 软件商店1.3.1
- OSChina 周二乱弹 —— 好支威有希
- 这篇文章就是要让你入门java多线程【多线程入门】
- python拟合非线性模型_python-绘制分段拟合到非线性数据
- VMware安装centos虚拟机