zoukankan      html  css  js  c++  java
  • python--moviepy--视频编辑

    MoviePy是一个用于视频编辑的python模块,你可以用它实现一些基本的操作(比如视频剪辑,视频拼接,插入标题),还可以实现视频合成,还有视频处理,抑或用它加入一些自定义的高级的特效。总之,它的功能还是蛮丰富的。此外,MoviePy可以读写绝大多数常见的视频格式,甚至包括GIF格式!是不是很兴奋呢?基于Python2.7以上的版本,MoviePy可以轻松实现跨平台,Mac/Windows/Linux统统没问题,这也以意味着,MoviePy项目可以部署到服务端,在服务端进行视频处理。真是福音啊!

    安装:  pip install moviepy -i https://pypi.douban.com/simple

    from moviepy.editor import *
    
    video=VideoFileClip("1.mp4")  #导入视频
    vid=video.subclip(50,60)  #截取视频
    #截取00:00:50 - 00:00:60部分
    
    vid.write_videofile("my.MP4")  #把vid视频写入my.MP4文件

    时间既可以用(t_start=230.54),以秒的时间来表示,也可以用(t_start=(3,50.54)),以3分50.54秒的形式来表示,还可以 (t_start=(0,3,50.54))或者 (t_start=(00:03:50.54)),以,小时,分钟,秒的形式老表示

    大多数没有赋值的时间参数会有一个默认值,比如clip.subclip(t_start=50),t_end的默认值就是视频的长度,clip.subclip(t_end=50),那么t_start就默认为0.当时间是负数的时候,代表倒数n秒。比如,clip.subclip(-20, -10)会截取倒数20秒到倒数10秒之间的片段

    video.write_videofile("my.mp4",audio=False)  #把视频写入文件
    #audio=False   表示去掉音频;这个指令推荐去掉音频,因为很容易出错--后面再加上音频
    video = vid.subclip(10, vid.duration-12) # 剪辑视频,从10秒开始到视频结尾前12秒

    视频合成: 

    from moviepy.editor import *
    
    vid2=VideoFileClip("b.mp4")
    vid3=VideoFileClip("c.mp4")
    
    video = concatenate_videoclips([vid2, vid3])  #视频合成--视频拼接
    #并不需要相同的时长或者大小
    #注意:合并视频的尺寸要一样,否则后面的视频会出现花屏
    video.write_videofile("my.mp4")
    s=vid1.reader.size  #返回视频的尺寸
    #[960, 540]

    缩放:

    from moviepy.editor import *
    
    vid1=VideoFileClip("a.mp4")
    s=vid1.reader.size  #返回视频的尺寸
    #[960, 540]
    print(s)
    s=vid1.reader.fps  #返回的帧率
    v=vid1.resize(0.5)  #尺寸等比缩放0.5
    #注意:只有写入文件后才有效果
    
    v.write_videofile("my.mp4")
    vid=VideoFileClip("a.mp4")
    s=vid.reader.size
    print('原视频尺寸:',s)
    vid1=vid.resize(width=480)  #修改视频的尺寸
    #当我们写出clip.resize(width=480),moviepy并不是立刻就逐帧修改clip。一般只会先修改第一帧,其他的左右的帧只有在需要的时候(最后写入文件或者预览)才会被resize。另一方面,可以这样讲,创建一个clip,几乎是不会占用时间和内存的,几乎所有的计算其实发生在最后转换的时刻
    #宽高都是同时按比例修改的
    video = vid.speedx(2)  # 2倍速
    vid.save_frame("frame.jpeg")        #保存第一帧
    vid.save_frame("frame.png", t=2)    #保存2s时刻的那一帧
    vid=VideoFileClip("a.mp4")
    txt = TextClip("my sipin 2019",fontsize=70,color='white')  #创建文本对象
    #不支持中文
    txt = txt.set_pos('center').set_duration(10)   # 文本clip在屏幕正中显示持续10秒
    video = CompositeVideoClip([vid, txt])  #把文本合成到视频中
    vid=VideoFileClip("a.mp4")
    vid1 = vid.fx(vfx.mirror_x)   #x轴镜像
    vid2 = vid.fx(vfx.mirror_y)  #y轴镜像
    
    video = clips_array([[vid, vid1],[vid, vid2]])  #视频叠加
    
    video.write_videofile("my.mp4",audio=False)

    效果:

    vid=VideoFileClip("b.mp4")
    vid1=VideoFileClip("a240.mp4")

    video = CompositeVideoClip([vid,vid1.set_pos((45,150))]) #前后叠加合成
    #参数2视频在参数1视频的前面
    #合成之后的视频尺寸是参数1视频的尺寸
    #set_pos((45,150) 是视频的坐标位置

    set_pos("center") #居中
    set_pos(("center","top")) #水平方向居中,垂直方向在顶部
    set_pos(("left","center")) #水平方向在左边,垂直方向居中
    set_pos((0.4,0.7), relative=True) #0.4倍宽处,0.7倍高处
    set_pos(lambda t: ('center', 50+t)) #水平居中,向下移动

    效果:

    音频: 

    vid=VideoFileClip("b.mp4")
    audioclip =AudioFileClip("b.mp4")  #从视频文件中提取音频
    audioclip1 =vid.audio   #从视频对象中提取音频
    audioclip.write_audiofile('b.mp3')  #写入音频文件
    vid=VideoFileClip("mywusen.mp4")  #无声视频
    audioclip =AudioFileClip("b.mp4")  
    video = vid.set_audio(audioclip)  #音频视频合成
    
    video.write_videofile("my.mp4")

    解决错误问题: 

    出现 'NoneType' object has no attribute 'stdout'

    参看:https://blog.csdn.net/RocHoo/article/details/103273603  

     

     

     

    moviepy中文手册   http://www.moviepy.com.cn/thread-30-1-1.html 

  • 相关阅读:
    【BZOJ1089】[SCOI2003]严格n元树(高精度,动态规划)
    【BZOJ1083】[SCOI2005]繁忙的都市(最小生成树)
    【BZOJ1082】[SCOI2005]栅栏(搜索)
    【BZOJ1081】[SCOI2005]超级格雷码(搜索)
    【BZOJ1078】[SCOI2008]斜堆(性质题)
    【BZOJ1077】天平(差分约束)
    【BZOJ1071】[SCOI2007]组队(神仙题)
    【BZOJ1862】[ZJOI2006]游戏排名系统 (Splay)
    【BZOJ1056】[HAOI2008]排名系统(Splay)
    【BZOJ1055】[HAOI2008]玩具取名(动态规划)
  • 原文地址:https://www.cnblogs.com/liming19680104/p/12089656.html
Copyright © 2011-2022 走看看