Python批量视频分段(基于moviepy)
MoviePy简介
MoviePy是一个用于视频编辑的Python模块,它可被用于一些基本操作(如剪切、拼接、插入标题)、视频合成(即非线性编辑)、视频处理和创建高级特效。它可对大多数常见视频格式进行读写,包括GIF。
简单使用
安装moviepy库
pip install moviepy
简单操作:
from moviepy.editor import * video = VideoFileClip("esword.mp4") clip1 = video.subclip(10,20)#第10秒到第20秒的片段 clip2 = video.subclip(30,35)#第10秒到第20秒的片段 final_clip = concatenate_videoclips([clip1,clip2]) final_clip.write_videofile("new_esword.mp4")#写入10-20片段和30-35s片段的新视频
批量视频分段(根据时间)
import glob from shutil import copy from moviepy.editor import * def subclips_from_dir(dir_path,new_path,clip_duration=3): for all_file_name in glob.glob(dir_path): file_name_array = all_file_name.split(/) sub_dir = file_name_array[-2] video = VideoFileClip(all_file_name) file_name = file_name_array[-1] video_duration = int(video.duration) if not os.path.exists(os.path.join(new_path, sub_dir)): os.makedirs(os.path.join(new_path, sub_dir)) if video_duration<3: copy(all_file_name,os.path.join(new_path,sub_dir,file_name)) else: for i in range(0,video_duration,clip_duration): new_file_name = os.path.join(new_path,sub_dir,str(i)+_+file_name) sub_video = video.subclip(i, min(i + clip_duration, video_duration)) sub_video.write_videofile(new_file_name) if __name__ == "__main__": dir = "/home/esword/datasets/esword/*/*" new_dir = "/home/esword/datasets/esword_3" subclips_from_dir(dir,new_dir,3) #3秒一个视频分段
进阶应用
MoviePy最强大的功能当然还是各种剪辑 上述脚本只是懒得调ffmpeg而已😥😥 中文手册: