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的Django框架中获取单个对象数据的简单方法
Jul 17 Python
python从入门到精通(DAY 2)
Dec 20 Python
Python向日志输出中添加上下文信息
May 24 Python
Django基础之Model操作步骤(介绍)
May 27 Python
django rest framework之请求与响应(详解)
Nov 06 Python
基于Python中capitalize()与title()的区别详解
Dec 09 Python
Django的用户模块与权限系统的示例代码
Jul 24 Python
python的json中方法及jsonpath模块用法分析
Dec 06 Python
Python 中的pygame安装与配置教程详解
Feb 10 Python
通过python 执行 nohup 不生效的解决
Apr 16 Python
Django与pyecharts结合的实例代码
May 13 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
Jul 07 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
安装APACHE
2007/01/15 PHP
一个PHP分页类的代码
2011/05/18 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
Javascript 垃圾收集机制介绍理解
2013/05/14 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
让页面上两个div中的滚动条(滑块)同步运动示例
2013/08/07 Javascript
JavaScript新窗口与子窗口传值详解
2014/02/11 Javascript
XML、HTML、CSS与JS的区别整理
2016/02/18 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
jQuery实现底部浮动窗口效果
2016/09/07 Javascript
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
js判断在哪个浏览器打开项目的方法
2020/01/21 Javascript
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
2020/11/16 Javascript
java直接调用python脚本的例子
2014/02/16 Python
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
2014/07/09 Python
使用Python中PDB模块中的命令来调试Python代码的教程
2015/03/30 Python
使用Python编写vim插件的简单示例
2015/04/17 Python
Python 多线程Threading初学教程
2017/08/22 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
2019/08/12 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
plt.figure()参数使用详解及运行演示
2021/01/08 Python
详解CSS3 rem(设置字体大小) 教程
2017/11/21 HTML / CSS
营销总经理岗位职责
2014/02/02 职场文书
房地产广告词大全
2014/03/19 职场文书
工程造价专业求职信
2014/07/17 职场文书
刑事法律意见书
2015/06/04 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python
MySQL中order by的执行过程
2022/06/05 MySQL
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
2022/08/14 Servers