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

一、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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 使用ILogger接口编写日志

.NET 有几种不同的日志记录和跟踪工具,还有许多不同的第三方日志记录程序。尝试将一个应用程序从一种日志记录技术更改为另一种日志记录技术不是一件容易的事情,因为日志记录 API 的使用分布在整个源代码中。要使日志记录独立于任何日志记录技术&#xf…

html页面调用php常量,js中的常量变量以及html文档三种引入js的方式

js 是基于事件驱动的异步单线程的脚本编程语言,它的全称是 JavaScript,虽然里边有个 java 字样,但是和 java 编程语言一点关系都没有。它是一种脚本语言,基于解释器执行,它是边解释便执行的语言。浏览器控制台 Console…

Android之ScrollView设置了高度(android:layout_height=“match_parent“)但里面的组件不能充满问题

1 问题 写了ScrollView控件,设置了高度(android:layout_height"match_parent"),但是里面的组件不能填充它,感觉就像ScrollView高度设置成了wrap_content 2 解决办法 在ScrollView里面添加如下属性即可 android:fillViewport&quo…

【ArcGIS风暴】基于ArcGIS空间分析功能研究渭河流域镇驻地空间分布格局

【内容提要】:基于ArcGIS平台,借助空间分析的方法,用空间平滑法(基于移动搜索法FAC和核估计)分析渭河流域镇驻地的分布特征。 实验过程 1. 加载数据 渭河流域的居民点(Resident_point.shp),DEM(等高线)、水系(线)、道路(线)空间数据,如下图所示。

基于iSroll 5.0实现的上拉加载和下拉刷新插件

Updownload.js 基于iSroll 5.0实现的上拉加载和下拉刷新插件 移动端效果比较好,开发者工具打开后,需要刷新下页面。 [演示地址:] https://chenyk2016.github.io/upDownLoad/demo.html [github地址:] https://github.com/chenyk2016/upDownLoad/ 效果图 1…

[小白进] 大佬们学习为什么简单?小白该如何学习?学历不高如何找工作?副业很好赚?了解后少走弯路

一、前言 对于新手来说,最开始学习编程的难度不亚于学天书,那为什么有经验的程序员在接触一门新技术时能够快速的上手并且完成一些需求的开发呢? 有些人可能看了这个问题觉得我在说废话,“有经验那不快那怎么才快?”…

Chrome如何离线安装crx文件

2019独角兽企业重金招聘Python工程师标准>>> 在Chrome浏览器的谷歌网上应用商店Chrome Web Store上点击应用安装按钮「添加至Chrome」,变成下载文件。把下载文件一拖进浏览器也不能安装。下面是如何离线安装crx文件的方法: ①点击Google Chr…

新坑

最近准备多看一些论文辣,先大体整理一下要看的东西浅谈启发式思想在信息学竞赛中的应用后缀自动机及其应用浅谈分块在一类在线问题中的应用浅谈图的匹配算法及其应用Dp的一些优化技巧对置换群有关算法的初步研究线段树在一类分治问题上的应用慢慢填吧转载于:https:/…

【Envi风暴】Envi 5.1平台下植被覆盖度(VFC)的遥感估算

【导读】植被覆盖度是指植被(包括叶、茎、枝)在地面的垂直投影面积占统计区面积的百分比。常用的计算方法有:经验模型法、植被指数法、像元分解模型法、FCK模型法、决策树分类法和神经网络法。本文利用像元二分模型计算植被覆盖度(VFC)。 一、数据 张掖市Landsat TM影像(…

基于.NetCore开发博客项目 StarBlog - (6) 页面开发之博客文章列表

系列文章基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客?基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目基于.NetCore开发博客项目 StarBlog - (3) 模型设计基于.NetCore开发博客项目 StarBlog - (4) markdown博客批量导入基于.N…

时间序列matlab代码,MATLAB在时间序列建模预测及程序代码.pdf

第二十四章 时间序列模型时间序列是按时间顺序排列的、随时间变化且相互关联的数据序列。分析时间序列的方法构成数据分析的一个重要领域,即时间序列分析。时间序列根据所研究的依据不同,可有不同的分类。1.按所研究的对象的多少分&#xff0…

Android之安卓8.0版本以上手机开启热点提示Caller already has an active LocalOnlyHotspot request

1 问题 在Android8.0手机开启了热点,关闭页面再次打开热点, /*** 开启Android8.0版本手机以上的热点,热点名字和密码都是随机的。*/fun initWifiApGreaterThanEight(context: Context) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {var wifiManager:WifiMana…

JavaScript基础和js概括

js内容概括: Html 结构化 CSS 样式 JavaScript 行为交互 01.JavaScript基础 02.JavaScript操作BOM对象 03.JavaScript操作DOM对象 ***** 04.JavaScript的面向对象 -------------------------------------- 05.jQuery (js) .css .js 06.jQuery选择器 …

《看聊天记录都学不会C语言?太菜了吧》(12)循环有多容易?你看一眼就怀...

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我,若你是真心学习可以送你书籍,指导你学习,给予你目标方向的学习路线,无套路,博客为证。 本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖…

***ECharts图表入门和最佳实践

ECharts数据图表系统? 5分钟上手! 【ECharts简介】 ECharts开源来自百度商业前端数据可视化团队,基于html5 Canvas,是一个纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数…

【经典回放】多种语言系列数据结构线性表之一:顺序表

一、实验任务描述 建立线性表的ADT后,编程完成: 1 用C语言完成一个顺序表结构; 2 为顺序表完成追加、删除、插入、查找的功能; 3 建立一个链表的结点; 4 完成链表的追加、删除、插入功能; 5* 用C#完成一个结点的类; 6* C#完成链表的追加、删除、插入功能的类; 7* C#编写…

原型继承+原型链 + 对象继承发展

一、原型继承: 1、说起原型继承,就要先由构造函数创造对象说起,首先了解构造函数内部基本原理: (1).在函数体最前面隐式的加上this {} (2).执行 …

Kotlin之?和!!最简单的理解

一、? 1&#xff09;、?在声明对象时&#xff0c;把它跟在类名后面&#xff0c;表示这个类允许为null var list: ArrayList<String>? null 2&#xff09;、调用对象时&#xff0c;把它跟在对象后面&#xff0c;表示如果为null程序就会视而不见&#xff0c;比如我们…

WPF|一个比较简单带点设计的登录界面

阅读目录效果展示准备简单说明 源码结尾&#xff08;视频及源码仓库&#xff09;1. 效果展示欣赏效果&#xff1a;2. 准备创建一个WPF工程&#xff0c;比如站长使用 .NET 7[1] 创建名为 Login5 的WPF项目。找一张图片做为装饰&#xff0c;放登录表单左侧&#xff1a;添加Nuget…

Android插件基础之类加载器学习

记录学习java 加载器学习所获心得&#xff0c;逐步记录了解java加载器的过程。为了知悉android 插件化的实现原理&#xff0c;从而需要从头了解android加载apk&#xff0c;以及基础的java类加载的加载过程情况&#xff0c;为方便记录和记忆&#xff0c;故此将学习了解的过程记录…