写点什么

使用 python 玩转文字类视频

作者:Geek_bbf276
  • 2022 年 7 月 26 日
  • 本文字数:2039 字

    阅读完需:约 7 分钟

使用python玩转文字类视频

网上有很多那种只有文字的视频,基本是都是一段文字,加上背景音乐,定时显示几个词语;好几次刷到这些视频,想到应该可以使用 python 生成;

基本原理

1、读取文本获取分词或分段列表2、通过分词列表生成文字素材视频列表3、通过文字素材生成视频4、视频合并音频
复制代码

安装需要用到的库:

安装第三方库的方式有很多种,这里推荐使用 pip;


pip 是 Python 的包安装程序。其实,pip 就是 Python 标准库(The Python Standard Library)中的一个包,只是这个包比较特殊,用它可以来管理 Python 标准库(The Python Standard Library)中其他的包。pip 是一个命令行程序。 安装 pip 后,会向系统添加一个 pip 命令,该命令可以从命令提示符运行。


首先需要先安装 pip:


  • 安装 python; 这个是必须安装的;

  • 下载 pip:


官网地址:https://pypi.org/project/pip/#downloads; 下载完毕后,解压


  • 打开命令行窗口,进入到 pip 解压后的目录;执行代码


python3 setup.py install

进行安装,安装完成后,将 pip 加入到系统环境变量中


  • 验证打开命令行窗口,输入 pip list 或者 pip3 list


安装分词库 jieba


  • jieba 是一款优秀的 Python 第三方中文分词库,支持三种分词模式:


精确模式:试图将语句最精确的切分,不存在冗余数据,适合做文本分析全模式:将语句中所有可能是词的词语都切分出来,速度很快,但是存在冗余数据搜索引擎模式:在精确模式的基础上,对长词再次进行切分


  • jieba 的安装方式比较简单,使用 Ctrl+R 打开命令行窗口,执行命令:

  • pip install jieba 等待安装成功(需要联网)

    验证是否安装成功;打开 python 交互窗口,引入 jieba


import jieba


安装视频处理库:moivepy


  • MoviePy 是一个用于视频编辑的 python 模块,你可以用它实现一些视频剪辑,视频拼接等基本操作,还可以实现视频合成;MoviePy 使用 ffmpeg 读取、导出视频和音频文件,使用 ImageMagick 生成文本和输出 GIF 文件。Python 的数字库 Numpy 保证了不同媒体的处理。高级效果和增强使用了 Python 的许多图像处理库(PIL、Scikit-image、scipy 等)

  • 安装 moviepy 前先把 Numpy,tqdm,imageio,imageio-ffmpeg 几个包安装符合要求的版本,如遇到版本不够,需要先卸载,在重新安装;

  • 部分 MoviePy 依赖 python 库有也会在安装 MoviePy 的时候自动安装;未安装的库会有提示信息,提醒用户提前安装;

  • 安装 moviepy:使用 pip 方式安装最简单,推荐使用;打开命令行窗口,执行命令:


pip install moviepy 运行以上代码,也会安装所有 movicepy 依赖的库;



编码实现:

  1. 实现分词功能函数导入 jieba 库:

  2. import jieba

  3. 传入文本文件地址,读取文本内容使用 jieba.lcut()方法就行分词,获取分词列表也可以按行分词,不是 jieba 库;返回分词列表,给调用者


import jiebadef getSplitWord(filepath,word_split=True):    '''读取文本文件,获取分词,或者分行'''    str_text = '没有文本'    with open(filepath,'r',encoding='utf-8') as f:        str_text = f.read()
if word_split: seg_list = jieba.lcut(str_text) punct = set(''':!),.:;?]}''') word_list = list(filter(lambda x: x not in punct, seg_list)) else: word_list = str_text.split('\n') word_list = [x for x in word_list if len(x)>0] #去除空白行 return word_list
复制代码


  1. 根据分词列表生成文字素材;


主要用到 movirpy 中的 TextClip


  from moviepy.editor import TextClip
复制代码


为防止中文乱码,可以使用以下代码打印出支持的字体列表
> print(TextClip.list('font'))
具体代码:
复制代码


  def genTextClip(word_list,width=360,height=640):    '''生成文字视频素材'''    clips = []    text_start = 0    for word in word_list:        #print(str(text_start))        text_clip = TextClip(            word,            fontsize=width // 6,            color='white',            size=(width, height),            method='caption',            font=r"SimHei")\            .set_start(text_start)\            .set_end(text_start + 0.8)        text_clip = text_clip.set_pos('center')        clips.append(text_clip)        text_start = text_start + 0.8    return clips
复制代码


生成指定分辨率的文字素材列表,以便后续合成使用;
复制代码


  1. 合成文字素材(添加音频):

  2. 具体参考注释:


  from moviepy.editor import TextClip,AudioFileClip,CompositeVideoClip  # 合成视频方法,参数素材列表,音频,输出地址  def compileVideo(clips,music,output):  #合并文字素材    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)
复制代码


  1. 执行调用,传递参数,生成 视频

发布于: 4 小时前阅读数: 20
用户头像

Geek_bbf276

关注

还未添加个人签名 2022.07.26 加入

还未添加个人简介

评论

发布
暂无评论
使用python玩转文字类视频_Geek_bbf276_InfoQ写作社区