热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python如何利用moviepy实现音视频剪辑

这篇文章主要介绍“python如何利用moviepy实现音视频剪辑”,在日常操作中,相信很多人在python如何利用moviepy实现音视频剪辑问题上存在疑惑,小

这篇文章主要介绍“python如何利用moviepy实现音视频剪辑”,在日常操作中,相信很多人在python如何利用moviepy实现音视频剪辑问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python如何利用moviepy实现音视频剪辑”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

实践步骤

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(&#39;处理文件:&#39;, file_name, &#39;时间:&#39;, startStr, &#39;-&#39;, endStr)
    fftool.ffmpeg_extract_subclip(file_name,start,end,full_output_name) # 剪辑并输出
    print(&#39;处理功成功,输出:&#39;,full_output_name)

到此,关于“python如何利用moviepy实现音视频剪辑”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程笔记网站,小编会继续努力为大家带来更多实用的文章!


推荐阅读
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了Java中的访问器(getter)和修改器(setter),探讨了它们在保护数据完整性、增强代码可维护性方面的重要作用。通过具体示例,展示了如何正确使用这些方法来控制类属性的访问和更新。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 资源推荐 | TensorFlow官方中文教程助力英语非母语者学习
    来源:机器之心。本文详细介绍了TensorFlow官方提供的中文版教程和指南,帮助开发者更好地理解和应用这一强大的开源机器学习平台。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 本文详细介绍了如何使用Python编写爬虫程序,从豆瓣电影Top250页面抓取电影信息。文章涵盖了从基础的网页请求到处理反爬虫机制,再到多页数据抓取的全过程,并提供了完整的代码示例。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
author-avatar
mobiledu2502932447
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有