Python剪辑视频小妙招(moivepy库)

发布于:2025-02-10 ⋅ 阅读:(33) ⋅ 点赞:(0)

起因

最近一直在b站上投稿喜羊羊与灰太狼的视频,但是苦于需要手动裁剪视频的片头和片尾,裁剪的多了就发现喜羊羊与灰太狼的视频片头几乎都是1分25秒结束,也就是持续85秒,片尾也差不多是持续1分02秒差不多也就是62秒,于是开始思考有没有什么方法可以替代人类进行自动化批量裁剪?

思路发展迭代与确定

一开始是想使用Premier里面的预设来做的,结果发现Premier里面高版本的导出变成了各种网站的标准,相比于剪映的自定义帧率和清晰度来说,太不方便了,于是遂放弃。

之后想着要不要搞一个宏,但是又觉得搞宏跟搞预设是一个道理,于是遂打消念头。

后来询问了豆包AI和一些搜索引擎,发现有个ffmpeg的命令行软件很厉害,可以实现对视频的各种操作,并且支持批量化操作,但是就在这时,豆包还给了我一个思路,那就是用Python去写代码,Python可以直接调用moivepy库进行操作,这么一听我瞬间就来了兴趣。于是索性开始学习这个库的使用,后来编写出来代码并跑了跑,发现真是非常好用,Python真厉害!

编写代码

说干就干,代码编写之后如下:

from moviepy import *
import os

def get_video_files(directory):
    video_extensions = ['.mp4', '.avi', '.mov', '.mkv']  # 可以添加更多的视频文件格式
    video_files = []
    for root, dirs, files in os.walk(directory):
        for file in files:
            if any(file.endswith(ext) for ext in video_extensions):
                video_files.append(os.path.join(root, file))
    return video_files


def crop_videos(video_files):
    for video_file in video_files:
        try:
            clipMaterial = VideoFileClip("C:\\Users\\22576\\Desktop\\喜洋洋素材结尾.mp4")
            # print(clipMaterial.duration)

            clip = VideoFileClip(video_file)
            duration = clip.duration  # 获取视频的总时长
            # 裁剪前 1 分钟和后 1 分钟
            cropped_clip = clip.subclipped(81, duration - 67)
            # 保存裁剪后的视频,这里添加一个后缀,比如 "_cropped" 表示这是裁剪后的视频
            output_file = video_file.replace('.', '_cropped.')
            final_clip = concatenate_videoclips([cropped_clip, clipMaterial])
            final_clip.write_videofile(output_file)
            # cropped_clip.write_videofile(output_file)`
            clip.close()  # 释放资源
        except Exception as e:
            print(f"Error processing {video_file}: {e}")

if __name__ == "__main__":
    directory = "D:\\XiYangYang\\10615"  # 替换为你的视频所在的目录
    video_files = get_video_files(directory)
    crop_videos(video_files)