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

VideoFileClip() 加载视频 使用VideoFileClip类 __init__(self, filename, has_mask=False, audio=True, audio_buffersize=200000, target_resolution=None, resize_algorithm='bicubic', audio_fps=44100, audio_nbytes=2, verbose=False, . 阅读详情
☞ ░ 前往老猿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博文目录 ░
Python图片转视频和视频转图片以及视频转GIF(可resize) cap = cv2.VideoCapture('video/MOV_0005.MOV') #加载视频文件 cap_num = cap.get(7) # 获取视频总帧数 cap_width = math.ceil(cap.get(3)) #获取视频帧宽度(横) cap_height = math.ceil(cap.get(4)) #获取视频帧高度(竖) cap_fps = math.ceil(cap.get(5)) #获取视频帧率 #得到视频总帧数的位数,比如198帧(三. 阅读详情

相关推荐

Python音视频剪辑:大小调整的视频变换函数详解

resize函数用于调整视频的尺寸大小,常见的参数包括width、height、height_ratio和width_ratio等。其中,width和height为视频目标宽度和高度,height_ratio和width_ratio分别为视频目标高度和宽度与原始视频高度和宽度的比例。MoviePy是一款强大的Python库,提供了多种视频变换函数,可以方便地对视频进行大小调整。crop函数用于裁剪视频的指定区域,常见的参数包括x1、y1、x2和y2等。Python音视频剪辑:大小调整的视频变换函数详解。

. 1868

MoviePy - 中文文档2-快速上手-MoviePy-Clips变换与特效

回到目录 下面是MoviePy中的几种对clip的修改: 非常常见的修改clip属性的方法有:clip.set_duration, clip.set_audio, clip.set_mask, clip.set_start 等. 已经实现的特效.clip.subclip(t1,t2):截取t1到t2时间段内的片段;还有一些高级效果,loop:让clip循环播放、time_mirror:让cl...

ucsheep-You see sheep! 1万+

moviepy中视频帧大小crop

介绍了视频画面大小裁剪的函数代码,并给出了关键函数resize和crop的函数说明

wugou2014的博客 1508

Moviepy进行视频resize缩放报错:AttributeError: module ‘PIL.Image‘ has no attribute ‘ANTIALIAS‘

本文介绍了Moviepy进行视频resize缩放报错:AttributeError: module 'PIL.Image' has no attribute 'ANTIALIAS'的问题原因及四种解决办法,包括修改moviepy的resize函数、升级moviepy、降级pillow以及用自定义函数替换resize函数,但由于moviepy2.0 相较以前的版本有非常大的变化,因此具体怎么处理需要结合大家的实际情况综合考虑。

老猿Python 1988

MoviePy音视频剪辑:理解大小相关的视频变换函数详解

通过resize()函数的另一种用法,我们可以缩放视频到指定的大小。接下来,我们调用resize()函数并传入缩放因子来缩放视频,最后使用write_videofile()函数将缩放后的视频保存到输出文件中。接下来,我们调用crop()函数来裁剪视频,并使用write_videofile()函数将裁剪后的视频保存到输出文件中。在视频编辑和处理中,经常需要对视频进行大小相关的变换,例如调整尺寸、裁剪或缩放。MoviePy提供了resize()函数的另一种用法,可以通过指定缩放因子来实现视频的缩放。

ByteWhiz的博客 561

moviepy音视频剪辑:与大小相关的视频变换函数详解

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

老猿Python 2612

python调整视频内容比例_moviepy音视频剪辑:与大小相关的视频变换函数crop、even_size、margin、resize介绍...

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

weixin_31292909的博客 3866

Python视频剪辑-Moviepy视频尺寸和颜色调整技巧

假设要制作一个介绍《三国志》游戏中三大主要角色(刘备、曹操、孙权)的短视频。素材准备,准备三个角色的照片和背景音乐。创建视频剪辑,使用MoviePy创建一个空的视频剪辑,并将三个角色的照片按顺序添加进去。# 创建一个空的视频剪辑# 添加角色照片添加效果,例如为每个角色照片添加一个从左向右的移动效果。# 添加从左向右的移动效果添加音乐,选择一个背景音乐并添加。# 添加背景音乐保存视频,这样一个简单但富有个性的《三国志》角色介绍视频就制作完成了。# 保存视频。

Mr数据杨 1970

当影像遇上Python:用MoviePy库轻松搞定视频编辑

🎬 您对视频编辑感兴趣吗?💻 想学习如何使用 MoviePy 制作精彩视频吗?🎥 不要再观望!这份综合指南将向您展示您需要了解的关于 MoviePy 的一切,从安装到高级编辑技术。使用 MoviePy,您可以轻松创建视频剪辑、剪切和修剪视频、添加文本和标题、应用特殊效果和滤镜等等。此外,您还将学习如何使用缓存、多线程和 GPU 加速来优化您的编辑过程。🚀 别再等了,让我们开始编辑吧!

philosophy 6827

GitHub 新手使用手册

理论说太多容易忘,来实践实践吧。

2501_90226046的博客 1053

淘宝x-mini-wua生成机制与硬件信息关联性深度解析

本文深度解析了淘宝x-mini-wua的生成机制与硬件信息的关联性,详细介绍了其作为设备指纹令牌的核心作用及技术实现细节。通过分析基础硬件层、环境特征层和行为特征层的数据采集,揭示了淘宝如何利用AES加密和分级加密策略防止破解,并探讨了其安全防护与对抗策略。

weixin_29243279的博客 230

moviepy基本参数用法大全

MoviePy 是一个用于视频编辑的 Python 库,使用户能够处理、编辑和操作视频文件。这个库允许你剪辑视频、添加文本、合并视频剪辑,以及应用各种效果和转换。它建立在 NumPy、imageio 和 Decorator 等库的基础上,使得在处理视频时能够更加高效。MoviePy 允许你从现有视频中选择特定的片段,然后将它们合并成一个新的视频文件。你可以在视频中添加文本、图形和其他元素,以创建字幕、水印或其他视觉效果。

小小明-代码实体的专栏 5362

Silvaco TCAD 2018安装后,如何配置TonyPlot 5.0.22.R并解决绘图报错?

本文详细介绍了在Windows系统上安装Silvaco TCAD 2018后,如何正确配置TonyPlot 5.0.22.R并解决常见的绘图报错问题。内容包括版本兼容性分析、环境变量设置、常见错误解决方案以及性能优化建议,帮助用户顺利完成仿真结果的可视化工作。

weixin_31031711的博客 420

MoviePy(Python音视频开发)

MoviePy(Python音视频开发)

ZhengrongYue的博客 4030

CNN卷积神经网络手写数字识别实例及代码详解

本文的代码来自githup的Deep Learning的toolbox,是用Matlab实现的。感谢该toolbox的作者付出和分享。 我在应该该代码进行训练时,出现一些报错,如expand函数应用不对,flipall函数未定义等问题,对这些问题进行了修正,完成网络训练和验证。 本文mnist_uint8.mat的获取可以参照我的另一篇博客:MNIST数据库处理--matlab生成mnist_

VivienFu的专栏 6万+

oscp备考,oscp系列——Djinn3靶场:ssti漏洞,pkexec提权

oscp备考,oscp系列——Djinn3靶场:ssti漏洞,pkexec提权难度简单偏上对于低权限shell获取涉及:ssti漏洞对于提权:pkexec提权。

2202_75361164的博客 633

使用Python+moviepy将视频画面缩小或放大

使用Python+moviepy将视频画面缩小或放大

limengshi138392的博客 2343

FlexSim:FlexSim软件介绍与安装

在开始安装FlexSim之前,首先需要从FlexSim官方网站下载安装包。FlexSim提供不同版本的软件,包括教育版、专业版等,确保选择适合您需求的版本。下载页面通常会列出系统要求,包括操作系统、处理器、内存和硬盘空间,确保您的计算机满足这些要求。访问FlexSim官方网站。导航至下载页面。选择适合您需求的FlexSim版本。点击下载按钮,开始下载安装包。在开始构建模型之前,首先需要明确模型的目标。模型目标是指导模型设计和分析的核心,它定义了你希望通过模型解决的问题或探索的系统行为。

kkchenjj的博客 5805

moviepy初体验

替换视频音频,裁剪视频: from moviepy.editor import * tid='111' video = VideoFileClip(r"./{}/{}.mp4".format(tid, tid), audio=False) v_duration = video.duration #视频时间长短 s_d = 0 v_d = v_duration audio_n = Audio...

Hard struggle 1万+

【原理图PCB专题】Cadence17.4 PCB位号重排与反标

Cadence17.4 PCB位号重排与反标比Cadence16版本更简单一些,那到底如何操作?

一点硬件 1181

Cilium动手实验室: 精通之旅---1.Getting Started with Cilium

我们需要在 HTTP 层的第 7 层实施策略,以限制允许 tiefighter 调用的确切 API,以及不允许调用哪些 API。上仅需要的 API 资源的访问,从而为微服务之间的通信实施“最低权限”安全方法。船只上进行匹配,因此我们需要在该标签上进行匹配,此外,我们必须确保来自带有标签。为了模拟我们的连接测试,我们将使用 curl 执行简单的 API 调用。在我们立即开始更改策略之前,让我们考虑一下相应的网络策略应该是什么样子。的规则,该规则将通过 L3-L4 策略对死星的访问限制为仅帝国船只。

Q先生 1126

【Python专题】Python处理视频的分辨率

MoviePy是一个用于视频编辑的 Python 库,它允许用户进行视频剪辑、合成、转码等多种操作。MoviePy的一大优点是它基于FFmpeg,这使得它可以处理几乎所有的视频格式。此外,MoviePy的 API 设计得非常直观,即使是初学者也能快速上手。通过本文,你学会了如何使用MoviePy库来读取视频剪辑,并修改视频的分辨率。MoviePy提供了灵活且强大的 API,可以帮助你轻松地处理视频文件。无论你是需要调整视频的大小以适应不同的播放平台,还是需要压缩视频以节省存储空间,MoviePy。

longtime的博客 1051

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

crop和resize操作区别

crop:对图像进行剪切 resize:对图像进行伸缩 实践代码 import cv2 bb2d = [30, 30, 72 ,42] image = cv2.imread('car.png') pt1 = (int(bb2d[0]), int(bb2d[1])) pt2 = (int(bb2d[0]) + int(bb2d[2]), int(bb2d[1]) + int(bb2d[3])) cv...

weixin_30622107的博客 2627

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

神经网络中resize、size、crop_size等含义

构造一个网络首先要保证数据流是通的,即各层的输出形状的是整数,不能是小数。至于构造出来的网络效果好不好,按下不表。只要数据流通畅,你的输入图像是什么形状的都无所谓了。 如果你的图像是边长为 256 的正方形。那么卷积层的输出就满足 [ (256 - kernel_size)/ stride ] + 1 ,这个数值得是整数才行,否则没有物理意义。例如,你算得一个边长为 7.7 的 feature map 是没有物理意义的。 pooling 层同理可得。FC 层的输出形状总是满足整数,其唯一的要求就是整个训练过

weixin_42535423的博客 6280

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

python+moviepy音视频处理(一):基本操作

安装:pip install moviepy'''moviepy.editor模块类'''

北冥有鱼的博客 8124
上一篇: moviepy音视频剪辑:与大小相关的视频变换函数详解
下一篇: 区块链学习3:区块链的共识机制
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值