前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Python MoviePy 音视频开发零基础到实战] 一、用6条代码为你的视频裁剪以及添加水印

[Python MoviePy 音视频开发零基础到实战] 一、用6条代码为你的视频裁剪以及添加水印

作者头像
1_bit
发布2022-01-06 09:51:43
1.9K0
发布2022-01-06 09:51:43
举报
文章被收录于专栏:我的知识小屋

一、MoviePy 安装及配置

在 Python 有一个音视频开发模块 MoviePy,MoviePy 依赖于 FFmepg,使用 MoviePy 可以对音视频进行编辑;例如视频合成、视频处理、视频特效等。

在 Python 下直接使用 pip 工具进行安装即可:

代码语言:javascript
复制
pip install moviepy

如果是在 windows 系统下使用 MoviePy 还需要额外安装 ImageMagick,否则将会出现如下错误:

以上提示告诉我们的关键信息是我们可能没有安装 ImageMagick ,需要将其安装并且配置安装后的文件地址则可以正常使用。ImageMagick 可以搜索引擎搜索或者微信关注 [李兰清的代码小屋] 回复 ImageMagick 获取下载链接。

安装完 ImageMagick 后,我们打开 Python 文件目录搜索 MoviePy,找到 MoviePy 目录在其下文件中找到 config_defaults.py 文件。

打开该文件对其进行配置 ImageMagick 根目录下 magick.exe 所在的位置信息:

这样,之后在使用 MoviePy 将会省心很多。

二、MoviePy 基础播放

在 MoviePy 中有一个视频剪辑类 VideoFileClip,它继承于基类 VideoClip。我们可以使用 VideoFileClip 直接对某一视频或 GIF 进行加载:

代码语言:javascript
复制
clip = VideoFileClip(r"C:\Users\mx\Desktop\demo.mp4")
clip = VideoFileClip(r"C:\Users\mx\Desktop\demo.gif")

加载了视频对象后我们可以使用该对象的 subclip 方法对视频进行剪辑,subclip 方法接收两个参数 t_start 与 t_end,t_start 默认为 0 。t_start 表示对该视频截取片段从第几秒开始,t_end 表示结束的时间位置,例如如下代码:

代码语言:javascript
复制
clip = VideoFileClip(r"C:\Users\mx\Desktop\hmbb.mp4").subclip(10,20)

VideoFileClip 首先获取到了 hmbb.mp4 这个视频对象,随后调用 subclip 截取第 10 秒到第 20 秒的视频内容。如果想从视频末尾截取直接在 t_end 参数传入负数即可:

代码语言:javascript
复制
clip = VideoFileClip(r"C:\Users\mx\Desktop\hmbb.mp4").subclip(0,-2)

以上代码 0,-2 表示该视频从结尾裁剪 2 秒。最后将视频导出即可:

代码语言:javascript
复制
from moviepy.editor import *

clip = VideoFileClip(r"C:\Users\mx\Desktop\hmbb.mp4").subclip(10,22)
clip.write_videofile(r"C:\Users\mx\Desktop\myHolidays_edited.webm")

以上代码是这部分完整的代码,最终使用 write_videofile 导出媒体文件,可以在导出路径中填写视频的后缀名进行默认转码。

最终导出文件后将会出现一个 12 秒视频,为导出的结果:

我们还可以通过 volumex 方法更改视频对象的音量大小:

代码语言:javascript
复制
clip = clip.volumex(1.2)

三、MoviePy 文字添加

对视频添加文字可以使用 TextClip 类,该类创建时可以传入多个参数对需要创建的文字进行修饰,在此先简单的介绍几个基本传入参数。首先看看基本代码示例(在此注意,使用 TextClip 必须安装 ImageMagick,在 windows 操作系统上需要对其进行配置,配置方法查看第一点内容):

代码语言:javascript
复制
txt_clip = TextClip("I am 1_bit ",fontsize=70,color='white')

以上代码示例创建了 TextClip 对象,该对象的的第一个参数需要接收一个写入的字符串,该字符串则为添加到视频中的字符串,在 TextClip 类的原型中参数名为 txt;接下来在以上示例中传入了 fontsize 设置了其字体大小为 70,并且设置了颜色 color 为白色 white。那此时如何将该 TextClip 对象的文本添加至视频中呢?先不急,我们此时还要将该 TextClip 对象的位置进行设置,如何进行显示是非常必要的。查看示例:

代码语言:javascript
复制
txt_clip = txt_clip.set_pos('center').set_duration(3)

以上代码使用 txt_clip 调用 set_pos 方法设置该文本显示在视频的区域为 center 中部,而 set_duration 表示显示的次序时间,传入 3表示显示 3 秒。

接下来我们应该使用 CompositeVideoClip 类对两者进行装载。代码示例如下:

代码语言:javascript
复制
video = CompositeVideoClip([clip, txt_clip])

此时生成了一个 CompositeVideoClip 的对象 video,我们可以调用 video 中的 write_videofile 方法将装载后的视频进行输出,从而得到最终的结果。代码示例如下:

代码语言:javascript
复制
video.write_videofile(r"C:\Users\mx\Desktop\hi.webm")

在 write_videofile 后传入地址输出路径即可,最终将会出现一个输出视频。该部分完整代码如下:

代码语言:javascript
复制
from moviepy.editor import *

clip = VideoFileClip(r"C:\Users\mx\Desktop\hmbb.mp4").subclip(10,20)
clip = clip.volumex(10.2)

txt_clip = TextClip("I am 1_bit",fontsize=70,color='white')
txt_clip = txt_clip.set_pos('center').set_duration(10)

video = CompositeVideoClip([clip, txt_clip])
video.write_videofile(r"C:\Users\mx\Desktop\hi.webm")

三、TextClip 的其他参数设置

我们完成了基本的视频导入及输出后,我们可以在创建 TextClip 时传入更多的参数对需要显示的文字进行更深入的修饰。首先我们可以查看 TextClip 中 init 方法原型:

代码语言:javascript
复制
def __init__(self, txt=None, filename=None, size=None, color='black',
                 bg_color='transparent', fontsize=None, font='Courier',
                 stroke_color=None, stroke_width=1, method='label',
                 kerning=None, align='center', interline=None,
                 tempfilename=None, temptxt=None,
                 transparent=True, remove_temp=True,
                 print_cmd=False):

我们在此简单的对 bg_color、stroke_color、stroke_color 、stroke_width、kerning 进行讲解。

bg_color

bg_color 可以设置该文本内容的背景色,直接传参为指定颜色即可。代码示例如下:

代码语言:javascript
复制
txt_clip = TextClip("I am 1_bit",fontsize=70,color='white',bg_color="red")

导出后播放内容如下:

stroke_color 与 stroke_width

stroke_color 表示对文本描边的颜色,可以通过颜色标识进行设置。示例代码如下:

代码语言:javascript
复制
txt_clip = TextClip("I am 1_bit",fontsize=70,color='white',bg_color="red",stroke_color="green")

也可以通过 stroke_width 设置描边宽度,单位为像素。代码示例如下:

代码语言:javascript
复制
txt_clip = TextClip("I am 1_bit",fontsize=70,color='white',bg_color="red",stroke_color="green",stroke_width=2.1)

kerning

可以使用 kerning 设置字母间距,代码示例如下:

代码语言:javascript
复制
txt_clip = TextClip("I am 1_bit",fontsize=70,color='white',bg_color="red",stroke_color="green",kerning=2)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、MoviePy 安装及配置
  • 二、MoviePy 基础播放
  • 三、MoviePy 文字添加
  • 三、TextClip 的其他参数设置
    • bg_color
      • stroke_color 与 stroke_width
        • kerning
        相关产品与服务
        图像处理
        图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档