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 Web框架Flask下网站开发入门实例
Feb 08 Python
python实现的简单RPG游戏流程实例
Jun 28 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
Oct 22 Python
聊聊python里如何用Borg pattern实现的单例模式
Jun 06 Python
Python爬取爱奇艺电影信息代码实例
Nov 26 Python
python argparse模块通过后台传递参数实例
Apr 20 Python
在服务器上安装python3.8.2环境的教程详解
Apr 26 Python
详解pyinstaller生成exe的闪退问题解决方案
Jun 19 Python
Python二元算术运算常用方法解析
Sep 15 Python
Python confluent kafka客户端配置kerberos认证流程详解
Oct 12 Python
用python实现一个简单计算器(完整DEMO)
Oct 14 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
Feb 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
简单的PHP图片上传程序
2008/03/27 PHP
基于php在各种web服务器的运行模式详解
2013/06/03 PHP
php生成数组的使用示例 php全组合算法
2014/01/16 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
php实现遍历文件夹的方法汇总
2017/03/02 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
2010/05/22 Javascript
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
JavaScript、tab切换完整版(自动切换、鼠标移入停止、移开运行)
2016/01/05 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
javascript之IE版本检测超简单方法
2016/08/20 Javascript
js获取当前时间(昨天、今天、明天)
2016/11/23 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
jQuery实现的简单拖拽功能示例【测试可用】
2018/08/14 jQuery
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
vue 获取视频时长的实例代码
2019/08/20 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
Python中的闭包详细介绍和实例
2014/11/21 Python
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
Python实现数据库并行读取和写入实例
2017/06/09 Python
python爬取网页内容转换为PDF文件
2020/07/28 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
python使用zip将list转为json的方法
2018/12/31 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
2020/02/09 Python
python os.rename实例用法详解
2020/12/06 Python
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
工作失误检讨书范文
2015/01/26 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书