Python视频编辑库MoviePy的使用


Posted in Python onApril 01, 2020

moviepy官网:

https://pypi.org/project/moviepy/

是一个用于视频编辑的Python库:切割、连接、标题插入、视频合成、非线性编辑,视频处理和定制效果的创建。

Github:

https://github.com/Zulko/moviepy

MoviePy

MoviePy是一个关于视频编辑的python库,主要包括:剪辑,嵌入拼接,标题插入,视频合成(又名非线性编辑),视频处理,和自定制效果。可以看gallery中的一些实例来了解用法。MoviePy可以读写所有的音频和视频格式,包括GIF,通过python2.7+和python3可以跨平台运行于window/Mac/Linux,下面是一个在IPython notebook的运行实例。

Python视频编辑库MoviePy的使用

实例

在这个例子中,我们打开一个视频文件,在t = 50s的时刻和t = 60s的时刻之间选择子剪辑,在屏幕中心添加一个标题,并将结果写入一个新文件:

from moviepy.editor import *
video = VideoFileClip("myHolidays.mp4").subclip(50,60)
# Make the text. Many more options are available.
txt_clip = ( TextClip("My Holidays 2013",fontsize=70,color='white')
       .set_position('center')
       .set_duration(10) )
result = CompositeVideoClip([video, txt_clip]) # Overlay text on video
result.write_videofile("myHolidays_edited.webm",fps=25) # Many options...

安装

MoviePy依赖于python的模块:numpy,imageio,Decorator和tqdm,随着MoviePy的安装都会自动安装,FFMPEG软件 应该在第一次使用MoviePy的时候被自动安装(下载将会花几秒钟)。如果你想用FFMPEG的特定版本,请查看config_default.py的说明,在出现问题的时候,可以及时反馈。
手动安装:下载源代码,既可以通过PyPI,或者如果你想要一个开发版本,可以通过github下载,解压到一个文件夹,打开终端,然后输入:

$ (sudo) python setup.py install

通过pip进行安装:如果你安装了pip,仅仅在终端中输入:

$ (sudo) pip install moviepy

如果你setuptools和ez_setup两个都没安装,上面的命令会失效,在这种情况下请先在终端下输入:

$ (sudo) pip install ez_setup

输入代码

import imageio
imageio.plugins.ffmpeg.download()
import win_unicode_console
win_unicode_console.enable()
import sys,os
from PyQt5.QtCore import *
from PyQt5.QtWidgets import (QWidget, QPushButton, QLineEdit,QLabel,
               QApplication,QFileDialog)
from moviepy.video.io.VideoFileClip import VideoFileClip


class login(QWidget):
  def __init__(self):
    super(login,self).__init__()
    self.initUI()

  def initUI(self):
    #源文件选择按钮和选择编辑框
    self.source_btn = QPushButton('源文件', self)
    self.source_btn.move(30, 30)
    self.source_btn.resize(60,30)
    self.source_btn.clicked.connect(self.select_source)
    self.source_le = QLineEdit(self)
    self.source_le.move(120, 30)
    self.source_le.resize(250,30)

    # 存储文件选择按钮和选择编辑框
    self.target_btn = QPushButton('目标路径', self)
    self.target_btn.move(30, 90)
    self.target_btn.resize(60, 30)
    self.target_btn.clicked.connect(self.select_target)
    self.target_le = QLineEdit(self)
    self.target_le.move(120, 90)
    self.target_le.resize(250, 30)

    #截切开始时间输入框和提示
    self.startLabel = QLabel(self)
    self.startLabel.move(30, 150)
    self.startLabel.resize(60,30)
    self.startLabel.setText("开始秒")
    self.start_le = QLineEdit(self)
    self.start_le.move(120,150)
    self.start_le.resize(50,30)

    # 截切结束时间输入框和提示
    self.stopLabel = QLabel(self)
    self.stopLabel.move(230, 150)
    self.stopLabel.resize(60,30)
    self.stopLabel.setText("结束秒")
    self.stop_le = QLineEdit(self)
    self.stop_le.move(320,150)
    self.stop_le.resize(50,30)

    #保存按钮,调取数据增加函数等
    self.save_btn = QPushButton('开始',self)
    self.save_btn.move(30, 210)
    self.save_btn.resize(140, 30)
    self.save_btn.clicked.connect(self.addNum)

 

    #执行成功返回值显示位置设置
    self.result_le = QLabel(self)
    self.result_le.move(30, 270)
    self.result_le.resize(340, 30)


    #整体界面设置
    self.setGeometry(400, 400, 400, 400)
    self.setWindowTitle('视频剪切')#设置界面标题名
    self.show()

  # 打开的视频文件名称
  def select_source(self):
    target,fileType = QFileDialog.getOpenFileName(self, "选择源文件", "C:/")
    self.source_le.setText(str(target))
  #保存的视频文件名称,要写上后缀名
  def select_target(self):
    target,fileType = QFileDialog.getSaveFileName(self, "选择保存路径", "C:/")
    self.target_le.setText(str(target))


  def addNum(self):
    source = self.source_le.text().strip()#获取需要剪切的文件
    target = self.target_le.text().strip()#获取剪切后视频保存的文件
    start_time = self.start_le.text().strip()#获取开始剪切时间
    stop_time = self.stop_le.text().strip()#获取剪切的结束时间
    video = VideoFileClip(source)#视频文件加载
    video = video.subclip(int(start_time), int(stop_time))#执行剪切操作
    video.to_videofile(target, fps=20, remove_temp=True)#输出文件
    self.result_le.setText("ok!")#输出文件后界面返回OK
    self.result_le.setStyleSheet("color:red;font-size:40px")#设置OK颜色为红色,大小为四十像素
    self.result_le.setAlignment(Qt.AlignCenter)#OK在指定框内居中

if __name__=="__main__":
  app = QApplication(sys.argv)
  ex = login()
  sys.exit(app.exec_())

效果

Python视频编辑库MoviePy的使用

选择要分割的视频以及目标路径(带后缀),然后设置开始与结束时间,单位为秒。

Python视频编辑库MoviePy的使用

点击开始

Python视频编辑库MoviePy的使用

到此这篇关于Python视频编辑库MoviePy的使用的文章就介绍到这了,更多相关Python MoviePy内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
从零学python系列之数据处理编程实例(二)
May 22 Python
Python标准库与第三方库详解
Jul 22 Python
详解Python开发中如何使用Hook技巧
Nov 01 Python
使用python实现链表操作
Jan 26 Python
python实现自动发送报警监控邮件
Jun 21 Python
使用python验证代理ip是否可用的实现方法
Jul 25 Python
python分批定量读取文件内容,输出到不同文件中的方法
Dec 08 Python
详解Python sys.argv使用方法
May 10 Python
django 类视图的使用方法详解
Jul 24 Python
基于django ManyToMany 使用的注意事项详解
Aug 09 Python
python 解决selenium 中的 .clear()方法失效问题
Sep 01 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
Feb 03 Python
python json.dumps中文乱码问题解决
Apr 01 #Python
Django Admin后台添加数据库视图过程解析
Apr 01 #Python
pyqt5中动画的使用详解
Apr 01 #Python
django项目中新增app的2种实现方法
Apr 01 #Python
Django Admin设置应用程序及模型顺序方法详解
Apr 01 #Python
django API 中接口的互相调用实例
Apr 01 #Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
Apr 01 #Python
You might like
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
PHP获取photoshop写入图片文字信息的方法
2015/03/31 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
2015/12/02 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
2020/04/13 PHP
教你如何使用PHP输出中文JSON字符串
2014/05/22 Javascript
jQuery提交多个表单的小技巧
2014/07/27 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
JavaScript操作Cookie方法实例分析
2015/05/27 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
Jquery调用iframe父页面中的元素及方法
2016/08/23 Javascript
JQuery Ajax WebService传递参数的简单实例
2016/11/02 Javascript
利用纯Vue.js构建Bootstrap组件
2016/11/03 Javascript
Angular.Js中ng-include指令的使用与实现
2017/05/07 Javascript
微信小程序 开发MAP(地图)实例详解
2017/06/27 Javascript
vue中echarts3.0自适应的方法
2018/02/26 Javascript
Javascript实现秒表倒计时功能
2018/11/17 Javascript
从0到1构建vueSSR项目之路由的构建
2019/03/07 Javascript
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
2020/09/04 Javascript
Python 元类使用说明
2009/12/18 Python
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
Django Admin 实现外键过滤的方法
2017/09/29 Python
Python语言描述最大连续子序列和
2017/12/05 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
python 制作本地应用搜索工具
2021/02/27 Python
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
HTML5使用Audio标签实现歌词同步的效果
2016/03/17 HTML / CSS
应聘护士自荐信
2013/10/21 职场文书
坚守艰苦奋斗精神坚决反对享乐主义整改措施
2014/09/17 职场文书
社区国庆节活动总结
2015/03/23 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
python基础入门之普通操作与函数(三)
2021/06/13 Python