python 生成二维码添加文字_用Python自动生成快闪文字视频

各位同学好久不见

又来到毕老师小课堂时间了

今天我们来教大家

用Python自动生成快闪文字视频

最出名的快闪文字视频

当属苹果16年的广告了

https://www.bilibili.com/video/av6197763/

文字搭配着音乐节奏闪现

效果简单又震撼

虽说这两年好像已经被做烂了

前两天出去吃个烤串发现店家的广告都是快闪类型的

python 生成二维码添加文字_用Python自动生成快闪文字视频_第1张图片

但是如果真的想做其实还有点麻烦

不管你是用PPT还是Premier

都得慢慢对齐鼓点节奏

做一个视频怕是要循环这首歌上百遍

做完就不想再听到这首歌了

效果堪比把歌曲设为早晨的闹钟

今天!

毕老师来帮一下各位苦逼的视频从业人员

我们用万能的Python

自动生成快闪文字视频!

就算老板要求做两小时的快闪文字视频

都不用害怕了!

首先我用非常出名的一首鬼畜来尝试

改革春风吹满地

原作品为小可儿在B站创作的

https://www.bilibili.com/video/av19390801

然后我们看看由程序自动找鼓点生成的快闪文字视频

python 生成二维码添加文字_用Python自动生成快闪文字视频_第2张图片
https://www.zhihu.com/video/1124734415242416128

上面视频当中

所有的鼓点都是由程序自动找到的

视频的生成也是全部由程序完成

唯一需要手动操作的就是

将文字按照需要切分出来

其实这一步也可以省略

比如下面这个视频

我利用分词模块

将这篇新闻

https://news.163.com/19/0618/20/EHVSFA1J0001875P.html

用快闪文字的方式

呈现出来

python 生成二维码添加文字_用Python自动生成快闪文字视频_第3张图片
https://www.zhihu.com/video/1124734564881666048

这个新闻呈现的方式

是不是很带感呢

当然如果每篇新闻都这么看

估计得累死……

如果你想直接获取这个快闪文字的Python代码

FlashText代码

接下来我们一步步简单讲解这个代码是如何实现的

首先我们需要用到的模块有

  • 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的用法如下

python 生成二维码添加文字_用Python自动生成快闪文字视频_第4张图片

具体可以看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)获得分词后的列表

类似下图这样

python 生成二维码添加文字_用Python自动生成快闪文字视频_第5张图片

接下来我们用两句话来剔除掉

分词后的列表中的标点符号

其中最主要就是用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]):
    print(f'{index + 1}/{len(beat_times)}——{word_list[index]}')
    if index >= len(word_list):
        break
    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文件

根据提示输入信息

python 生成二维码添加文字_用Python自动生成快闪文字视频_第6张图片

就可以等着程序帮你搞定啦

是不是超方便

本期毕老师小课堂到这里就结束了啦

欢迎关注毕老师

我会继续教大家一些好玩有趣的脑洞项目

我是毕老师,依然会不定时给你们分享一些有趣好玩实用的东西,欢迎关注~

警察蜀黍!就是这个人!脑子简直有泡!还不赶紧关注一下!

python 生成二维码添加文字_用Python自动生成快闪文字视频_第7张图片

你可能感兴趣的:(python,生成二维码添加文字)