写点什么

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

作者:迷彩
  • 2022 年 7 月 06 日
  • 本文字数:2200 字

    阅读完需:约 7 分钟

前言

对于使用 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


小试牛刀

视频剪辑

from moviepy.editor import *clip = VideoFileClip('Rec 0068.mp4').subclip(2,4)# 将剪出的视频进行存储clip.write_videofile('Rec2.mp4')
复制代码



视频合并

from moviepy.editor import VideoFileClip,concatenate_videoclipsclip_1 = VideoFileClip('__temp__.mp4')clip_2 = VideoFileClip('2.mp4')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(...)的方式

from moviepy.editor import *import tkinter as tk
def jianjivideo(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__"): # 创建窗口 root = tk.Tk() # 标题 root.title('剪辑视频') # 设置大小和位置 # 窗口大小 root.geometry('680x300') # 窗口的初始位置 root.geometry('+300+200') # 标签的控件 也可以自己指定字体 label_1 = tk.Label(root, text='输入原视频文件地址', font=("黑体", 20), fg='black') label_1.grid(row=0) label_2 = tk.Label(root, text='开始时间(s)', font=("黑体", 20), fg='black') label_2.grid(row=2) label_3 = tk.Label(root, text='结束时间(s)', font=("黑体", 20), fg='black') label_3.grid(row=4) label_4 = tk.Label(root, text='剪辑后视频保存地址', font=("黑体", 20), fg='black') label_4.grid(row=6) # 输入框 enter_1 = tk.Entry(root, font=("黑体", 20)) enter_2 = tk.Entry(root, font=("黑体", 20)) enter_3 = tk.Entry(root, font=("黑体", 20)) enter_4 = tk.Entry(root, 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(root, text='开始剪辑', font=("黑体", 20), command=lambda: jianjivideo(enter_1.get(), enter_2.get(), enter_3.get(), enter_4.get())) # 设置按钮的位置 button.grid(row=10, column=1) # 显示窗口 root.mainloop()
复制代码




然后通过 messagebox 提示


import tkinter.messagebox
def jianjivideo(origin, t1, t2, savedir): ... ... tkinter.messagebox.showinfo("提示", "完成剪辑!")
复制代码

总结

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

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

发布于: 刚刚阅读数: 4
用户头像

迷彩

关注

我的工作是常年写bug|公众号:编程架构之美 2020.06.18 加入

修bug的菜鸟~公众号:“互联网有啥事”已改名为“编程架构之美”

评论

发布
暂无评论
体验Python剪辑视频以及相关问题解决,一劳永逸!_Python_迷彩_InfoQ写作社区