矩阵剪辑系统搭建,矩阵剪辑系统源码

批量处理功能,包含批量添加滤镜、批量添加字幕、批量音频处理。以下是完整的代码:矩阵剪辑系统搭建,矩阵剪辑系统源码

素材管理,剪辑功能,批量处理,ai智能创作,发布与管理,协作功能

批量添加滤镜:批量添加滤镜 方法会对传入的视频列表中的每个视频应用指定的滤镜,并将处理后的视频保存到指定的输出文件夹。

批量添加字幕:批量添加字幕 方法会为传入的视频列表中的每个视频在指定时间段添加相同的字幕,并保存到指定的输出文件夹。

批量音频处理:批量音频处理 方法会为传入的视频列表中的每个视频添加指定的音频,并调整音量,最后保存到指定的输出文件夹。

这些批量处理功能可以提高剪辑效率,让你一次性处理多个视频。

import os

import shutil

from moviepy.editor import VideoFileClip, concatenate_videoclips, CompositeVideoClip, TextClip, AudioFileClip, ColorClip

import moviepy.editor as mp

import random

class ShortVideoMatrixEditingSystem:

    def __init__(self, 素材文件夹路径):

        self.素材文件夹路径 = 素材文件夹路径

        self.素材列表 = []

        self.素材分类 = {}

        self.加载素材()

    def 加载素材(self):

        for root, dirs, files in os.walk(self.素材文件夹路径):

            for file in files:

                if file.endswith(('.mp4', '.avi', '.mov')):

                    素材路径 = os.path.join(root, file)

                    self.素材列表.append(素材路径)

                    # 简单分类,根据文件夹名分类

                    分类 = os.path.basename(os.path.dirname(素材路径))

                    if 分类 not in self.素材分类:

                        self.素材分类[分类] = []

                    self.素材分类[分类].append(素材路径)

    def 查看素材列表(self):

        return self.素材列表

    def 查看素材分类(self):

        return self.素材分类

    def 添加素材(self, 新素材路径, 分类=None):

        if os.path.exists(新素材路径):

            文件名 = os.path.basename(新素材路径)

            目标路径 = os.path.join(self.素材文件夹路径, 文件名)

            shutil.copy2(新素材路径, 目标路径)

            self.素材列表.append(目标路径)

            if 分类:

                if 分类 not in self.素材分类:

                    self.素材分类[分类] = []

                self.素材分类[分类].append(目标路径)

            else:

                # 简单根据文件夹名分类

                分类 = os.path.basename(os.path.dirname(目标路径))

                if 分类 not in self.素材分类:

                    self.素材分类[分类] = []

                self.素材分类[分类].append(目标路径)

            print(f"素材 {文件名} 添加成功。")

        else:

            print("素材文件不存在,添加失败。")

    def 删除素材(self, 素材路径):

        if 素材路径 in self.素材列表:

            if os.path.exists(素材路径):

                os.remove(素材路径)

            self.素材列表.remove(素材路径)

            # 从分类中移除

            for 分类, 素材 in self.素材分类.items():

                if 素材路径 in 素材:

                    self.素材分类[分类].remove(素材路径)

            print(f"素材 {os.path.basename(素材路径)} 删除成功。")

        else:

            print("素材不存在,删除失败。")

    def 搜索素材(self, 关键词):

        搜索结果 = []

        for 素材 in self.素材列表:

            if 关键词 in 素材:

                搜索结果.append(素材)

        return 搜索结果

    def 裁剪视频(self, 视频路径, 开始时间, 结束时间, 输出路径):

        clip = VideoFileClip(视频路径)

        new_clip = clip.subclip(开始时间, 结束时间)

        new_clip.write_videofile(输出路径, codec="libx264")

        new_clip.close()

        clip.close()

    def 拼接视频(self, 视频路径列表, 输出路径):

        clips = [VideoFileClip(path) for path in 视频路径列表]

        final_clip = concatenate_videoclips(clips)

        final_clip.write_videofile(输出路径, codec="libx264")

        for clip in clips:

            clip.close()

        final_clip.close()

    def 批量裁剪视频(self, 视频路径列表, 开始时间, 结束时间, 输出文件夹):

        if not os.path.exists(输出文件夹):

            os.makedirs(输出文件夹)

        for i, 视频路径 in enumerate(视频路径列表):

            文件名 = os.path.basename(视频路径)

            输出路径 = os.path.join(输出文件夹, f"裁剪_{文件名}")

            self.裁剪视频(视频路径, 开始时间, 结束时间, 输出路径)

    def 智能创作简单拼接视频(self, 输出路径, 数量=3):

        if len(self.素材列表) < 数量:

            print("素材数量不足,无法完成智能创作。")

            return

        随机选择的素材 = random.sample(self.素材列表, 数量)

        self.拼接视频(随机选择的素材, 输出路径)

    def 添加滤镜(self, 视频路径, 滤镜类型, 输出路径):

        clip = VideoFileClip(视频路径)

        if 滤镜类型 == "灰度":

            new_clip = clip.fx(mp.vfx.blackwhite)

        elif 滤镜类型 == "复古":

            new_clip = clip.fx(mp.vfx.colorx, 0.7).fx(mp.vfx.lum_contrast, lum=10, contrast=20)

        else:

            print("不支持的滤镜类型。")

            return

        new_clip.write_videofile(输出路径, codec="libx264")

        new_clip.close()

        clip.close()

    def 批量添加滤镜(self, 视频_path_list, 滤镜_type, 输出_folder):

        if not os.path.exists(输出_folder):

            os.makedirs(输出_folder)

        for video_path in 视频_path_list:

            file_name = os.path.basename(video_path)

            output_path = os.path.join(输出_folder, f"{滤镜_type}_{file_name}")

            self.添加滤镜(video_path, 滤镜_type, output_path)

    def 添加字幕(self, 视频路径, 字幕内容, 开始_time, 结束_time, 输出路径):

        video = VideoFileClip(视频路径)

        txt_clip = (TextClip(字幕内容, fontsize=70, color='white')

                    .set_position(('center', 'bottom'))

                    .set_duration(结束_time - 开始_time)

                    .set_start(开始_time))

        final = CompositeVideoClip([video, txt_clip])

        final.write_videofile(输出路径, codec="libx264")

        final.close()

        video.close()

    def 批量添加字幕(self, 视频_path_list, 字幕_content, 开始_time, 结束_time, 输出_folder):

        if not os.path.exists(输出_folder):

            os.makedirs(输出_folder)

        for video_path in 视频_path_list:

            file_name = os.path.basename(video_path)

            output_path = os.path.join(输出_folder, f"字幕_{file_name}")

            self.添加字幕(video_path, 字幕_content, 开始_time, 结束_time, output_path)

    def 音频处理(self, 视频路径, 音频_path, 音量_factor, 输出_path):

        video = VideoFileClip(视频路径)

        audio = AudioFileClip(音频_path)

        audio = audio.volumex(音量_factor)

        new_video = video.set_audio(audio)

        new_video.write_videofile(输出_path, codec="libx264")

        new_video.close()

        video.close()

        audio.close()

    def 批量音频处理(self, 视频_path_list, 音频_path, 音量_factor, 输出_folder):

        if not os.path.exists(输出_folder):

            os.makedirs(输出_folder)

        for video_path in 视频_path_list:

            file_name = os.path.basename(video_path)

            output_path = os.path.join(输出_folder, f"音频处理_{file_name}")

            self.音频处理(video_path, 音频_path, 音量_factor, output_path)

if __name__ == "__main__":

    # 请替换为你的素材文件夹实际路径

    系统 = ShortVideoMatrixEditingSystem("your_video_folder")

    # 查看素材列表

    print("素材列表:")

    print(系统.查看素材列表())

    # 查看素材分类

    print("素材分类:")

    print(系统.查看素材分类())

    # 添加素材示例

    系统.添加素材("new_video.mp4", "新分类")

    # 删除素材示例

    系统.删除素材("your_video.mp4")

    # 搜索素材示例

    搜索结果 = 系统.搜索素材("video")

    print("搜索结果:")

    print(搜索结果)

————————————————

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


原文链接:https://blog.csdn.net/vx_13076927178/article/details/146986751

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容