Python轻松搞定视频剪辑重复性工作问题
作者:迟业 发布时间:2022-12-18 16:06:54
目录
01 安装
02 剪辑
01 安装
对视频进行批量剪辑,需要三个库,分别是Moviepy
库和Pathlib
库,还有Tkinter
库。
首先我们对这两个库进行安装,命令如下:
pip install moviepy
pip install pathlib
02 剪辑
上面我们已经安装好所需要的库了,现在开始来对视频进行剪辑操作。
视频剪辑:
Moviepy
库有一个VideoFileClip
函数,将视频传入这个函数后,会返回一个VideoFileClip
实例对象,该对象可以被subclip()
进行剪辑,
代码如下:
from moviepy.editor import *
clip = VideoFileClip('1.mp4').subclip(2,4)
# 将剪出的视频进行存储
clip.write_videofile('2.mp4')
视频合并:
第一步跟视频剪辑一样,需要将合并的视频传入VideoFileClip
函数,使其成为一个VideoFileClip
实例对象。然后调用Concatenate_videoclips
函数,将所有VideoFileClip
实例对象的视频进行合并,最后进行保存。
代码如下:
from moviepy.editor import VideoFileClip,concatenate_videoclips
clip_1 = VideoFileClip('1.mp4')
clip_2 = VideoFileClip('2.mp4')
file = concatenate_videoclips([clip_1,clip_2])
file.write_videofile('3.mp4')
视频转化为gif:
将视频转化成gif
非常简单,当视频经过VideoFileClip
函数处理成为VideoFileClip
实例对象后,即可直接保存为gif
格式。
代码如下:
from moviepy.editor import *
file = VideoFileClip(k)
file.write_gif(f'{name}.gif')
批量:
上面只是对单个视频,或者个别文件夹的视频进行操作,但是我们想要的是批量进行剪辑、合并和转化。这里,Pathlib
库给我们提供了两个Path
和PurePath
函数,可以很方便的找到电脑中mp4文件,
代码如下:
files = []
p = Path(src_path)
for x in p.iterdir():
if PurePath(x).match('*.mp4'):
files.append(x)
之后和上面的代码进行合并,即可实现批量获取的功能 。
GUI界面:
程序的功能已经全部实现了,我们现在需要对该程序进行界面设计,这里我们使用的Tkinter
库来进行界面设计,
代码如下:
# 创建窗口
root = tk.Tk()
# 标题
root.title('视频剪辑')
# 窗口大小
root.geometry('450x200')
# 窗口的初始位置
root.geometry('+400+200')
# 标签的控件
label_1 = tk.Label(root, text='输入文件地址', font=(r'苏新诗柳楷简.ttf', 16), fg='black')
label_1.grid()
label_2 = tk.Label(root, text='输入剪辑时间', font=(r'苏新诗柳楷简.ttf', 16), fg='black')
label_2.grid()
# 输入框
enter_1 = tk.Entry(root, font=(r'苏新诗柳楷简.ttf', 16))
enter_2 = tk.Entry(root, font=(r'苏新诗柳楷简.ttf', 16))
# 设置输入框的位置
enter_1.grid(row=0, column=1)
enter_2.grid(row=1, column=1)
# 按钮
button = tk.Button(root, text='开始', font=(r'苏新诗柳楷简.ttf', 16), command=jianjivideo)
# 设置按钮的位置
button.grid(row=1, column=2)
# 显示窗口
root.mainloop()
小结:
本文详细介绍了,如何使用Moviepy
库和Pathlib
库,还有Tkinter
库,做一个批量处理视频的软件。
有兴趣的同学可以自己复现一下代码进行学习。
来源:https://juejin.cn/post/7042846544814407717


猜你喜欢
- 1.Null数据的处理 1)检索出null值  
- github主页导入:>>> from fuzzywuzzy import fuzz>>> from f
- 浏览带有下拉菜单的网页时,我们经常会注意到当更改显示器分辨率时,其下拉菜单的位置并没有改变,这也是我们设计网页时容易忽略的一个问题,其实通过
- 本文介绍了PHP开发中遇到的数组问题,这里介绍了判断PHP数组为空的5种方法,有需要的朋友可以借鉴参考一下。1. isset功能:判断变量是
- 异步编程带来的问题在客户端Javascript中并不明显,但随着服务器端Javascript越来越广的被使用,大量的异步IO操作使得该问题变
- DATAFRAME中使用iat[1,0]和iloc[0,1]对元素进行修改。a = [("hahaha",1),(&qu
- 模版基本介绍模板是一个文本,用于分离文档的表现形式和内容。 模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签)。 模
- 本文实例讲述了Python使用matplotlib绘制余弦的散点图。分享给大家供大家参考,具体如下:一 代码import numpy as
- 在Python中将字符串转换为集合使用 set() 类将字符串转换为集合,例如 my_set = set(my_str)。 set() 类将
- pyyaml模块在python中用于处理yaml格式数据,主要使用yaml.safe_dump()、yaml.safe_load()函数将p
- .data文件格式.data文件是用来存储数据的一种文件格式。之前通常数据是用逗号隔开或tab健隔开的格式,现在也可能是文本文件格式或二进制
- 本文实例讲述了Django框架中间件(Middleware)用法。分享给大家供大家参考,具体如下:1、面向切面编程切点(钩子)切点允许我们动
- 举个例子吧Django最佳实践与部署:Nginx + Gunicorn + Supervisor(Ubuntu和CentOS)http://
- TensorFlow中tf.batch_matmul()用法如果有两个三阶张量,size分别为a.shape = [100, 3, 4]b.
- golang 字符串 int uint int64 uint64 互转字符串 转 intintNum, _ = strconv.Atoi(i
- 导语小伙伴们大家好~如今的游戏可谓是层出不穷,NBA 2K系列啊,FIFA系列啊更是经典中的经典,不过小编发现,赛车游戏也是深受大家欢迎啊,
- HTTP-REFERER这个变量已经越来越不可靠了,完全就是可以伪造出来的东东。 以下是伪造方法: ASP: dim http&n
- 在数据库testDB中存在架构A及用户A,现将testDB数据库所属的用户由A改为B,同时删除用户A;架构也由A改为B,删除架构A,操作如下
- 设置某个字段的值自增由于某个业务需要手动操作数据库,并设置主键ID不重复。做个记录set @rownum=0;select a.id, @r
- 下面这个截图,就是使用 schedule 定时执行 Notebook 的例子import scheduleimport timeimport