python基于moviepy实现音视频剪辑

 更新时间:2021年06月15日 11:34:34   作者:ratiger  
为了方便学习和复习,需要把一些长音视频剪成一些小片段。本文介绍如何用Python实现,把音视频中的某一些片段剪出来。

实践步骤

1.寻找合适的Python库(安装是否麻烦、使用是否简便、执行会不会太久)

  • moviepy 音视频库。分析需要用的API:代码示例

2.定义输入输出

  • 输入:一个音视频文件的地址,需要剪出来的时间段
  • 输出:剪辑片段的文件

3.设计执行流程并一步步实现(定义函数,与使用具体API相关)

  1. 读入并创建clip对象。
  2. 剪辑subclip,输入时间参数可以是时间格式的字符串。
  3. 导出write_videofile。

4.结论:时间太久,片段多长就花了多久的时间;CPU全跑满了。

stackoverflowConcat videos too slow using Python MoviePY 里面有个答案说,调用包里封装的ffmpeg函数会快一些:

You have some functions that perform direct calls to ffmpeg: github.com/Zulko/movie… And are therefore extremely efficient, for simple tasks such as yours.

5.重新设计和实现,直接使用moviepy.video.io.ffmpeg_tools里的函数:ffmpeg_extract_subclip(源音视频文件,起,止,输出名)。

  • 这个函数中输入的起止时间参数只能是数字,不能是字符串,而库基本使用的接口函数传入的是字符串。看源码发现是有个把时间字符串转换成数字的装饰器的,一步步找就可以找到那个转换的函数了。

6.结论:时间快了很多,几乎是几秒内就完成。

  • 但并不明白为什么快了这么多

7.优化:一次处理多个时间段

  1. 输入由一个起止时间,变为一组起止时间
  2. 循环处理每一组起止时间
  3. 输出的文件名按顺序拼接

8.优化:每段时间配上名字

  1. 输入除了每一组的起止时间,还有后缀名
  2. 文件名+后缀得到输出的文件名

9.优化:输入输出的合法性校验

  • 校验输入地址是合法文件
  • 校验时间段(没什么必要)
    • 不可以小于0
    • 不可以大于视频时间
    • 起小于止

完整代码

需要pip install moviepy

简单的使用

from moviepy.editor import VideoFileClip, concatenate_videoclips

clipOri = VideoFileClip("E:/2020-03-29 19-31-39.mkv")


#截取两个subclip再拼接
#time_length = int(clipOri.duration) 这句可以获取片子的时
#超过时长会报错,时长默认用秒,也可以写得更细,(00:03:50.54)->3分50秒

cut1 = clipOri.subclip(0, 7053)
cut2 = clipOri.subclip(7059, 8941)

finalClip = concatenate_videoclips([cut1,cut2])

finalClip.write_videofile("E:/acut.mp4")
import os
import moviepy.video.io.ffmpeg_tools as fftool
from moviepy.tools import cvsecs

def add_suffix(file_name, suffix): # 文件名拼接后缀
    index = file_name.rfind('.') # 最后一个点号
    res = file_name[:index] + '_' + suffix + file_name[index:]
    return res

# 输入
file_name = r"./XXX.mkv"
output_arr = [
    ('04:20','05:07', '自我介绍'),
    ('05:07','17:47', '项目经历'),
    ('17:37','24:40', 'HTTPS'),
    ('24:40','28:10', '实现读写锁'),
]

if not os.path.isfile(file_name): # 校验
    print("不合法的输入", file_name)

for startStr, endStr, suffix in output_arr:
    start = cvsecs(startStr)
    end = cvsecs(endStr)
    
    if start < 0 or start >= end: # 校验
        print("不合法的时间",startStr, endStr)
        continue

    full_output_name = add_suffix(file_name, suffix)
    print('处理文件:', file_name, '时间:', startStr, '-', endStr)
    fftool.ffmpeg_extract_subclip(file_name,start,end,full_output_name) # 剪辑并输出
    print('处理功成功,输出:',full_output_name)

参考

以上就是python基于moviepy实现音视频剪辑的详细内容,更多关于python moviepy实现音视频剪辑的资料请关注脚本之家其它相关文章!

相关文章

  • django celery redis使用具体实践

    django celery redis使用具体实践

    这篇文章主要介绍了django celery redis使用具体实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 利用Python实现sqlite3增删改查的封装

    利用Python实现sqlite3增删改查的封装

    在一些小的应用中,难免会用到数据库,Sqlite数据库以其小巧轻便,无需安装,移植性好著称,下面这篇文章主要给大家介绍了关于利用Python实现sqlite3增删改查的封装,需要的朋友可以参考下
    2021-12-12
  • Python数据类型之Dict字典实例详解

    Python数据类型之Dict字典实例详解

    这篇文章主要介绍了Python数据类型之Dict字典,结合具体实例形式详细分析了Python字典的概念、原理、定义、元素添加、删除、遍历等相关操作技巧,需要的朋友可以参考下
    2019-05-05
  • django模板结构优化的方法

    django模板结构优化的方法

    这篇文章主要介绍了django模板结构优化的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • OpenCV图像的几何变换处理方法详解

    OpenCV图像的几何变换处理方法详解

    这篇文章主要给大家介绍了关于OpenCV图像的几何变换处理的相关资料,图像的几何变换是指将一幅图像映射到另一幅图像内,有缩放、翻转、仿射变换、透视、重映射等操作,需要的朋友可以参考下
    2024-03-03
  • python读取大型csv文件的操作方法(降低内存占用)

    python读取大型csv文件的操作方法(降低内存占用)

    遇到大型的csv文件时,pandas会把该文件全部加载进内存,从而导致程序运行速度变慢,本文提供了批量读取csv文件、读取属性列的方法,减轻内存占用情况,文中有详细的代码示例,需要的朋友可以参考下
    2024-03-03
  • Python解析Laravel Cookie技巧示例

    Python解析Laravel Cookie技巧示例

    本文将介绍如何使用Python解析Laravel Cookie,以便在Web开发中处理这些Cookie数据,我们将深入了解Cookie的结构,以及如何在Python中对其进行解析和操作
    2023-12-12
  • python读取csv文件并把文件放入一个list中的实例讲解

    python读取csv文件并把文件放入一个list中的实例讲解

    下面小编就为大家分享一篇python读取csv文件并把文件放入一个list中的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • 利用For循环遍历Python字典的三种方法实例

    利用For循环遍历Python字典的三种方法实例

    字典由多个键和其对应的值构成的键—值对组成,键和值中间以冒号:隔开,项之间用逗号隔开,整个字典是由大括号{}括起来的,下面这篇文章主要给大家介绍了关于如何利用For循环遍历Python字典的三种方法,需要的朋友可以参考下
    2022-03-03
  • 通俗易懂了解Python装饰器原理

    通俗易懂了解Python装饰器原理

    这篇文章主要介绍了通俗易懂了解Python装饰器原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09

最新评论