使用Python的moviepy第三方库剪辑视频
2022/6/15 1:20:16
本文主要是介绍使用Python的moviepy第三方库剪辑视频,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
使用Python的moviepy第三方库剪辑视频
前言
使用moviepy库按照指定格式进行剪辑视频。
一、使用环境
- win10
- python==3.7.2
- moviepy==1.0.3
二、使用步骤
1.安装moviepy
参考官方文档
2.引入库
from moviepy.editor import VideoFileClip import os, re
3.完整代码
from moviepy.editor import VideoFileClip import os, re def Clip_Video(videoFilePath: str, videoTimeStr: str, videoSavePath: str) -> bool or str: """ 1、剪辑视频 2、10:10-20:20(输出这个区间的视频) 3、10:10>(此时间直到结尾) 4、<20:20(开头直到此时间) :param videoFilePath: 源视频文件路径 :param videoTimeStr: 剪辑时间格式 :param videoSavePath: 剪辑好的视频保存文件路径 :return: """ # 读取视频 video = VideoFileClip(videoFilePath) # 开始时间 结束时间 startTimeSendStr, endTimeSendStr = '', '' # 10:10-20:20(输出这个区间的视频) if '-' in videoTimeStr: # 分离开始时间和结束时间 timeTuple = re.findall('(.*)-(.*)', videoTimeStr)[0] # 遍历每个时间 for j in timeTuple: # 获取时与分 timeTuple_ = re.findall('(.*):(.*)', j)[0] # 1小时以下 if len(timeTuple_) >= 2 < 3: if startTimeSendStr == '': # 开始的秒 startTimeSendStr = int(timeTuple_[0]) * 60 + int(timeTuple_[1]) else: # 结束的秒 endTimeSendStr = int(timeTuple_[0]) * 60 + int(timeTuple_[1]) # 1小时以上 elif len(timeTuple_) >= 3: if startTimeSendStr == '': # 开始的秒 startTimeSendStr = int(timeTuple_[0]) * 60 * 60 + int(timeTuple_[1]) * 60 + int(timeTuple_[2]) else: # 结束的秒 endTimeSendStr = int(timeTuple_[0]) * 60 * 60 + int(timeTuple_[1]) * 60 + int(timeTuple_[2]) else: return '时间错误' # 10:10>(此时间直到结尾) elif '>' in videoTimeStr: # 获取时与分 timeTuple_ = re.findall('(.*):(.*)', re.sub('>', '', videoTimeStr))[0] # 1小时以下 if len(timeTuple_) >= 2 < 3: # 开始的秒 startTimeSendStr = int(timeTuple_[0]) * 60 + int(timeTuple_[1]) # 1小时以上 elif len(timeTuple_) >= 3: # 开始的秒 startTimeSendStr = int(timeTuple_[0]) * 60 * 60 + int(timeTuple_[1]) * 60 + int(timeTuple_[2]) else: return '时间错误' # 结束的秒等于视频结束时间 endTimeSendStr = int(video.end) # <20:20(开头直到此时间) elif '<' in videoTimeStr: # 获取时与分 timeTuple_ = re.findall('(.*):(.*)', re.sub('<', '', videoTimeStr))[0] if len(timeTuple_) >= 2 < 3: # 结束的秒 endTimeSendStr = int(timeTuple_[0]) * 60 + int(timeTuple_[1]) elif len(timeTuple_) >= 3: # 结束的秒 endTimeSendStr = int(timeTuple_[0]) * 60 * 60 + int(timeTuple_[1]) * 60 + int(timeTuple_[2]) else: return '时间错误' # 开始的秒等于视频开始时间 startTimeSendStr = int(video.start) else: return '输入的时间格式不正确 -> 参考:10:10-20:20 or 10:10> or <20:20' # 剪辑 if startTimeSendStr != '' and endTimeSendStr != '': # 剪辑 video_ = video.subclip(startTimeSendStr, endTimeSendStr) # 保存 if os.path.isdir(videoSavePath): video_.write_videofile( fr'{videoSavePath}\{str(os.path.split(video.filename)[1])}', threads=16, fps=int(video_.fps) ) elif os.path.isfile(videoSavePath): video_.write_videofile( videoSavePath, threads=16 ) else: return '视频保存路径不正确' return True if __name__ == '__main__': Clip_Video( videoFilePath=r'C:\Users\Adminitrator\Desktop\视频1.mp4', videoTimeStr='2:10-3:10', videoSavePath=r'C:\Users\Adminitrator\Desktop' ) pass
三、错误处理
- TypeError: must be real number, not NoneType
TypeError: must be real number, not NoneType
原因:moviepy要求decorator<5.0,>=4.0.2
处理方法:安装指定版本的decorator或者替换
这篇关于使用Python的moviepy第三方库剪辑视频的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门