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

举报
迷彩 发表于 2023/04/26 13:27:43 2023/04/26
【摘要】 前言对于使用Python对视频进行剪辑我们最常用的就是Moviepy,我之前也写过一篇《必杀技 -- 使用 FFmpeg 命令快速精准剪切视频》,这篇文章单纯使用的是FFmpeg,他是通过FFmpeg命令的方式进行视频剪辑,从安装moviepy的截图中可以看到,其实moviepy对视频的剪辑也是使用FFmpeg对视频进行剪辑操作。从截图中可以看出,moviepy安装的同时需要安装decora...

前言

对于使用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_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(...)的方式

from moviepy.editor import *
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提示


import tkinter.messagebox

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

总结

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

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。