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代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
Sep 21 Python
Python与R语言的简要对比
Nov 14 Python
python3 遍历删除特定后缀名文件的方法
Apr 23 Python
Python学习小技巧总结
Jun 10 Python
Python I/O与进程的详细讲解
Mar 08 Python
python中的decimal类型转换实例详解
Jun 26 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
Apr 16 Python
python实现贪吃蛇双人大战
Apr 18 Python
如何导出python安装的所有模块名称和版本号到文件中
Jun 05 Python
python调用私有属性的方法总结
Jul 24 Python
Python爬取12306车次信息代码详解
Aug 12 Python
Python爬虫网络请求之代理服务器和动态Cookies
Apr 12 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
PHP调用三种数据库的方法(2)
2006/10/09 PHP
一个用于mysql的数据库抽象层函数库
2006/10/09 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
国外大牛IE版本检测!现在IE都到9了,IE检测代码
2012/01/04 Javascript
什么是json和jsonp,jQuery json实例详详细说明
2012/12/11 Javascript
file模式访问网页时iframe高度自适应解决方案
2013/01/16 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
javascript中RegExp保留小数点后几位数的方法分享
2013/08/13 Javascript
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
nodejs npm package.json中文文档
2014/09/04 NodeJs
Javascript表单验证要注意的事项
2014/09/29 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
2015/05/19 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
jquery性能优化高级技巧
2015/08/24 Javascript
js实现的早期滑动门菜单效果代码
2015/08/27 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
javascript 利用arguments实现可变长参数
2016/11/21 Javascript
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
javascript实现移动端红包雨页面
2020/06/23 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
three.js显示中文字体与tween应用详析
2021/01/04 Javascript
Python linecache.getline()读取文件中特定一行的脚本
2008/09/06 Python
Python中使用PyQt把网页转换成PDF操作代码实例
2015/04/23 Python
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
解决python3 json数据包含中文的读写问题
2018/05/10 Python
Python File(文件) 方法整理
2019/02/18 Python
配置python的编程环境之Anaconda + VSCode的教程
2020/03/29 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
自考生毕业自我鉴定
2013/10/10 职场文书
金融行业务员的自我评价
2013/12/13 职场文书
半年思想汇报
2013/12/30 职场文书
第二批党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
Sql Server之数据类型详解
2022/02/28 SQL Server