精华内容
下载资源
问答
  • moviepy,一个Python写的视频处理库。包括常见的视频切割,拼接,插入标题等,甚至可以做一些非线编辑,特效等等。可以读取和写入所有最常见的音频和视频格式,包括GIF。 MoviePy MoviePy(完整文档)是一个用于视频...
  • moviepy,一个Python写的视频处理库。包括常见的视频切割,拼接,插入标题等,甚至可以做一些非线编辑,特效等等。可以读取和写入所有最常见的音频和视频格式,包括GIF。
  • 主要介绍了Python视频编辑库MoviePy的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 简短的python.exe,用于通过moviepy和tkinter GUI编辑视频 当前唯一的活动文件是gui_basics.py 打开一个窗口,所有按钮都执行某些功能,其中一些功能当前会打印到终端上 视频帧都是相同的,因为它们仅引用正在重用...
  • moviepy:使用Python进行视频编辑
  • 几行代码实现视频转音频
  • moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解.rar
  • python使用moviepy模块对视频进行操作-附件资源
  • Moviepy超实用手册

    2021-05-17 15:13:14
    moviepy vfx # 加速 def accel_decel(clip, new_duration=None, abruptness=1.0, soonness=1.0): """ new_duration:最后视频时长,默认是clip原时长 abruptness:加速时间,(>-1 and <0)加速降速(0)无...

    moviepy vfx,当前版本:2.0.0.dev2,非特殊说明即在原视频上进行变化

    目录

    vfx调用方法

    moviepy.video.fx.accel_decel  变速

    moviepy.video.fx.blackwhite  黑白特效

    moviepy.video.fx.blink  闪烁特效

    moviepy.video.fx.colorx  色彩增幅

    moviepy.video.fx.crop  裁剪

    moviepy.video.fx.even_size  尺寸均匀(剪裁视频像素为偶数)

    moviepy.video.fx.fadein\fadeout  淡入淡出

    moviepy.video.fx.freeze_region\freeze  冷冻特效

    moviepy.video.fx.gamma_corr  视频剪辑的伽玛校正

    moviepy.video.fx.headblur  局部模糊特效

    moviepy.video.fx.invert_colors  色彩反转

    moviepy.video.fx.loop  循环

    moviepy.video.fx.lum_contrast  亮度、对比度调整

    moviepy.video.fx.make_loopable  结尾逐渐淡入使自己可循环

    moviepy.video.fx.margin  页边距

    moviepy.video.fx.mask_and\mask_or\mask_color遮罩

    moviepy.video.fx.mirror_x\mirror_y镜像

    moviepy.video.fx.painting  油画特效

    moviepy.video.fx.resize  缩放

    moviepy.video.fx.rotate  旋转

    moviepy.video.fx.scroll  滚动

    moviepy.video.fx.speedx  倍速

    moviepy.video.fx.supersample

    moviepy.video.fx.time_mirror(倒放)time_symmetrize(正播倒播自动合成)


     

    vfx调用方法

    from moviepy.editor import VideoFileClip, vfx
    
    
    video = VideoFileClip('demo.mp4', audio=False).subclip(0, 3)
    factor = 2 # 倍速播放倍数
    final_duration = 1 # 倍速播放持续时间 ,可以为空表使全部
    
    # 方式一
    newclip = (video
               .fx(vfx.speedx, factor , final_duration)
              )
    # 方式二
    newclip = vfx.speedx(video, factor, final_duration)
    
    newclip.preview()

    moviepy.video.fx.accel_decel  变速

    def accel_decel(clip, new_duration=None, abruptness=1.0, soonness=1.0):
        """
        new_duration:最后视频时长,默认是clip原时长
        abruptness:加速时间,(>-1 and <0)加速降速(0)无影响(>0)降速加速
        soonness:加速持续时间,(0<soonness < inf)
        """
        pass

    moviepy.video.fx.blackwhite  黑白特效

    def blackwhite(clip, RGB=None, preserve_luminosity=True):
        """
        RGB:可选"CRT_phosphor",一组特殊值:[0.2125, 0.7154, 0.0721]
        preserve_luminosity:是否保持亮度,即preserve_luminosity是否与RGB的和保持为1
        """
        pass

    moviepy.video.fx.blink  闪烁特效

    def blink(clip, d_on, d_off):
        """
        仅在composite clips中生效
        d_on:每d_on秒显示
        d_off:没s_off秒消失
        (返回一个新剪辑(clip),不在原剪辑上操作)
        """
        pass

    moviepy.video.fx.colorx  色彩增幅

    def colorx(clip, factor):
        """
        factor:增幅系数
        """
        pass

    moviepy.video.fx.crop  裁剪

    def crop(clip, x1=None, y1=None, x2=None, y2=None, width=None, height=None, x_center=None, y_center=None,):
        """
        可以任意参数值组合完成裁剪...
        x1、y1表示裁剪区域的左上角坐标
        x2、y2表示裁剪区域的右下角坐标
        width、height表示裁剪区域宽度、高度
        x_center、y_center表示裁剪区域中心坐标
        (所有的坐标都以像素为单位,值为浮点数)
        """
        pass

    moviepy.video.fx.even_size  尺寸均匀(剪裁视频像素为偶数)

    def even_size(clip):
        """
        Crops the clip to make dimensions even.
        """
        pass

    moviepy.video.fx.fadein\fadeout  淡入淡出

    def fadein(clip, duration, initial_color=None):
        """
        duration:变化时长
        initial_color:初始颜色(介于0和1之间的数字)
        """
        pass
    
    def fadeout(clip, duration, final_color=None):
        """
        duration:变化时长
        final_color:终止颜色(介于0和1之间的数字)
        """
        pass

    moviepy.video.fx.freeze_region\freeze  冷冻特效

    # 局部冷冻特效
    def freeze_region(clip, t=0, region=None, outside_region=None, mask=None):
        """
        t:冻结时刻
        region:冻结区域
        outside_region:非冻结区域
        mask:
        """
        pass
    
    # 冷冻特效
    def freeze(clip, t=0, freeze_duration=None, total_duration=None, padding_end=0):
        """
        t:
        freeze_duration:冻结持续时间
        total_duration:总持续时间
        padding_end:
        """
        pass

    moviepy.video.fx.gamma_corr  视频剪辑的伽玛校正

    def gamma_corr(clip, gamma):
        """
        gamma:CRT的影像亮度呈现线性
        """
        pass

    moviepy.video.fx.headblur  局部模糊特效

    def headblur(clip, fx, fy, r_zone, r_blur=None):
        """
        fx、fy:模糊原点坐标
        r_zone:模糊半径
        r_blur:模糊强度
        """
        pass

    moviepy.video.fx.invert_colors  色彩反转

    def invert_colors(clip):
        pass

    moviepy.video.fx.loop  循环

    def loop(clip, n=None, duration=None):
        """
        n:循环次数
        duration:持续时间
        """
        pass

    moviepy.video.fx.lum_contrast  亮度、对比度调整

    def lum_contrast(clip, lum=0, contrast=0, contrast_thr=127):
        """
        lum:亮度
        contrast:对比度
        contrast_thr:
        """
        pass

    moviepy.video.fx.make_loopable  结尾逐渐淡入使自己可循环

    def make_loopable(clip, cross):
        """
        cross:淡入持续时间
        """

    moviepy.video.fx.margin  页边距

    def 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完全不透明
        """
        pass

    moviepy.video.fx.mask_and\mask_or\mask_color遮罩

    def mask_and(clip, other_clip):
        """
        other_clip:
        """
        pass
    
    def mask_or(clip, other_clip):
        """
        other_clip:
        """
        pass
    
    def mask_color(clip, color=None, thr=0, s=1):
        """
        color:
        thr:
        s:
        """
        pass

    moviepy.video.fx.mirror_x\mirror_y镜像

    def mirror_x(clip, apply_to="mask"):
        pass
    
    def mirror_y(clip, apply_to="mask"):
        pass

    moviepy.video.fx.painting  油画特效

    def painting(clip, saturation=1.4, black=0.006):
        """
        saturation:
        black:
        """
        pass

    moviepy.video.fx.resize  缩放

    def resize(clip, newsize=None, height=None, width=None, apply_to_mask=True):
        pass

    moviepy.video.fx.rotate  旋转

    def rotate(clip, angle, unit="deg", resample="bicubic", expand=True):
        pass

    moviepy.video.fx.scroll  滚动

    def scroll(
        clip, w=None, h=None, x_speed=0, y_speed=0, x_start=0, y_start=0, apply_to="mask"
    ):
        pass

    moviepy.video.fx.speedx  倍速

    def speedx(clip, factor=None, final_duration=None):
        pass

    moviepy.video.fx.supersample

    def supersample(clip, d, nframes):
        """
        d:
        nframes:
        """
        pass

    moviepy.video.fx.time_mirror(倒放)time_symmetrize(正播倒播自动合成)

    def time_mirror(self):
        pass
    
    def time_symmetrize(clip):
        pass

     

    展开全文
  • 以前学习Moviepy音视频剪辑时,用的卓别林的一个黑白视频片段,感觉视频的噪点比较多,画面也整体偏暗,不禁想看看如果对其进行直方图均衡会怎么样。如是开干,但进展并不很顺利,下面就来谈谈遇到的问题。 二、...

    一、引言

    最近在学习图像处理的《直方图处理》,对直方图均衡处理效果感觉非常有用。

    以前学习Moviepy音视频剪辑时,用的卓别林的一个黑白视频片段,感觉视频的噪点比较多,画面也整体偏暗,不禁想看看如果对其进行直方图均衡会怎么样。如是开干,但进展并不很顺利,下面就来谈谈遇到的问题。

    二、基础知识介绍

    1、Moviepy的视频变换fl_image方法

    由于是对视频图像进行灰度处理,因此需要逐帧读取视频帧,每帧应用直方图均衡。该视频变换处理有多种方法实现,老猿使用fl_image。

    fl_image方法是对get_frame方法获取的帧进行变换的方法,本质上是Clip的fl方法在内容变换方面的一种变种和应用。

    调用语法fl_image(self, image_func, apply_to=None)

    参数说明

    • image_func:参数image_func是对剪辑帧进行图像变换的函数,带一个参数,参数就是要处理的帧,这个帧直接通过get_frame去获取,image_func函数的返回值为经过变换后的帧
    • apply_to:apply_to表示变换是否需要同时作用于剪辑的音频和遮罩,其值可以为’mask’、‘audio’、[‘mask’,‘audio’]

    对比fl调用方法fl(self, fun, apply_to=None, keep_duration=True):

    • fl_image由于只变换内容,因此不涉及时间的变换,keep_duration就是默认为True
      image_func不带时间参数,这是因为系统默认调用get_frame(t)来获取帧,无需image_func带时间参数

    • fl_image本质上是执行如下语句来完成帧内容的变换:fl(lambda gf, t: image_func(gf(t)),
      apply_to)

    更多关于Moviepy视频fl_image变换处理的介绍请参考《moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解》。

    2、Moviepy彩色视频转黑白视频变换blackwhite函数

    blackwhite函数用于将剪辑变成灰度剪辑,也就是将剪辑中的彩色像素灰度化。

    调用语法blackwhite(clip, RGB = None, preserve_luminosity=True)

    参数说明

    • clip:要处理的剪辑,通过fx或subfx调用时,会将调用者的实例对象self传入
    • RGB:浮点数三元组,用于设置RGB三种颜色的权重,缺省值为None,如果为None,则为1:1:1,如果设置为‘CRT_phosphor’,则RGB = [0.2125, 0.7154, 0.0721]
    • preserve_luminosity:preserve_luminosity用于控制是否保持亮度,如果保持亮度不变,则最终的RGB三个值相加为1。在这里的亮度luminosity不是lightness,实际上是对明度的度量,也称为灰阶值,是不同权重的R、G、B的组合值。实际上亮度是对颜色的明度(brightness)的一种度量
    3、OpenCV的直方图均衡处理equalizeHist函数

    OpenCV的直方图均衡处理非常简单,就是对需要处理的黑白图像执行cv2.equalizeHist函数,返回图像即为直方图均衡后的图像。

    4、OpenCV的图像色系转换cvtColor

    cv2.cvtColor是openCV提供的颜色空间转换函数。

    调用语法cvtColor(src, code, dstCn=None)
    其中:

    • src:要转换的图像
    • code:转换代码,表示从何种类型的图像转换为何种类型,如cv2.COLOR_BGR2GRAY就是将BGR格式彩色图像转换成灰度图片,具体转换代码请参考官网文档
    • dstCn:目标图像的通道数,如果为0表示根据源图像通道数以及转换代码自动确认

    三、实现思路及处理视频内容

    总体处理非常简单,就是加载视频剪辑后,对剪辑进行fl_image变换,变换参数中的处理函数就传递直方图均衡处理相关的函数。

    原始视频是卓别林的一个黑白视频片段,下面是该段视频的2个截图:
    在这里插入图片描述

    四、实现过程及遇到的问题

    1、直接在fl_image调用直方图均衡的equalizeHist函数

    实现代码如下:

    from moviepy.editor import *
    import cv2
    
    def test():
        clipV = VideoFileClip(r"F:\video\zbl1.mp4")
        newclip = clipV.fl_image(cv2.equalizeHist, apply_to=['mask'])
        newclip.write_videofile(r"F:\video\temp\zbl1.mp4")
    
    
    test()
    

    结果执行报错(很长的报错信息,仅截取关键部分):

    File "C:\Program Files\Python38\lib\site-packages\moviepy\video\VideoClip.py", line 490, in <lambda>
        return self.fl(lambda gf, t: image_func(gf(t)), apply_to)
    cv2.error: OpenCV(4.3.0) C:\projects\opencv-python\opencv\modules\imgproc\src\histogram.cpp:3439: error: (-215:Assertion failed) _src.type() == CV_8UC1 in function 'cv::equalizeHist'
    
    

    这些信息说明直方图均衡处理的图像数据类型不对,因为涉及到了OpenCV的函数,在OpenCv-Python中无法深入分析,因此也没办法看出具体原因。

    2、将equalizeHist函数再次封装后给fl_image调用

    代码如下:

    from moviepy.editor import *
    import cv2
    def flImg(img):
        imgNew = cv2.equalizeHist(img)
        return imgNew
    
    def test():
        clipV = VideoFileClip(r"F:\video\zbl1.mp4")
        newclip = clipV.fl_image(cv2.equalizeHist, apply_to=['mask'])
        newclip.write_videofile(r"F:\video\temp\zbl1.mp4")
    
    

    报错信息依旧,由于用flImg封装了cv2.equalizeHist,此时可以通过Debug跟踪flImg看到内部数据,居然发现img是三维数组,也即图像像素值是RGB格式,而不是灰度图格式。看样子虽然是个黑白视频,但格式是彩色视频格式?

    3、将视频剪辑加载之后转成黑白视频再处理

    好吧,黑白视频存放的是彩色格式,也许是因为视频保存格式控制的,那就把其先转成黑白视频,Moviepy有个这样变换函数blackwhite。

    代码如下:

    from moviepy.editor import *
    import cv2
    
    def flImg(img):
        imgNew = cv2.equalizeHist(img)
      
        return imgNew
    
    def test():
        clipV = blackwhite(VideoFileClip(r"F:\video\zbl1.mp4"))
        newclip = clipV.fl_image(flImg, apply_to=['mask'])
        newclip.write_videofile(r"F:\video\temp\zbl1.mp4")
    
    
    test()
    

    结果还是报同样错,观察flImg参数img,居然还是RGB格式。黑白视频的帧是二维还是三维?让人一脸蒙圈!

    4、强制图像转换为灰度图

    好吧,老猿承认在黑白视频的帧数据认知上出问题了,黑白视频也是RGB格式,那只有对图像强制格式转换了,用OpenCV的cvtColor将RGB格式强制转换为灰度图。

    代码如下:

    from moviepy.editor import *
    import cv2
    
    def flImg(img):
        imgNew = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        imgNew = cv2.equalizeHist(imgNew)
    
        return imgNew
    
    def test():
        clipV = blackwhite(VideoFileClip(r"F:\video\zbl1.mp4"))
        newclip = clipV.fl_image(flImg, apply_to=['mask'])
        newclip.write_videofile(r"F:\video\temp\zbl1_11.mp4")
        newclip.write_gif(r"F:\video\temp\zbl1.gif")
    
    
    test()
    

    这样处理后,执行没报错,但处理完的视频存在如下两个问题:
    1、视频图像整体大小没变,但内容变成了同屏九窗播放模式:

    在这里插入图片描述
    2、视频播放速度是原视频的3倍左右,音频没变,导致视频的播放到1/3时长视频内容已经播放完成,然后视频就固定在最后一帧图像,音频还按原有节凑在播放。

    总体来看,就是视频内容没有按照预定计划生成。为了查找问题,老猿做了如下处理:

    1. 将视频直接生成gif,gif是正常的;
    2. 去掉直方图均衡处理,只保留图像格式变换处理,还是存在问题;
    3. 去掉图像格式变换处理,flImg直接返回原图像,视频生成后是正常的。

    考虑上述处理可以得出结论,问题出现与视频帧图像RGB转灰度图处理有关,结合前面彩色视频使用blackwhite转黑白视频后图像像素仍然是RGB格式的情况,老猿感觉是黑白视频的帧图像格式不是我理解的灰度图,而是RGB格式的图像。那这个过程到底该怎么处理呢?为此老猿查看了Moviepy的blackwhite的源代码:

    def blackwhite(clip, RGB=None, preserve_luminosity=True):
        """ Desaturates the picture, makes it black and white.
        Parameter RGB allows to set weights for the different color
        channels.
        If RBG is 'CRT_phosphor' a special set of values is used.
        preserve_luminosity maintains the sum of RGB to 1."""
        if RGB is None:
            RGB = [1, 1, 1]
    
        if RGB == 'CRT_phosphor':
            RGB = [0.2125, 0.7154, 0.0721]
    
        R, G, B = 1.0 * np.array(RGB) / (sum(RGB) if preserve_luminosity else 1)
    
        def fl(im):
            im = (R * im[:, :, 0] + G * im[:, :, 1] + B * im[:, :, 2])
            a = np.dstack(3 * [im]).astype('uint8')
            return a
    
        return clip.fl_image(fl)
    

    可以看到,该源代码是先将RGB像素值按照参数指定要求转换成灰度值,最后最将该灰度值复制3份作为返回图像的RGB值,因此这个处理实际上图像最终格式是RGB格式,但RGB的值都是对应的原RGB映射到的灰度值。

    5、在帧图像变换时增加将灰度图变成RGB格式的灰度图处理

    为了确保最终的黑白视频格式满足像素值为RGB格式要求,对灰度变换后的图像增加了将灰度值扩展成RGB格式的处理,在此用到了numpy的dstack函数。代码如下:

    from moviepy.editor import *
    import cv2
    import numpy as np
    
    def flImg(img):
        imgNew = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        imgNew = cv2.equalizeHist(imgNew)
        imgNew = np.dstack(3 * [imgNew]).astype('uint8')
    
        return imgNew
    
    
    def test():
        clipV = VideoFileClip(r"F:\video\zbl1.mp4")
    
        newclip = clipV.fl_image(flImg, apply_to=['mask'])
        newclip.write_videofile(r"F:\video\temp\zbl1.mp4")
    
    
    test()
    

    经验证,这样处理后的视频输出文件变成了正常播放的视频,但说实话直方图均衡处理的效果并不很好,虽然视频总体变亮了,但不同帧之间图像的差异变大了,导致视频的画面连续变化较大。

    五、小结

    本文通过介绍将视频帧转换为灰度图像,再构建黑白视频的处理过程所遇到的问题及解决办法,确认了无论是从输入黑白视频的像素值还是将黑白视频输出到视频文件的处理过程来看,黑白视频的帧图像不是二维的灰度图,而是对应三维的彩色图像格式,其像素值为RGB三元组格式,只是R、G、B三个分量的值都是为对应灰度图的灰度值。

    更多关于 Moviepy 的介绍请大家参考《Python音视频剪辑库MoviePy1.0.3中文教程导览及可执行工具下载》。

    如对文章内容存在疑问或需要相关资料,可在博客评论区留言,或关注:老猿Python 微信公号发消息咨询,可通过扫二维码加微信公众号。
    在这里插入图片描述

    写博不易,敬请支持:

    如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

    关于老猿的付费专栏

    1. 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
    2. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
    3. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录
    4. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。

    前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

    对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

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

    老猿Python,跟老猿学Python!

    ☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython

    展开全文
  • 一、moviepy中的剪辑 1.1、clip 所有剪辑的基类是clip,clip提供了如下方法: copy():用于从剪辑返回一份浅拷贝,该方法被广泛地用于每当剪辑有一个输出变换(如resize、subclip)时产生新剪辑时,音频和遮罩也会...
     
    

    一、概述

    在moviepy中,所有剪辑的基类是Clip,对应的模块为moviepy.Clip,常用的剪辑类包括:VideoClip、AudioClip、VideoFileClip、AudioFileClip、ImageSequenceClip、ImageClip、CompositeVideoClip、CompositeAudioClip、TextClip、ColorClip,它们之间的继承关系如下:

    展开全文
  • moviepy中,所有剪辑的基类是Clip,对应的模块为moviepy.Clip,常用的剪辑类包括:VideoClip、AudioClip、VideoFileClip、AudioFileClip、ImageSequenceClip、ImageClip、CompositeVideoClip、Compo.
     
    

    一、概述

    在moviepy中,所有剪辑的基类是Clip,对应的模块为moviepy.Clip,常用的剪辑类包括:VideoClip、AudioClip、VideoFileClip、AudioFileClip、ImageSequenceClip、ImageClip、CompositeVideoClip、CompositeAudioClip、TextClip、ColorClip,它们之间的继承关系如下:
    在这里插入图片描述

    说明:

    VideoClip的子类还有DataVideoClip、UpdatedVideoClip这2个。

    二、Clip类的属性

    2.1、start属性

    start属性用于多个子剪辑拼接成一个剪辑的场景,每个子剪辑通过设置自己的start来指定自己在合成后的剪辑中的播放开始时间,该属性通过方法set_start来设置。

    set_start语法:

    set_start(self, t, change_end=True)

    说明:

    该方法会返回一段调用者的浅拷贝剪辑,该拷贝剪辑的start会被设置为t。
    其中:

    • t为需要设置的开始时间,表示方法可以是如下四种之一:
    • 秒,为一个浮点数数字,如75.35;
    • 分钟和秒组成的元组,如(1,15.35);
    • 时、分、秒组成的元组,如(0,1,15.35)
    • 用冒号分隔的时间字符串,如‘0:1:15.35’

    下面剪辑的时间参数如无特别说明都可以是这四种形式的时间。

    • change_end,表示是否修改剪辑的end的值
    • 如果为False,则copy剪辑的end值保持不变,当end存在有效值时,copy剪辑的duration属性被设置为end-start
    • 如果为True,且剪辑duration存在有效值,则拷贝剪辑的end属性被更改为:start+duration

    2.2、end属性

    end属性用于多个子剪辑拼接成一个剪辑的场景,每个子剪辑通过设置自己的end来指定自己在合成后的剪辑中的播放的结束时间,该属性通过方法set_end来设置。

    set_end语法

    set_end(self, t)

    说明:
    • 类似set_start方法,该方法返回一个调用者的拷贝剪辑,该拷贝剪辑的end被设置为t
    • 如果该拷贝剪辑设置了start属性,则剪辑的duration属性会被设置为end-start,start属性保持不变
    • 如果该拷贝剪辑未置start属性,则duration属性保持不变,start属性被设置为max(0,end-duration)

    2.3、duration属性

    duration属性保存剪辑的时长,如果为None,表示剪辑无限长。可以调用set_duration改变剪辑的时长。

    set_duration调用语法:

    set_duration(self, t, change_end=True)

    2.4、memoize属性

    memoize属性用于控制剪辑是否应保留内存读取的最后一帧,如果为True保留,否则不保留,默认值为False,可以通过方法set_memoize进行修改。

    set_memoize 调用语法:

    set_memoize(self, memoize)

    2.5、memoized_t、memoized_frame属性

    当memoize为True时,则memoized_t、memoized_frame用于保存最后一次读取的帧的位置和对应的帧。

    三、Clip类的方法

    3.1、copy方法

    copy方法会将调用者对应剪辑用浅拷贝(Shallow copy )方式复制一份,如果对应剪辑有音轨和遮罩,同样会浅拷贝复制到新剪辑中。

    调用语法:copy(self)

    3.2、get_frame方法

    get_frame方法返回剪辑指定时刻位置的视频或音频帧,每个帧实际上一个表示RGB图像或音频的numpy类型数组。

    调用语法:get_frame(self, t)

    如果剪辑的memoize属性为True,则会使用memoized_t、memoized_frame保留访问帧的位置和帧数据。

    3.3、fl方法

    fl方法是一个通用的剪辑处理方法,它返回一个新剪辑,新剪辑的所有帧是当前调用剪辑对象的帧经过函数fun变换处理后的帧。

    调用语法:

    fl(self, fun, apply_to=None, keep_duration=True)

    说明:
    • fun:参数fun是对剪辑帧进行变换的函数,带2个参数,第一个参数gf表示当前剪辑的get_frame方法,第二个参数为以秒为单位的剪辑位置t,t会作为gf的参数。fun函数的返回值为经过变换后的帧
    • apply_to:apply_to表示变换过滤器fl是否需要同时作用于剪辑的音频和遮罩,其值可以为’mask’、‘audio’、[‘mask’,‘audio’]
    • keep_duration:如果为True表示不改变剪辑的duration属性

    3.4、fl_time方法

    fl_time方法返回一个新剪辑,新剪辑是调用剪辑的一个浅拷贝,但新剪辑的时间线被调整,实际上这个方法就是对剪辑进行一个基于时间特效的处理,如快播、慢播、倒序播放等。

    调用语法:

    fl_time(self, t_func, apply_to=None, keep_duration=False)

    说明:

    3.5、fx方法

    fx方法是用于执行参数指定的函数,并返回函数的执行结果。

    调用语法:

    fx(self, func, *args, **kwargs)

    说明:

    该方法等同于执行:func(self, *args, **kwargs)
    这个方法的用途是当需要使用一系列方法依次调用处理剪辑且每个方法返回的新剪辑作为下次调用者时可以简化语句。

    3.6、set_fps方法

    set_fps方法非常简单,就是用于设置fps的值,调用方法为:set_fps(self, fps),但该方法修改的不是调用剪辑对象的值,而是调用对象剪辑的浅拷贝对象的fps值,返回对象为新剪辑。

    3.7、set_ismask方法

    set_ismask方法非常简单,就是用于设置是否有遮罩,调用方法为:set_ismask(self, ismask)`,但该方法修改的不是调用剪辑对象的值,而是调用对象剪辑的浅拷贝对象的ismask值,返回对象为新剪辑。

    3.8、is_playing方法

    该方法用于判断对应时间是否在剪辑的start和end之间。

    调用语法:is_playing(self, t)
    说明:

    如果t是一个时间,且位于剪辑的start和end之间,则返回True,否则返回False。
    如果t是一个numpy数组,如果数组的所有元素代表时间都不在剪辑的start和end之间则返回False,否则返回一个向量[b_1, b_2, b_3…], 如果数组指定位置i的时间在剪辑的start和end之间,则b_i为True,否则为False。

    3.9、subclip方法

    subclip方法用于从调用剪辑中取指定的剪辑段构造一个新剪辑对象返回,原剪辑保持不变。

    调用语法:subclip(self, t_start=0, t_end=None)
    说明:

    返回调用剪辑的t_start到t_end之间的剪辑段,如果t_end为None,则t_end被设置为剪辑的duration,如果t_end为负数,则t_end被设置为剪辑的duration + t_end。

    3.10、cutout方法

    cutout方法将调用剪辑对象的剪辑去除掉指定位置段后返回。

    调用语法:cutout(self, ta, tb)
    说明:

    返回调用剪辑对象的剪辑去除ta到tb这一段之后的剪辑,如果原剪辑设置了duration属性,则返回剪辑的duration=原剪辑的duration-(tb - ta)。

    3.11、iter_frames方法

    iter_frames方法不是一个剪辑编辑的方法,其功能是为了迭代访问剪辑的所有帧,返回值为一个迭代器,每迭代一次返回下一帧。

    调用语法:

    iter_frames(self, fps=None, with_times = False, logger=None, dtype=None)

    说明:
    • iter_frames方法将剪辑的每帧作为一个HxWxN的numpy数组返回,N为1表示遮罩剪辑帧,N=3为RGB剪辑帧
    • 如果剪辑本身有fps参数,则fps为可选参数
    • 使用图片流编写视频时,dtype设置为“uint8”

    3.12、close方法

    释放剪辑使用的所有资源。

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

    关于收费专栏

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

    收费专栏文章目录《moviepy音视频开发专栏文章目录》、《使用PyQt开发图形界面Python应用专栏目录》,本文收费专栏对应文章为《moviepy音视频剪辑:moviepy中的剪辑基类Clip详解》。

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

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

    跟老猿学Python、学5G!

    展开全文
  • 本节介绍moviepy的音视频的加载和输出方法。 二、视频加载 2.1、视频加载方法 要从视频文件中加载视频非常简单,使用VideoFileClip类的构造方法即可完成加载。其构造方法语法如下: __init__(self, filename, has_...
  • 用Python+Moviepy+OpenCV制作灯光秀短视频

    千次阅读 多人点赞 2021-04-10 23:22:28
    本文完整介绍了用Python+OpenCV+Moviepy制作一个庆祝武汉重启一周年的武汉灯光秀短视频的实现思路、过程、关键函数等,有助于理解OpenCV的图像操作、Moviepy生成视频的实现。
  • MoviePy中文乱码的原因以及解决办法

    千次阅读 2018-11-22 15:29:59
    很多朋友在群里面提问说...from moviepy.editor import TextClip txtClip = TextClip('我爱你中国',color='white', font=&amp;quot;Amiri-Bold&amp;quot;,kerning = 5, fontsize=100) 结果大多数都...
  • 本节介绍了moviepy打包报错原有《 moviepy应用pyinstaller打包后执行报错AttributeError: module audio/video.fx.all has no attribute 'fadein'、crop》中的解决办法存在Python3.8.5的环境下的`TypeError: 'module'...
  • 本文是笔者基于moviepy.video.VideoClip.py的文档字符串以及源代码,结合查阅资料和验证测试,断断续续持续了一个多星期探索的结果。详细介绍了视频剪辑基类VideoClip的构造方法、属性和相关处理方法,其中很多方法...
  • moviepy使用教程

    千次阅读 2020-07-22 17:19:21
    moviepy使用教程一、剪辑成果二、遇到问题三、moviepy方法分享一、音频剪辑方法二、视频剪辑方法 一、剪辑成果 未来 二、遇到问题 尝试使用ffmpeg、moviepy、pydub,其中pydub主要是对音频的处理,moviepy对...
  • 如何高效率使用MoviePy 接下来,这一节将会介绍许多全世界MoviePy开发者总结的开发经验。 开始学习使用MoviePy最好的方式是使用IPython Notebook:它可以让预览clip变得简单,有自动补全的功能,而且可以显示函数...
  • 下面是MoviePy中的几种对clip的修改: 非常常见的修改clip属性的方法有:clip.set_duration, clip.set_audio, clip.set_mask, clip.set_start 等. 已经实现的特效.clip.subclip(t1,t2):截取t1到t2时间段内的片段;...
  • 老猿的付费专栏《使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑...
  • 本文详细介绍了视频剪辑基类VideoClip的构造方法、属性和相关处理方法,相关内容参考了moviepy.video.VideoClip.py的文档字符串以及源代码,并针对部分疑难点进行了资料查询和测试,相关内容的探索和写作断断续续...
  • ☞ ░ 前往老猿Python博文目录 ░ 一、背景知识介绍 1.1、... 更多moviepy的介绍请参考《PyQt+moviepy音视频剪辑实战文章目录》或《moviepy音视频开发专栏》。 跟老猿学Python、学5G! ☞ ░ 前往老猿Python博文目录 ░
  • 使用Python+Moviepy 5行代码实现两视频顺序拼接

    千次阅读 热门讨论 2021-03-12 22:08:52
    本文介绍了使用Python+Moviepy五行代码实现两个MP4视频文件合并成一个顺序播放的视频的方法,并介绍了相关处理的关键函数及语法,Moviepy不光能处理MP4格式的视频文件,实际上所有FFmpeg格式的视频文件Moviepy都能...
  • MoviePy 安装 配置和应用

    千次阅读 2019-03-18 11:26:58
    参考文献:1.https://blog.csdn.net/kd_2015/article/details/80157713MoviePy 安装 配置 2.http://hao.jobbole.com/moviepy/Moviepy:用脚本来编辑电影 3....
  • MoviePy - 中文文档2-快速上手-MoviePy-视频合成

    万次阅读 多人点赞 2018-08-01 16:32:22
    目前使用moviepy的项目里各种问题接踵而至,第一批我只采集了1w个抖音短视频做视频合成,不得不说,moviepy还是不少缺陷的,最开始的大部分时候是ffmpeg引起的OOM,是我分配的内存不够,加大资源分配,每次运行完毕...
  • moviepy 无法显示中文,字幕设置效果无效 2,贴上相关代码: ``` # -*- coding: utf-8 -*- #encoding=utf-8 #导入模块 from moviepy.editor import * #设置字幕路径 FONT_URL2 = '/font/庞门正道...
  • moviepy官网的案例《Tracking and blurring someone’s face》和CSDN的moviepy大神ucsheep《MoviePy - 中文文档4-MoviePy实战案例-追踪人脸,打马赛克》都提供了追踪人脸并给影片中卓别林脸部打马赛克的样例,二者...
  • 在《OpenCV-Python常用图像运算:加减乘除幂开方对数及位运算》介绍了OpenCV主要的图像运算,视频是由一帧帧图像构成,通过OpenCV和Moviepy的灵活运用,可以实现一些特殊的特效。本文将介绍通过OpenCV图像运算+...
  • 本文基于moviepy文档总结内容。觉得文档内容不够吃的话可以翻阅下面两份文档自行学习。 moviepy中文文档 moviepy英文文档 from moviepy.editor import * # 素材视频 video = VideoFileClip("换个树洞也都进去了.mp4...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,265
精华内容 1,306
关键字:

moviepy