摘要:有任何问题,可以主页左侧联系我,在我能力范围内,愿意帮助你。本视频教程虽然演示有些娱乐,实际上可以用于更多实际用途。制作不易,你的三连是我莫大的支持。比如这里我将视频的到秒截取下来保存为。九图片合成视频为了演示,我九合成,因为语法都一样。
看够了吗?看够了就开始自己来学着做吧!!!
每一句话都是干货,每一步你都要亲自操作,你才能感受到它的乐趣并同时学习python。有任何问题,可以主页左侧联系我,在我能力范围内,愿意帮助你。本视频教程虽然演示有些娱乐,实际上可以用于更多实际用途。制作不易,你的三连是我莫大的支持。
无脑安装:
pip install moviepypip install ez_setup
如果你不会下载,可百度网盘下载,再按照我下面的教程安装:
ImageMagick软件链接:https://pan.baidu.com/s/1SsDZF0ThQhaQwHi-mWfxmQ 提取码:931q
当然你也可以按照我如下方式从头开始下载安装:
官网链接如下:
https://www.imagemagick.org/script/index.php
进去之后:
然后往下滑,找到window版本下载:
然后双击安装,勾选accept:
无脑next后选择安装在D盘:
next后勾选配置:
又是无脑next,最后finish
最后测试一下,在cmd执行:
magick --version
可以看到成功了:
现在还需要找到自己moviepy安装包路径,比如我的为
c:/users/hp/appdata/local/programs/python/python39/lib/site-packages
怎么找路径?再下载一次moviepy模块,就会显示出路径了:
然后再文件夹跳到该目录下找到模块:
进去后修改为如下内容:(记得保存)
保存过后久好了!
比如我要把冒泡排序视频转为gif,代码如下:
from moviepy.editor import *clip = (VideoFileClip("bili.mp4"))clip.write_gif("转gif.gif")
效果为:
在这里你需要知道一点的是:subclip()函数对应的参数为需要截取的视频起点和终点,其它的代码部分并不用更改。比如这里我将视频的0到3秒截取下来保存为gif。
from moviepy.editor import *clip = (VideoFileClip("bili.mp4") .subclip(0, 3))clip.write_gif("截取.gif")
效果展示:
这里是截取视频4到6秒,缩小为原来的0.5倍,保存为缩小.gif
from moviepy.editor import *##截取4到6秒,缩小为原来的0.5倍clip = (VideoFileClip("美女.mp4") .subclip(4, 6) .resize(0.5))clip.write_gif("缩小.gif")
效果展示:
在典型的MoviePy脚本是这样的:加载视频或音频、修改、将他们连接在一起并最后生成一个新视频文件。比如我要加载我录制的的视频,降低音量,在前3秒添加标题在视频的中央,然后写入mp4文件.
代码注释如下:
from moviepy.editor import *# 加载美女视频截取7搭配12秒部分clip = VideoFileClip(r"美女.mp4").subclip(7,12)# 降低音量为原来的0.8倍clip = clip.volumex(0.8)# 主题文字,文字等效和颜色 这里的字体只能为英文txt_clip = TextClip("chuan",fontsize=70,color="white")# 在前3秒的视频中央填出现:chuantxt_clip = txt_clip.set_pos("center").set_duration(3)# 覆盖文本第一视频剪辑video = CompositeVideoClip([clip, txt_clip])# 写入为新的文件,我保存为mp4video.write_videofile("bili美女.mp4")
效果如下:
为了演示动态,我先把生成的视频转为gif,因此需要执行一遍如下代码:
from moviepy.editor import *clip = (VideoFileClip("bili美女.mp4"))clip.write_gif("舞蹈.gif")
效果如下:
使用clip_array函数对剪辑进行堆叠操作,代码如下:
from moviepy.editor import VideoFileClip, clips_array, vfxclip1 = VideoFileClip("bi.mp4").margin(5) # add 10px contourclip2 = clip1.fx( vfx.mirror_x)clip3 = clip1.fx( vfx.mirror_y)clip4 = clip1.resize(0.99) # downsize 60%final_clip = clips_array([[clip1, clip2], [clip3, clip4]])final_clip.resize(width=480).write_videofile("堆叠.mp4")
视频如下:
但是为了演示动态视频,于是我又把他转为gif,执行以下代码:
from moviepy.editor import *clip = (VideoFileClip("堆叠.mp4"))clip.write_gif("堆叠.gif")
效果如下:
起始和终止时间
clip1 = clip1.set_start(5) # 五秒后
例如你的剪辑看起来会是这样:
video = CompositeVideoClip([clip1, # 从0秒开始 clip2.set_start(3), # 1秒开始 bi.mp4剪切4秒 clip3.set_start(2)]) # 2秒开始 bili美女.mp4剪切三秒
clip2可能先于clip1的结束时间开始。在这种情况下,你可以给clip2添加一个1秒钟的淡入效果:
video = CompositeVideoClip([clip1, # starts at t=0 clip2.set_start(3).crossfadein(2), clip3.set_start(2).crossfadein(2)])
剪辑的定位
如果clip2和clip3都比clip1小,你可以决定他们出现在视频中的位置。在这里,我们指定了剪辑左上角像素的坐标:
video = CompositeVideoClip([clip1, clip2.set_pos((45,150)), clip3.set_pos((90,100))])
有很多方法可以指定位置:
clip2.set_pos((45,150)) # x=45, y=150 , in pixelsclip2.set_pos("center") #自动剧中# clip2 水平居中,在图片的顶部clip2.set_pos(("center","top"))# clip2 垂直居中,在图片的左侧clip2.set_pos(("left","center"))# clip2 位于屏幕宽度的 40%,高度的 70%:clip2.set_pos((0.4,0.7), relative=True)# clip2"s position is horizontally centered, and moving down !clip2.set_pos(lambda t: ("center", 50+t) )
指定坐标的时候请记住,y坐标的0位置在图片的最上方:
这个太难调了,不演示了,感兴趣自己去调一下。
为了演示,我九合成gif,因为语法都一样。
from moviepy.editor import *# fps控制速度,列表图片大小必须完全一致,否则报错clip = ImageSequenceClip(["1.jpg","3.jpg", "4.jpg","5.jpg","6.jpg"], fps=1)clip.write_gif("合成.gif")
效果如下:
是不是在想给自己女朋友也做一个?
这里并不用描述太多,可以直接看我录的教程视频:
桌面动态美女背景设置教程
如果你没有网盘会员,下载可能会很大,需要我直接发你文件也可以主页左侧联系我。链接:https://pan.baidu.com/s/1Rg9s08b2-F_ZoflxIhTkUQ 提取码:f29a
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/118844.html
摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...
摘要:我最开始学习编程的时候也是如此,摸索了非常久的时间,才慢慢找到自己高效学习方法。被动的学习方式听讲阅读视听演示,只能让你做到内容留存率的和的知识。而主动的学习方式,如通过讨论实践教授给他人,会将原来被动学习的内容留存率从提升到和。 showImg(https://segmentfault.com/img/remote/1460000016856679); 阅读文本大概需要 7 分钟。 ...
摘要:上班太忙没时间自己学习很多人认为自己没有成为技术大牛并不是自己不聪明,也不是自己不努力,而是中国的这个环境下,技术人员加班都太多了,导致自己没有额外的时间进行学习。 写在前面 不管是开发、测试、运维,每个技术人员心里多多少少都有一个成为技术大牛的梦,毕竟梦想总是要有的,万一实现了呢!正是对技术梦的追求,促使我们不断地努力和提升自己。然而梦想是美好的,现实却是残酷的,很多同学在实际工作后...
文章目录 一、前言二、演示看效果!三、网站制作四、部署网站五、二维码制作六、强烈推荐系列教程,建议学起来!!七、总结 一、前言 跟着我做,做成功就去表白,不介意的话表白成功给我打个赏。第一步是制作网站;第二步是部署网站,第三步是二维码制作。所有源码我都给了大家,如果你是小白,中途遇到不会的问题,可以主页加群联系我(粉丝群少的可怜) 二、演示看效果! b站演示(录了一部分): csdn作品展...
摘要:几乎每一个接口被调用后,都要记录一条跟这个参数挂钩的特定的日志到数据库。我最终采用了的方式,采取拦截的请求的方式,来记录日志。所有打上了这个注解的方法,将会记录日志。那么如何从众多可能的参数中,为当前的日志指定对应的参数呢。 前言 不久前,因为需求的原因,需要实现一个操作日志。几乎每一个接口被调用后,都要记录一条跟这个参数挂钩的特定的日志到数据库。举个例子,就比如禁言操作,日志中需要记...
阅读 848·2021-11-19 09:40
阅读 2092·2021-11-15 18:00
阅读 1065·2021-10-18 13:34
阅读 2087·2021-09-02 15:40
阅读 3015·2021-09-02 15:34
阅读 1424·2019-08-30 14:01
阅读 952·2019-08-30 11:11
阅读 2355·2019-08-29 15:26