体验 Python 剪辑视频以及相关问题解决, 一劳永逸!
source link: https://blog.51cto.com/micai01/5840783
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
体验 Python 剪辑视频以及相关问题解决, 一劳永逸!
推荐 原创对于使用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
clip = VideoFileClip('Rec 0068.mp4').subclip(2,4)
# 存储剪辑好的视频
clip.write_videofile('Rec2.mp4')
#待合并的视频
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:
# win:父窗体
# text:显示的文本内容
# bg:背景色
# fg:字体颜色
# font:字体
# wraplength:指定text文本中多宽之后换行
# justify:设置换行后的对齐方式
# anchor:位置 n北,e东,w西,s南,center居中;还可以写在一起:ne东北方向
#width设置标签宽度,默认值是 0,自动计算,单位以像素计。
......
封装剪辑功能到GUI
这里button的传参使用的lambda:func(...)的方式
import tkinter as tk
def clipvideo(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提示
def jianjivideo(origin, t1, t2, savedir):
... ...
tkinter.messagebox.showinfo("提示", "完成剪辑!")
需要注意几个相关库的安装,特别是moviepy及其依赖的安装,他的成功安装是实现剪辑视频的关键
上面只是抛转引玉,运用Python进行视频剪辑还有更多高级的操作,而且Python能够对批量处理,减少了重复机械且枯燥的工作
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK