1.1 顺序播放
from moviepy.editor import VideoFileClip, concatenate_videoclips
clip1 = VideoFileClip("myvideo.mp4")
clip2 = VideoFileClip("myvideo2.mp4").subclip(50,60)
clip3 = VideoFileClip("myvideo3.mp4")
final_clip = concatenate_videoclips([clip1,clip2,clip3])
final_clip.write_videofile("my_concatenation.mp4")
依次播放,视频的大小以第一个视频为准,视频的大小为最大的剪辑的大小,小于该大小的剪辑可以选择填充颜色,也可以设置过度效果
transaction=myclip
1.2 Stack播放
就是使用
clips_array
将剪辑堆叠到窗口中一起进行播放
from moviepy.editor import VideoFileClip, clips_array, vfx
clip1 = VideoFileClip("myvideo.mp4").margin(10)
clip2 = clip1.fx( vfx.mirror_x)
clip3 = clip1.fx( vfx.mirror_y)
clip4 = clip1.resize(0.60)
final_clip = clips_array([[clip1, clip2],
[clip3, clip4]])
final_clip.resize(width=480).write_videofile("my_stack.mp4")
1.3 CompositeVideoClips
将剪辑以图层的形式一起进行播放
video = CompositeVideoClip([clip1,clip2,clip3])
clip3在最上层,依次clip2,clip1。 重叠的部分会被遮挡,除非顶层会有mask遮罩层。组合的剪辑的大小默认为clip1的大小,即最底层的剪辑的大小。也可以自己指定大小
video = CompositeVideoClip([clip1,clip2,clip3], size=(720,460))
1.3.1 设置剪辑的start时间和进入特效
video = CompositeVideoClip([clip1,
clip2.set_start(5).crossfadein(1),
clip3.set_start(9).crossfadein(1.5)])
1.3.2 设置位置
video = CompositeVideoClip([clip1,
clip2.set_pos((45,150)),
clip3.set_pos((90,100))])
clip2.set_pos((45,150))
clip2.set_pos("center")
clip2.set_pos(("center","top"))
clip2.set_pos(("left","center"))
clip2.set_pos((0.4,0.7), relative=True)
clip2.set_pos(lambda t: ('center', 50+t) )
1.3.3 混合音频剪辑
MoviePy会自动把你组合的音轨加到最终的 video clip 中,不需要手动组合
from moviepy.editor import *
concat = concatenate_audioclips([aclip1, aclip2, aclip3])
compo = CompositeAudioClip([aclip1.volumex(1.2),
aclip2.set_start(5),
aclip3.set_start(9)])
2.剪辑的变换和效果
2.1 特效
moviepy.video.fx 和 moviepy.audio.fx 中有很多已经实现的效果,但是这些方法都不会在原来的剪辑上进行修改,而是生成一个新的剪辑
from moviepy.editor import *
clip = (VideoFileClip("myvideo.avi")
.fx( vfx.resize, width=460)
.fx( vfx.speedx, 2)
.fx( vfx.colorx, 0.5))
常用的特效可以使用一些一般化的方法而不是使用
.fx()
,比如
resize()
,使用
.fx( vfx.resize, width)
就显得比较复杂,可以使用
clip.resize()
设置起始时间的方式
clip.subclip(t_start,t_end)
t_start=230.54
t_start=(3,50.54)
t_start=(0,3,50.54)
t_start='00:03:50.54'
clip.subclip(-20, -10)
2.2 创建自己的特效
2.2.1 修改时间线
modifiedClip1 = my_clip.fl_time(lambda t: 3*t)
modifiedClip2 = my_clip.fl_time(lambda t: 1+sin(t))
modifiedClip1:以3倍的速度进行播放
modifiedClip2:在0到2秒之间进行摆动,这是一个不会停止的剪辑
2.2.2 反转颜色
def invert_green_blue(image):
return image[:,:,[0,2,1]]
modifiedClip = my_clip.fl_image( invert_green_blue )
2.2.3 通过frame
def scroll(get_frame, t):
This function returns a 'region' of the current frame.
The position of this region depends on the time.
frame = get_frame(t)
frame_region = frame[int(t):int(t)+360,:]
return frame_region
modifiedClip = my_clip.fl( scroll )
2.2.4 推荐
能使用fl_time、fl_image实现效果就用fl_time或者fl_image,这样渲染的速度会很快
3 如何有效的利用moviepy?
3.1 我是否应该使用moviepy.editor?
-
如果你使用moviepy手工编辑视频,使用它
-
如果你在大型库或者webserver中使用,则不需要使用它
3.2 加载moviepy.editor
from moviepy.editor import *
import moviepy.editor as mpy
from moviepy.editor import VideoFileClip
这样可以导入所有的类,但是要花费大约1秒的时间,如果你想更快可以直接导入你需要的东西
比如
from moviepy.video.io.VideoFileClip import VideoFileClip
from moviepy.video.fx.resize import resize
3.3 预览clip的方法
3.3.1 存储某一帧的图像
my_clip.save_frame("frame.jpeg")
my_clip.save_frame("frame.png", t=2)
3.3.2 通过PyGame Window
需要先安装pygame
显示某一帧
my_clip.show()
my_clip.show(10.5)
my_clip.show(10.5, interactive = True)
interactive=True
代表你可以在画面上点击以显示位置和像素的颜色,按esc可以退出
my_clip.preview()
my_clip.preview(fps=25)
my_clip.preview(fps=15, audio=False)
my_audio_clip.preview(fps=22000)
3.4 ipython预览
通过
ipython_display
方法来预览一个clip或者图片,或者MP4
ipython_display(my_video_clip)
ipython_display(my_imageclip)
ipython_display(my_audio_clip)
ipython_display("my_picture.jpeg")
ipython_display("my_video.mp4")
ipython_display("my_sound.mp3")
直接调用clip的方法
my_video_clip.ipython_display()
调整预览窗口的大小
ipython_display(my_clip, width=400)
3.5 音频 MoviePy
3.5.1 获取AudioClip
从文件中获取
from moviepy.editor import *
audioclip = AudioFileClip("some_audiofile.mp3")
audioclip = AudioFileClip("some_video.avi")
从clip中获取
videoclip = VideoFileClip("some_video.avi")
audioclip = videoclip.audio
3.5.2 为clip设置音轨
videoclip2 = videoclip.set_audio(my_audioclip)
1. 混合播放1.1 顺序播放from moviepy.editor import VideoFileClip, concatenate_videoclipsclip1 = VideoFileClip("myvideo.mp4")clip2 = VideoFileClip("myvideo2.mp4").subclip(50,60)clip3 = VideoFileClip(...
☞ ░ 前往老猿
Python
博文目录 ░
在《
moviepy
音
视频剪辑
:
moviepy
中的剪辑相关类及关系》介绍了剪辑相关类及关系,其中VideoClip有多个直接子类和间接子类。
本文中将介绍的DataVideoClip、UpdatedVideoClip、ImageClip、ColorClip、TextClip都是VideoClip的子类,其中DataVideoClip、UpdatedVideoClip在前面文中未进行介绍,之所以将这几个类在此一并介绍,是因为这几个类都在VideoClip类相
一、视频合成概述
视频合成,也称为非线性
编辑
,实际上是在一个新剪辑中播放几个剪辑。
请注意
视频剪辑
通常带有音频和遮罩,它们也是剪辑。当您将这些剪辑组合在一起时,通过将剪辑的原声和遮罩组合在一起,将自动生成最终剪辑的原声和遮罩。所以大多数时候你不需要担心混音和面具。
两种简单的剪辑合成方法是将它们拼接起来(在一个长剪辑中一个接一个地播放它们)或将它们堆叠起来.
前几天我在抖音上刷到一个慢慢变老的视频,播放量居然有 30W+,当时就在想这视频
Python
可不可以做?经过一番搜索,我找到了腾讯云的人脸年龄变化 API,上面介绍说只要用户上传一张人脸图片,基于人脸
编辑
与生成算法,就可以输出一张人脸变老或变年轻的图片,并支持实现人脸不同年龄的变化。
获取 API 秘钥
第一步,在注册账号之后,打开 API 密钥管理页面(https://console.cloud.tencent.com/cam/capi)获取到 SecretId 和 SecretKey。
# 创建输出视频
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('output.mp4', fourcc, fps, (width, height))
# 遍历帧
for i in range(frame_count):
# 读取帧
ret, frame = video.read()
# 判断是否在剪辑范围内
if start_frame <= i < end_frame:
out.write(frame)
# 如果已经到达结束帧,退出循环
if i == end_frame:
break
# 释放资源
video.release()
out.release()
以上代码仅供参考,你可以根据需要进行修改。