体验Python剪辑视频以及相关问题解决,一劳永逸!

简介: 对于使用Python对视频进行剪辑我们最常用的就是Moviepy,我之前也写过一篇《必杀技 -- 使用 FFmpeg 命令快速精准剪切视频》,这篇文章单纯使用的是FFmpeg,他是通过FFmpeg命令的方式进行视频剪辑,从安装moviepy的截图中可以看到,其实moviepy对视频的剪辑也是使用FFmpeg对视频进行剪辑操作

前言


对于使用Python对视频进行剪辑我们最常用的就是Moviepy,我之前也写过一篇《必杀技 -- 使用 FFmpeg 命令快速精准剪切视频》,这篇文章单纯使用的是FFmpeg,他是通过FFmpeg命令的方式进行视频剪辑,从安装moviepy的截图中可以看到,其实moviepy对视频的剪辑也是使用FFmpeg对视频进行剪辑操作。


网络异常,图片无法展示
|


从截图中可以看出,moviepy安装的同时需要安装decorator、tqdm、numpy、imageio以及imageio_ffmpeg这些依赖.其中imageio_ffmpeg就是处理视频数据的支撑,当使用imageio读写视频时,其会调用imageio_ffmpeg包以使用ffmpeg对视频进行相关的剪辑操作,不过imageio_ffmpeg的安装可能会出现如下问题


网络异常,图片无法展示
|

如何解决我们等会介绍.


准备


需要安装的库

pip install Moviepy(这是我们的主角)


既然说到剪辑,怎么少得了操作界面,毕竟对不会编程或者不想敲命令的童鞋来说体验不太好,所以需要封装成可视化操作,GUI库我们常用的有PyQt5,wxPython,TKinter.我们这里为了省事直接使用tkinter,tkinter模块是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。


如果你的Python库中没有tkinter,那就是使用下面的命令安装,使用线程安全的方式安装:


pip install threadsafe-tkinter


否则就会报以下错误:


网络异常,图片无法展示
|


我们上面说的安装moviepy报错,主要是由于imageio_ffmpeg无法安装成功导致的,我们可以先忽略他,后面单独安装,主要是因为下载超时所导致,后面单独下载,如果一次不行多尝试几次.而且我使用Git CMD安装成功的,使用系统自带的CMD一直下载超时.pip3 install imageio-ffmpeg如下图所示:


pip3 install moviepy --ignore-install imageio_ffmpeg


网络异常,图片无法展示
|
网络异常,图片无法展示
|


成功安装imageio_ffmpeg之后就能成功安装我们的主角moviepy


注意:imageio_ffmpeg版本一定要安装和系统对应的版本,我的系统是64位,所以后面是win_amd64


小试牛刀


视频剪辑


frommoviepy.editorimport*clip=VideoFileClip('Rec 0068.mp4').subclip(2,4)
# 存储剪辑好的视频clip.write_videofile('Rec2.mp4')


网络异常,图片无法展示
|

网络异常,图片无法展示
|


视频合并

frommoviepy.editorimportVideoFileClip,concatenate_videoclips#待合并的视频clip_1=VideoFileClip('__temp__.mp4')
clip_2=VideoFileClip('2.mp4')
#使用concatenate_videoclips进行合并file=concatenate_videoclips([clip_1,clip_2])
# 存储合并好的视频file.write_videofile('save.mp4')


网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|


前面我们已经体验了moviepy的剪辑,接下来进行封装到tk中,进行可视化操作


TKinter属性介绍


网络异常,图片无法展示
|

比如 Label:

Label:标签控件,可以显示文本
# win:父窗体
# text:显示的文本内容
# bg:背景色
# fg:字体颜色
# font:字体
# wraplength:指定text文本中多宽之后换行
# justify:设置换行后的对齐方式
# anchor:位置 n北,e东,w西,s南,center居中;还可以写在一起:ne东北方向
#width设置标签宽度,默认值是 0,自动计算,单位以像素计。
......

封装剪辑功能到GUI

这里button的传参使用的lambda:func(...)的方式

frommoviepy.editorimport*importtkinterastkdefclipvideo(origin, t1, t2, savedir):
print("开始剪辑")
print(origin)
print(t1)
print(t2)
print(savedir)
clip=VideoFileClip(origin).subclip(t1, t2)
# 存储剪辑好的视频clip.write_videofile(savedir)
#你的剪辑代码print("结束")
if(__name__=="__main__"):
# 创建窗口win=tk.Tk()
# 窗口标题win.title('剪辑视频')
# 设置大小和位置# 窗口大小win.geometry('680x300')
# 窗口的初始位置win.geometry('+300+200')
#上面两句可以合并成一句#win.geometry("680x300+300+200") #680 300为窗口大小,+300 +200 定义窗口弹出时的默认展示位置# 标签的控件 也可以自己指定字体label_1=tk.Label(win, text='输入原视频文件地址', font=("黑体", 20), fg='black')
label_1.grid(row=0)
label_2=tk.Label(win, text='开始时间(s)', font=("黑体", 20), fg='black')
label_2.grid(row=2)
label_3=tk.Label(win, text='结束时间(s)', font=("黑体", 20), fg='black')
label_3.grid(row=4)
label_4=tk.Label(win, text='剪辑后视频保存地址', font=("黑体", 20), fg='black')
label_4.grid(row=6)
# 输入框enter_1=tk.Entry(win, font=("黑体", 20))
enter_2=tk.Entry(win, font=("黑体", 20))
enter_3=tk.Entry(win, font=("黑体", 20))
enter_4=tk.Entry(win, font=("黑体", 20))
# 设置输入框的位置enter_1.grid(row=0, column=1)
enter_2.grid(row=2, column=1)
enter_3.grid(row=4, column=1)
enter_4.grid(row=6, column=1)
# 剪辑按钮 填写完输入框,点击按钮完成剪辑button=tk.Button(win, text='开始剪辑', font=("黑体", 20), command=lambda: clipvideo(enter_1.get(), enter_2.get(), enter_3.get(), enter_4.get()))
# 设置按钮的位置button.grid(row=10, column=1)
# 显示窗口win.mainloop()


网络异常,图片无法展示
|


网络异常,图片无法展示
|
网络异常,图片无法展示
|


然后通过messagebox提示


网络异常,图片无法展示
|



importtkinter.messageboxdefjianjivideo(origin, t1, t2, savedir):
    ... ...
tkinter.messagebox.showinfo("提示", "完成剪辑!")


总结


需要注意几个相关库的安装,特别是moviepy及其依赖的安装,他的成功安装是实现剪辑视频的关键


上面只是抛转引玉,运用Python进行视频剪辑还有更多高级的操作,而且Python能够对批量处理,减少了重复机械且枯燥的工作

目录
相关文章
|
1月前
|
计算机视觉 Python
Python实用记录(一):如何将不同类型视频按关键帧提取并保存图片,实现图片裁剪功能
这篇文章介绍了如何使用Python和OpenCV库从不同格式的视频文件中按关键帧提取图片,并展示了图片裁剪的方法。
67 0
|
1月前
|
机器学习/深度学习 编解码 Python
python将照片集变成视频
`shigen`是一位坚持更新文章的博客作者,记录成长历程,分享认知见解,留住生活感动。他利用Python库`Pillow`和`MoviePy`开发了一个工具,能够批量处理照片并生成高质量视频。该工具支持多种分辨率、自定义播放时间和照片方向,并能自动调整照片比例以实现居中对齐。通过简单的代码实现了照片视频化的需求,适合强迫症患者使用。**与shigen一起,每天不一样!**个人IP:shigen。
43 9
python将照片集变成视频
|
30天前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
2月前
|
编解码 Python
Python如何给视频添加音频和字幕
Python如何给视频添加音频和字幕
|
2月前
|
编解码 Python Windows
python有没有包 可以检测 这个视频是否可以播放
python有没有包 可以检测 这个视频是否可以播放
|
2月前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现深度学习模型:智能电影制作与剪辑
使用Python实现深度学习模型:智能电影制作与剪辑
71 5
|
2月前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的反诈视频宣传管理系统
基于Python+Vue开发的反诈视频宣传管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的反诈宣传管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
33 4
|
3月前
|
自然语言处理 数据挖掘 开发者
Python腾讯视频16978条弹幕,发现弹幕比剧还精彩
Python腾讯视频16978条弹幕,发现弹幕比剧还精彩
54 4
Python腾讯视频16978条弹幕,发现弹幕比剧还精彩
|
3月前
|
存储 数据可视化 Python
使用python moviepy提取视频中的音频,同时对音频数据进行数据可视化分析
使用python moviepy提取视频中的音频,同时对音频数据进行数据可视化分析
139 0
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
【深度学习】python之人工智能应用篇——视频生成技术
视频生成技术是一种基于深度学习和机器学习的先进技术,它使得计算机能够根据给定的文本、图像、视频等单模态或多模态数据,自动生成符合描述的、高保真的视频内容。这种技术主要依赖于深度学习模型,如生成对抗网络(GAN)、自回归模型(Auto-regressive Model)、扩散模型(Diffusion Model)等。其中,GAN由两个神经网络组成:一个生成器用于生成逼真的图像或视频,另一个判别器用于判断生成的图像或视频是否真实。通过不断的对抗学习,生成器和判别器共同优化,以产生更高质量的视频。
95 2