飞道的博客

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

412人阅读  评论(0)

一、MoviePy 安装及配置

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

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

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 进行加载:

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 表示结束的时间位置,例如如下代码:

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

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

clip = VideoFileClip(r"C:\Users\mx\Desktop\hmbb.mp4").subclip(0,-2)

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

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 方法更改视频对象的音量大小:

clip = clip.volumex(1.2)

三、MoviePy 文字添加

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

txt_clip = TextClip("I am 1_bit ",fontsize=70,color='white')

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

txt_clip = txt_clip.set_pos('center').set_duration(3)

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

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

video = CompositeVideoClip([clip, txt_clip])

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

video.write_videofile(r"C:\Users\mx\Desktop\hi.webm")

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

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 方法原型:

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 可以设置该文本内容的背景色,直接传参为指定颜色即可。代码示例如下:

txt_clip = TextClip("I am 1_bit",fontsize=70,color='white',bg_color="red")

导出后播放内容如下:

stroke_color 与 stroke_width

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

txt_clip = TextClip("I am 1_bit",fontsize=70,color='white',bg_color="red",stroke_color="green")

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

txt_clip = TextClip("I am 1_bit",fontsize=70,color='white',bg_color="red",stroke_color="green",stroke_width=2.1)

kerning

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

txt_clip = TextClip("I am 1_bit",fontsize=70,color='white',bg_color="red",stroke_color="green",kerning=2)


转载:https://blog.csdn.net/A757291228/article/details/115270366
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场