【MoviePy 中文文档】冻结具有绘画效果的影片帧
这是我们在西方片中看到的一种效果。
用于使照片看起来像绘画的配方:
使用 Sobel 算法查找图像的边缘,你得到了一张看起来像是黑白手绘的照片。
将图像阵列相乘,使颜色更明亮,并将上一步获得的轮廓相加。
最后的剪辑将由三部分串联而成:效果之前的部分、有效果的部分和效果之后的部分。具有效果的部分如下所示:
把相框固定下来,制作一个“绘画图像”。把它做成一个剪辑。
在“绘画图像”剪辑中添加一个文字剪辑,上面写着“Audrey”。
将绘制的片段覆盖在原始帧上,但使其以渐变效果出现和消失。
这是代码:
''' requires scikit-image installed (for vfx.painting) ''' from moviepy.editor import * # 我们取冻结前后2秒的影片 charade = VideoFileClip('../../videos/charade.mp4') # 冻结时间:19'21tfreeze = cvsecs(19.21) # 当使用同一剪辑的多个子剪辑时,速度会更快# 创建剪辑的“coreaders”(等于其他入口点)。clip_before = charade.coreader().subclip(tfreeze -2, tfreeze)clip_after = charade.coreader().subclip(tfreeze, tfreeze + 2) # 要冻结的帧 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)) # 绘画图像上的淡入/淡出效果 painting_fading = CompositeVideoClip([im_freeze, painting_txt]) # 最终剪辑和渲染 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')