Skip to content

3.2.视频剪辑自动化

使用MoviePy模块处理视频

视频实际上是由一系列静态图像组成的,每张图像称为一帧,通常每秒视频包含24~30帧甚至更多帧。使用MoviePy模块的write_images_sequence()函数可以方便地将视频导出为一张张图片。

如果只需要截取某个时间点的画面,使用MoviePy模块中的save_frame()函数就可以啦。

在微信上发的一些有趣的GIF动画表情,好像是用视频转换生成的。使用MoviePy模块中的write_gif()函数可以将视频导出为GIF动画。

既然可以将视频转换为图片,那么能不能用图片合成视频呢?用MoviePy模块中的ImageSequenceClip类很容易就能实现。

想把多个视频素材拼接在一起,但是它们的画面尺寸大小不一,有没有必要预先调整成一样的大小呢?介绍过一个参数target_resolution,通过它可以在读取视频文件时更改画面尺寸。

从视频素材中截取需要的片段也就成了视频剪辑中最重要的基本操作之一。使用MoviePy模块中的subclip()函数截取视频片段。

用图像处理软件裁剪照片,保留画面中指定的矩形区域。那么是不是也能对视频画面进行裁剪呢?视频画面实际上是由一帧帧图像组成的,所以,对视频画面同样可以进行裁剪。这个操作要用到MoviePy模块中的crop()函数。

有的视频作品会用快镜头增加节奏感,有的则会用慢镜头渲染艺术意境。这些视频作品实际上是在后期剪辑中把播放速度加快或放慢的。如果要通过编写Python代码来实现变速效果,可以使用MoviePy模块的speedx()函数。

灰度效果的画面单纯而简洁,具有独特的韵味。有一些怀旧或复古主题的作品也需要借助灰度画面来烘托氛围。使用MoviePy模块中的blackwhite()函数将彩色视频转换为灰度视频。

拍的视频素材经常不是画面太亮就是画面太暗,总是很难达到理想的效果。我们可以在后期处理中使用MoviePy模块的colorx()函数调整视频画面的明度。

有时由于拍摄环境中的光线不理想,我拍出来的视频在亮度和对比度上都存在缺陷。使用MoviePy模块的lum_contrast()函数就可以同时调整视频画面的亮度和对比度。

简单拼接多段视频的话,使用MoviePy模块的concatenate_videoclips()函数就可以了。

如果视频素材的画面尺寸不同,需将concatenate_videoclips()函数的参数method设置为'compose',否则拼接得到的视频可能会有花屏现象

拼接不同画面尺寸视频的另一种方法是先用resize()函数将多个视频的画面调整成相同的尺寸,再用concatenate_videoclips()函数进行拼接。

能不能实现在一个大画面中同时呈现多个小画面的效果呢?使用MoviePy模块的CompositeVideoClip类可以叠加视频片段,再结合使用set_position()函数设置每个视频片段在画面中的位置,就能实现你想要的效果啦。

通过设置TextClip类的stroke_color和stroke_width这两个参数,可以为标题字幕添加描边效果。

很多电影和电视剧的片尾都会用由下向上滚动的字幕来展示制作单位和演职人员信息。如何用Python制作这种滚动字幕效果呢?可以先用MoviePy模块中的credits1()函数加载文本文件的内容生成字幕,再用scroll()函数让字幕由下向上滚动。

使用set_duration()函数设置图片水印的显示时长。如果想要分别设置图片水印开始显示和结束显示的时间。

使用PyAV模块处理视频

av.frame_process(): 对输入流中的每一帧进行处理,包括解码、分离通道、转换格式等。