矩陣剪輯系統(tǒng)搭建,矩陣剪輯系統(tǒng)源碼

批量處理功能,包含批量添加濾鏡、批量添加字幕、批量音頻處理。以下是完整的代碼:矩陣剪輯系統(tǒng)搭建,矩陣剪輯系統(tǒng)源碼

素材管理,剪輯功能,批量處理,ai智能創(chuàng)作,發(fā)布與管理,協(xié)作功能

批量添加濾鏡:批量添加濾鏡 方法會對傳入的視頻列表中的每個視頻應(yīng)用指定的濾鏡,并將處理后的視頻保存到指定的輸出文件夾。

批量添加字幕:批量添加字幕 方法會為傳入的視頻列表中的每個視頻在指定時間段添加相同的字幕,并保存到指定的輸出文件夾。

批量音頻處理:批量音頻處理 方法會為傳入的視頻列表中的每個視頻添加指定的音頻,并調(diào)整音量,最后保存到指定的輸出文件夾。

這些批量處理功能可以提高剪輯效率,讓你一次性處理多個視頻。

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(素材路徑)

? ? ? ? ? ? ? ? ? ? # 簡單分類,根據(jù)文件夾名分類

? ? ? ? ? ? ? ? ? ? 分類 = 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(新素材路徑)

? ? ? ? ? ? 目標(biāo)路徑 = os.path.join(self.素材文件夾路徑, 文件名)

? ? ? ? ? ? shutil.copy2(新素材路徑, 目標(biāo)路徑)

? ? ? ? ? ? self.素材列表.append(目標(biāo)路徑)

? ? ? ? ? ? if 分類:

? ? ? ? ? ? ? ? if 分類 not in self.素材分類:

? ? ? ? ? ? ? ? ? ? self.素材分類[分類] = []

? ? ? ? ? ? ? ? self.素材分類[分類].append(目標(biāo)路徑)

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? # 簡單根據(jù)文件夾名分類

? ? ? ? ? ? ? ? 分類 = os.path.basename(os.path.dirname(目標(biāo)路徑))

? ? ? ? ? ? ? ? if 分類 not in self.素材分類:

? ? ? ? ? ? ? ? ? ? self.素材分類[分類] = []

? ? ? ? ? ? ? ? self.素材分類[分類].append(目標(biāo)路徑)

? ? ? ? ? ? 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, 關(guān)鍵詞):

? ? ? ? 搜索結(jié)果 = []

? ? ? ? for 素材 in self.素材列表:

? ? ? ? ? ? if 關(guān)鍵詞 in 素材:

? ? ? ? ? ? ? ? 搜索結(jié)果.append(素材)

? ? ? ? return 搜索結(jié)果

? ? def 裁剪視頻(self, 視頻路徑, 開始時間, 結(jié)束時間, 輸出路徑):

? ? ? ? clip = VideoFileClip(視頻路徑)

? ? ? ? new_clip = clip.subclip(開始時間, 結(jié)束時間)

? ? ? ? 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, 視頻路徑列表, 開始時間, 結(jié)束時間, 輸出文件夾):

? ? ? ? if not os.path.exists(輸出文件夾):

? ? ? ? ? ? os.makedirs(輸出文件夾)

? ? ? ? for i, 視頻路徑 in enumerate(視頻路徑列表):

? ? ? ? ? ? 文件名 = os.path.basename(視頻路徑)

? ? ? ? ? ? 輸出路徑 = os.path.join(輸出文件夾, f"裁剪_{文件名}")

? ? ? ? ? ? self.裁剪視頻(視頻路徑, 開始時間, 結(jié)束時間, 輸出路徑)

? ? def 智能創(chuàng)作簡單拼接視頻(self, 輸出路徑, 數(shù)量=3):

? ? ? ? if len(self.素材列表) < 數(shù)量:

? ? ? ? ? ? print("素材數(shù)量不足,無法完成智能創(chuàng)作。")

? ? ? ? ? ? return

? ? ? ? 隨機(jī)選擇的素材 = random.sample(self.素材列表, 數(shù)量)

? ? ? ? self.拼接視頻(隨機(jī)選擇的素材, 輸出路徑)

? ? def 添加濾鏡(self, 視頻路徑, 濾鏡類型, 輸出路徑):

? ? ? ? clip = VideoFileClip(視頻路徑)

? ? ? ? if 濾鏡類型 == "灰度":

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

? ? ? ? elif 濾鏡類型 == "復(fù)古":

? ? ? ? ? ? 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, 視頻路徑, 字幕內(nèi)容, 開始_time, 結(jié)束_time, 輸出路徑):

? ? ? ? video = VideoFileClip(視頻路徑)

? ? ? ? txt_clip = (TextClip(字幕內(nèi)容, fontsize=70, color='white')

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

? ? ? ? ? ? ? ? ? ? .set_duration(結(jié)束_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, 結(jié)束_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, 結(jié)束_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__":

? ? # 請?zhí)鎿Q為你的素材文件夾實際路徑

? ? 系統(tǒng) = ShortVideoMatrixEditingSystem("your_video_folder")

? ? # 查看素材列表

? ? print("素材列表:")

? ? print(系統(tǒng).查看素材列表())

? ? # 查看素材分類

? ? print("素材分類:")

? ? print(系統(tǒng).查看素材分類())

? ? # 添加素材示例

? ? 系統(tǒng).添加素材("new_video.mp4", "新分類")

? ? # 刪除素材示例

? ? 系統(tǒng).刪除素材("your_video.mp4")

? ? # 搜索素材示例

? ? 搜索結(jié)果 = 系統(tǒng).搜索素材("video")

? ? print("搜索結(jié)果:")

? ? print(搜索結(jié)果)

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

? ? ? ? ? ? ? ? ? ? ? ? ? ? 版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。


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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容