以绘画效果冻结帧¶
原文链接:http://zulko.github.io/moviepy/examples/painting_effect.html
这是一种我们经常在西部片之类看到的效果:
视频地址:https://youtu.be/aC5CifkacSI
这个方法可以使照片看起来像绘画:
- 使用Sobel算法对图片进行边缘检测,从而获得一张看起来像黑白手绘的照片。
- 叠加图像的数组使颜色更加华丽,并添加在上一步骤中获得的轮廓。
最终剪辑将会把三个部分联结起来:特效之前的部分,带有特效的部分和特效之后的部分。带有特效的部分以以下方式获得:
- 选择一帧进行冻结,使之转为绘画效果,并使其成为一个图像剪辑。
- 添加文字剪辑“Audrey”至图像剪辑。
- 将修改过的图像剪辑添加至原帧的顶层,但给其添加淡入淡出效果。
代码如下:
""" requires scikit-image installed (for vfx.painting) """
from moviepy.editor import *
# WE TAKE THE SUBCLIPS WHICH ARE 2 SECONDS BEFORE & AFTER THE FREEZE
charade = VideoFileClip("../../videos/charade.mp4")
tfreeze = cvsecs(19.21) # Time of the freeze, 19'21
# when using several subclips of a same clip, it can be faster
# to create 'coreaders' of the clip (=other entrance points).
clip_before = charade.coreader().subclip(tfreeze -2,tfreeze)
clip_after = charade.coreader().subclip(tfreeze ,tfreeze +2)
# THE FRAME TO FREEZE
im_freeze = charade.to_ImageClip(tfreeze)
painting = (charade.fx( vfx.painting, saturation = 1.6,black = 0.006)
.to_ImageClip(tfreeze))
txt = TextClip('Audrey',font='Amiri-regular',fontsize=35)
painting_txt = (CompositeVideoClip([painting,txt.set_pos((10,180))])
.add_mask()
.set_duration(3)
.crossfadein( 0.5)
.crossfadeout( 0.5))
# FADEIN/FADEOUT EFFECT ON THE PAINTED IMAGE
painting_fading = CompositeVideoClip([im_freeze,painting_txt])
# FINAL CLIP AND RENDERING
final_clip = concatenate_videoclips([ clip_before,
painting_fading.set_duration(3),
clip_after])
final_clip.write_videofile('../../audrey.avi',fps=charade.fps,
codec = "mpeg4", audio_bitrate="3000k")