文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python基于moviepy实现音视频剪辑

2022-06-02 22:38

关注
目录

实践步骤

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

定义输入输出

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

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

结论:时间太久,片段多长就花了多久的时间;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.

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

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

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

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

优化:每段时间配上名字

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

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

完整代码

需要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实现音视频剪辑的资料请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯