moviepy音视频剪辑:与大小相关的视频变换函数crop、even_size、margin、resize介绍

2023-05-16

☞ ░ 前往老猿Python博文目录 ░

一、引言

在《moviepy音视频剪辑:moviepy中的剪辑基类Clip详解》介绍了剪辑基类的fl、fl_time、fx方法,在《moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解》介绍了fl_image和subfx方法,
在《Python+moviepy音视频剪辑:视频帧数据的本质、Clip的fl方法进行变换处理的原理以及滚屏案例》及《moviepy音视频剪辑:使用fl_time进行诸如快播、慢播、倒序播放等时间特效处理的原理和可能遇到的坑》分别介绍了fl和fl_time进行视频剪辑变换的原理及使用方法。

实际上moviepy所有视频变换的方法都是以Clip的fl方法为基础衍生出来的,最后都会调用到fl方法实施真正的变换,只是变换处理的逻辑由上次方法提供,如fl_time就是针对剪辑的时间线进行变换、fl_image就是针对剪辑的内容进行变换,开发者也可以根据自己的需要实现自己的变换方法。

为了支持一些常规的变换处理,moviepy提供了一系列常用的变换函数,开发者可以直接使用这些方法进行变换,这些函数都在moviepy.video.fx包下,基本上一个函数就是一个文件,在moviepy.editor通过import moviepy.video.fx.all as vfx中将这些函数都加载到了vfx模块下,可以直接通过vfx.函数名方式调用,也可以通过VideoClip类+函数名直接调用,这是因为在moviepy.editor执行录入如下语句:

for method in [
    "afx.audio_fadein",
    "afx.audio_fadeout",
    "afx.audio_normalize",
    "afx.volumex",
    "transfx.crossfadein",
    "transfx.crossfadeout",
    "vfx.crop",
    "vfx.fadein",
    "vfx.fadeout",
    "vfx.invert_colors",
    "vfx.loop",
    "vfx.margin",
    "vfx.mask_and",
    "vfx.mask_or",
    "vfx.resize",
    "vfx.rotate",
    "vfx.speedx",
]:

    exec("VideoClip.%s = %s" % (method.split(".")[1], method))

将这些函数动态赋值给了VideoClip的同名实例变量,但这些实例变量是在moviepy.editor中定义的,因此在VideoClip的派生子类中不能这样使用。

这些函数的调用可以通过Clip的fx方法和VideoClip的subfx方法进行调用,具体调用语法请参考上面介绍的博文内容。

由于变换函数比较多,老猿将其以自己的标准分为了大小变换、时间变换、颜色变换、内容变换四个部分分别介绍,这种分法不一定非常对,比如有些部分的变换可能既和时间相关又和内容相关,两个归类都可以,大家就不必深究了。

本文主要介绍和剪辑大小相关的变换函数,包括crop、even_size、margin和resize。

二、crop函数

crop函数从剪辑中获取一个矩形区域的剪辑内容作为新的剪辑。

调用语法:

crop( clip, x1=None, y1=None, x2=None, y2=None, width=None, height=None, x_center=None, y_center=None)

参数:
  1. x1、y1:代表矩形区域左上角坐标
  2. x2、y2:代表矩形区域右下角坐标
  3. width、height:是宽度和高度
  4. x_center、y_center:表示x1的坐标为x_center-width/2,x2的坐标为x_center+width/2,y_center类似处理
数据计算逻辑

下面以横坐标系数据为例来说明矩形位置坐标(单位:像素)的计算逻辑:

  1. 横坐标系数据 x1、x2、width只要出现任意2个就能算出另外1个
  2. x_center如果出现,则可以计算出x1和x2
  3. 如果 x1、x2、width只出现1个或者都未出现,则x1、x2其中未出现的则取原剪辑的左上角或右下角的横坐标,因此单独出现width没有意义
    以上计算过程是有顺序的,只有前面的不满足才会执行后面的。纵坐标系数据同样如此。
案例:
if __name__=='__main__':
    threads = 8

    clipVideo = VideoFileClip(r"F:\video\WinBasedWorkHard_src.mp4").fx(vfx.crop,0,260)
    clipVideo.write_videofile(r"F:\video\crop.mp4", threads=threads)
    clipVideo.close()

原剪辑和执行代码后存储剪辑对应帧图像对比:
在这里插入图片描述
上图中左边为原视频的帧图像,右边为上述代码执行后视频帧的图像。

三、even_size函数

even_size函数是将剪辑的宽和高变成偶数,如果这两个值有为奇数的,则剪辑的帧在丢弃一行或一列像素。这是因为ffmpeg编码规则要求宽和高必须是偶数,相当于一个纠错处理的函数,并没有实际处理的意义。其调用参数就是一个clip。

四、margin函数

margin函数在剪辑的四周增加一个外边框。

调用语法如下:

margin(clip, mar=None, left=0, right=0, top=0, bottom=0, color=(0, 0, 0), opacity = 1.0)

说明:
  • mar:外边框的宽度,以像素为单位,如果mar指定了有效值,则 left、right、top、bottom设定值不起作用
  • left、right、top、bottom:边框左、右、顶和底的宽度
  • color:边框颜色
  • opacity :边框的不透明度,如果为0表示完全透明,1则完全不透明

增加边框的剪辑,其宽度和高度都会相应增加,因此剪辑大小会变大。

案例:
if __name__== '__main__':
    threads = 8
    clip = VideoFileClip(r"F:\video\WinBasedWorkHard_src.mp4").crop(0, 300, 540, 660)

    newclip = clip.fx(vfx.margin, 3, color=(0, 0, 255), opacity=0.5)
    newclip.write_videofile(r"F:\video\WinBasedWorkHard_margin.mp4", threads=threads)
视频效果:

在这里插入图片描述

五、resize函数

resize函数用于调整剪辑的大小,包括缩小或放大。

调用语法:resize(clip, newsize=None, height=None, width=None, apply_to_mask=True)
说明:
  • 使用resize必须先安装了OpenCV、Scipy或PIL图像处理模块中的一个,否则不能使用
  • newsize可以是返回新剪辑的宽和高二元组,也可以是大小变化的比例如0.5或2,还可以是一个和剪辑帧时间t相关的函数来返回前面2种值中的一个
  • width、height:剪辑的宽或高,二者指定一个,另一个会自动计算

六、小结

本文主要介绍和剪辑大小相关的变换函数,包括crop、even_size、margin和resize,相关的函数会在原剪辑大小的基础上进行大小变化,包括裁取其中一部分、给剪辑增加边框和调整剪辑大小等,返回新剪辑。

更多moviepy的介绍请参考《PyQt+moviepy音视频剪辑实战文章目录》或《moviepy音视频开发专栏》。

关于收费专栏

老猿的付费专栏《使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏加起来只需要19.9元,都适合有一定Python基础但无相关专利知识的小白读者学习。这2个收费专栏都有对应免费专栏,只是收费专栏的文章介绍更具体、内容更深入、案例更多。

收费专栏文章目录:《moviepy音视频开发专栏文章目录》、《使用PyQt开发图形界面Python应用专栏目录》,本文收费专栏对应文章为《moviepy音视频剪辑:与大小相关的视频变换函数详解》。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python、学5G!

☞ ░ 前往老猿Python博文目录 ░

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

moviepy音视频剪辑:与大小相关的视频变换函数crop、even_size、margin、resize介绍 的相关文章

随机推荐

  • python进行t检验示例

    t检验主要是针对正态总体均值的假设检验 xff0c 即检验样本的均值与某个值的差异 xff0c 或者两个样本的均值是否有差异等 其不需要事先知道总体的方差 xff0c 并且在少量样本情况下也可以进行检验 python进行t检验使用scipy
  • python-正态分布查表应用(scipy.stats.norm)

    1 公式 xff1a 正态分布概率密度公式 xff1a 可通过转换为标准正态分布 2 概率密度 xff1a 标准正态分布在某个点的概率密度可用scipy stats norm pdf计算 xff0c 下面模拟计算 5 5的概率密度 from
  • python-介绍泊松分布(poisson分布)

    一 泊松分布问题 xff1a 假设我每天接到骚扰电话的次数服从泊松分布 xff0c 并且经统计平均每天我会接到20个骚扰电话 请问 xff1a 1 我明天接到15个骚扰电话的概率 xff1f 2 我明天接到24个骚扰电话以下的概率 xff0
  • Word文档编辑技巧

    1 如何让附录显示在目录里 依次点击菜单栏的视图 工具栏 大纲 xff0c 打开大纲工具栏 选中 目录 附录 参考文献 等标题 xff0c 点击大纲工具栏的大纲级别的下拉选项 xff0c 选择 1级 xff0c 此时就完成了对 目录 等标题
  • 谈windows开发学习过程

    MFC作为一个C 43 43 类库 xff0c 而且MFC是Windows SDK的封装 为了开发windows应用更方便 xff0c 让程序员开发应用不需要过多在意细节 xff0c 专注功能上的开发 xff0c 所以推出MFC 但是实际开
  • python-指数分布介绍(scipy.stats.expon)

    一 指数分布问题 xff1a 有一种品牌的路由器 xff0c 据厂家统计知该路由器平均寿命是50000小时 xff0c 现在有2个问题 xff1a 1 去年我买了一个这样的路由器 xff0c 使用到现在已经8000小时了一点问题都没有 xf
  • python-使用LinearRegression进行简单线性拟合(线性回归)

    一元线性拟合 现有两组数据 xff0c 求y 61 a x 43 c的系数 X 61 12 46 0 25 5 22 11 3 6 81 4 59 0 66 14 53 15 49 14 43 2 19 1 35 10 02 12 93 5
  • matplotlib绘制双坐标轴(双纵轴)

    双坐标轴绘图示例 import matplotlib pyplot as plt import numpy as np plt rcParams 39 font sans serif 39 61 39 SimHei 39 用来正常显示中文标
  • pyplot画多个图,在一个图中绘制多个子图

    pyplot绘制多个子图方法 matplotlib在一个图中绘制多个子图用plt subplot 方法 import matplotlib pyplot as plt import numpy as np plt rcParams 39 f
  • mysql数据库备份及恢复

    1 mysql数据库备份 xff1a mysqldump lan db u root pmypassword h 10 49 56 01 gt data backup lan db sql 2 mysql数据库恢复 xff1a 先创建数据库
  • mysql密码过期解决办法,mysql密码永不过期

    1 进入到数据库服务器 xff0c windows需要进入到bin目录 xff0c linux应该是任意目录即可 xff08 但需要账号有权限 xff09 以windows为例 xff1a C Program Files MySQL MyS
  • java任意进制转换

    摘要 我们日常常用的是十进制 计算机是基于二进制的 xff0c 计算机常用的还有十六进制 八进制 本文主要介绍如何实现十进制和任意进制 间转换 计算思想 如果用 0123456789abcdefghijklmnopqrstuvwxyzABC
  • c++与java的应用区别

    文章目录 简介不同点关注点接口调用优化运行方式知识架构java不擅长的地方 基本就这些了 简介 一点粗鄙的总结 xff0c 肯定不全面 java我只接触了 后端部分 不同点 c 43 43 基本上你可以应用在所有的领域 xff0c 但是在后
  • HTTP基本认证(Basic Authentication)

    什么是HTTP基本认证 当打开浏览器访问网页时 xff0c 浏览器弹出一个包含用户名 密码输出项的对话框 xff0c 当用户输入用户名 密码后发送给服务器 xff0c 服务器验证通过后 xff0c 会显示相应的信息 这一认证的过程 xff0
  • Nginx(四):http服务器静态文件查找的实现

    上一篇nginx的文章中 xff0c 我们理解了整个http正向代理的运行流程原理 xff0c 主要就是事件机制接入 xff0c header解析 xff0c body解析 xff0c 然后遍历各种checker xff0c 直到处理成功为
  • 计算机网络-第3章 物理层

    期末考试篇 1 物理层定义了哪四方面的特性 xff1f 机械 xff1a 指明接口所用接线器的形状和尺寸 引脚数目和排列 固定和锁定装置 电气 xff1a 指明在接口电缆的各条线上出现的电压的范围 功能 xff1a 指明某条线上出现的某一电
  • jetson nano ubuntu18.04 ROS安装

    历时一天 xff0c 因为之前用手机热点 xff0c 即使换源了下载还是很慢 今天用校园网以后好了很多了 xff08 校园网还是挺好用的 xff09 xff0c 期间也踩了点坑 xff0c 记录一下 xff0c 也希望能帮到看这篇博客的你
  • 认识c++(二)

    上次说到c 43 43 变量类型 xff0c 接下来说c 43 43 变量作用域 作用域是程序的一个区域 xff0c 一般来说有三个地方可以定义变量 xff1a 1 函数或一个代码块内部声明的变量 xff0c 称为局部变量 2 函数参数的定
  • 老猿学5G扫盲贴:NEF、NRF、AF、UPF以及DN的功能

    专栏 xff1a Python基础教程目录 专栏 xff1a 使用PyQt开发图形界面Python应用 专栏 xff1a PyQt入门学习 老猿Python博文目录 NEF xff1a Network Exposure Function x
  • moviepy音视频剪辑:与大小相关的视频变换函数crop、even_size、margin、resize介绍

    前往老猿Python博文目录 一 引言 在 moviepy音视频剪辑 xff1a moviepy中的剪辑基类Clip详解 介绍了剪辑基类的fl fl time fx方法 xff0c 在 moviepy音视频剪辑 xff1a 视频剪辑基类Vi