Python批量视频分段(基于moviepy)

  • Post author:
  • Post category:python




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而已😥😥

中文手册:


http://doc.moviepy.com.cn/



版权声明:本文为Ejzq1原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。