python中的视频编辑与合成
vidp的Python项目详细描述
基于MLT Multimedia Framework的python视频编辑器和合成器。
维迪现在在阿尔法-可能有很多虫子,而且 api可能会改变。如果你对测试感兴趣, 请这样做,并在issue tracker中留下评论/建议/问题。
在这里阅读完整的文档:https://antiboredom.github.io/vidpy
安装/依赖项
vidpy需要熔化,这可能很难在mac和 窗户。最简单的选择是安装shotcut(一个开源视频 编辑器)它附带了一个预先构建的熔融二进制文件。
Mac/Windows
- Install Shotcut(在装有brew的Mac上:brew cask install shotcut
- 使用pip install vidpy 安装vidpy
ubuntu/debian
- 安装熔体:sudo apt-get install melt
- 安装vidpy:pip install vidpy
设置
Vidpy将尝试定位熔融二元体,首先搜索 在Mac/Windows上安装Shotcut。你也可以将vidpy指向 特定二进制,如so:
fromvidpyimportconfigconfig.MELT_BINARY='/path/to/melt'
概述
使用Clip类创建和操作视频剪辑,以及 Composition类来组合剪辑。
Composition()将剪辑列表作为输入,然后允许您 使用save()保存输出视频,或使用preview()预览。
默认情况下,构图会将每个剪辑视为单独的曲目, 同时播放它们。
fromvidpyimportClip,Compositionclip1=Clip('video.mp4')clip2=Clip('anothervideo.mp4')# play videos on top of each othercomposition=Composition([clip1,clip2])composition.save('output.mp4')
您可以告诉剪辑何时开始播放offset参数, 或者在实例化后使用set_offset()。所有时间都以秒为单位。
# start playing clip one after 1.5 secondsclip1=Clip('video.mp4',offset=1.5)clip2=Clip('anothervideo.mp4')clip2.set_offset(5)# start clip2 after 5 secondscomposition=Composition([clip1,clip2])composition.save('output.mp4')
使用start和end参数或使用^{tt14}参数修剪剪辑$ 方法。
# only use the first second of the clipclip1=Clip('video.mp4',start=0,end=1)clip2=Clip('anothervideo.mp4')clip2.cut(start=2,end=4)# use clip2 from 2 to 4 seconds
你也可以一个接一个地播放片段(而不是同时播放 通过将singletrack=True作为参数添加到合成中。
composition=Composition([clip1,clip2],singletrack=True)composition.save('output.mp4')
Composition还允许您设置维度、fps和背景 颜色。
# create a 1280x720 composition at 30 fps with a red backgroundcomposition=Composition(clips,bgcolor="#ff0000",width=1280,height=720,fps=30)# preview itcomposition.preview()
最后,可以将合成转换为剪辑以重用。
comp=Composition([clip1,clip2,clip3],singletrack=True)clip=Clip(comp)# do stuff with the entire compositionclip.cut(0,1)
过滤和效果
vidpy内置了许多效果:
clip.fadein(1)# fade the clip in over 1 secondclip.fadeout(0.5)# fade the clip over 0.5 secondsclip.glow()# add a glow effectclip.spin(2)# make the clip spin around. (Why would you do this? I don't know!)clip.chroma()# attempt to automatically remove the background colorclip.volume(0)# mute a video# set clip's positionclip.position(x=100,y=20)# resize a clipclip.position(w='50%',h='20%'')# start the clip scaled to 200% at coordinates (0, 0)# then move it to (200, 200) and scale it to 90% over 5 secondsclip.zoompan([0,0,'200%','200%'],[200,200,'90%','90%'],start=0,end=5)
有关完整列表,请参阅筛选器文档:(链接到come)
您还可以将any filter supported by mlt与 fx方法。第一个参数应该是过滤器的名称,并且 第二本是选项词典。
例如,要添加cartoon effect:
# use the full filter name as the first parameter# and then a dictionary of options, based on the mlt documentationclip.fx('frei0r.cartoon',{'0':0.999})
或者,play with colors:
clip.fx('avfilter.colorchannelmixer',{'av.rr':2,'av.br':2})
记住查看mlt文档,找出要传递的参数 在。
文本
使用Text类添加文本剪辑
fromvidpyimportTexttext_clip=Text("A spectre is haunting Europe.",font="Comic Sans Ms",size=100,color="#ff0000")
文本剪辑的一些可选参数是:
font系统上的任何字体名
color文本颜色
weight介于100和1000之间
style普通或斜体
olcolor轮廓颜色
outline外形尺寸
halign水平对齐(左、中、右)
valign垂直对齐(上、中、下)
bbox将文本放入(x,y,width,height)的边框
学分
维迪是靠Sam Lavigne,从 MoviePy by Zulko。