文件夹中视频批量调节参数,这样操作不需要打开剪映了!
from moviepy.editor import VideoFileClip, concatenate_videoclips
import cv2
import os
# 自定义增强函数
def enhance_frame(frame, brightness=-1, contrast=-1, saturation=-1, sharpening_factor=-1):
# OpenCV处理
bgr_frame = frame[:, :, ::-1].copy() # RGB转BGR
# 调整亮度(假设亮度范围-100到100,负数表示降低亮度)
bgr_frame += brightness * 255 / 100
# 对比度调整(假设对比度范围-100到100,负数表示降低对比度)
alpha = 1.0 + contrast / 100.0
bgr_frame = cv2.convertScaleAbs(bgr_frame, alpha=alpha, beta=0)
# 饱和度调整(假设饱和度范围-100到100,负数表示降低饱和度)
hsv_frame = cv2.cvtColor(bgr_frame, cv2.COLOR_BGR2HSV)
hsv_frame[:, :, 1] *= (1 + saturation / 100)
bgr_frame = cv2.cvtColor(hsv_frame, cv2.COLOR_HSV2BGR)
# 锐化(假设锐化程度可通过系数调整,负数无效,此处仅为示例)
if sharpening_factor > 0:
kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
sharp_frame = cv2.filter2D(bgr_frame, -1, kernel, sharpening_factor)
bgr_frame = sharp_frame
# 返回电影Py内部使用的RGB格式
return bgr_frame[:, :, ::-1]
# 批量处理
input_folder = 'input_videos'
output_folder = 'output_videos'
for filename in os.listdir(input_folder):
if filename.endswith(('.mp4', '.avi', '.mkv', '.mov', '.wmv', '.flv')):
input_video_path = os.path.join(input_folder, filename)
output_video_path = os.path.join(output_folder, 'processed_' + filename)
# 创建VideoFileClip并设置特效
clip = VideoFileClip(input_video_path)
enhanced_clip = clip.fx(enhance_frame, brightness=-1, contrast=-1, saturation=-1, sharpening_factor=-1)
# 变速处理(假设降低一半速度)
slower_clip = enhanced_clip.speedx(0.5)
# 抽帧处理(假设抽掉每两帧的第二帧)
# 注意:抽帧可能会导致不流畅的播放效果,这里仅作示意,实际应用时请谨慎
# dropped_frames_clip = slower_clip.subclip(t_start=None, t_end=None, every_second=2)
# 写入视频文件
slower_clip.write_videofile(output_video_path, audio=True)
注:变速和抽帧操作未在enhance_frame函数中完成,
实际上在moviepy中可以单独使用fx方法来实现变速(speedx)和抽帧(subclip)的功能。
清晰度提升通常意味着超分辨率,这不在本示例范围内,一般会使用专门的算法如ESPCN等。
“光感”是一种主观感受,难以量化处理,若要模拟类似效果,可能需要运用特定的艺术滤镜或风格迁移技术。
请根据具体需求调整各项参数,并完善缺失的部分逻辑。
定义了一个名为enhance_frame的函数,用于对单个视频帧进行增强处理,包括亮度、对比度、饱和度和锐化的调整。这个函数首先将帧从RGB格式转换为BGR格式以便使用OpenCV进行处理,然后根据传入参数分别调整各项属性,并最终返回处理后的RGB格式帧。
设置了输入和输出文件夹路径。
遍历输入文件夹内的所有文件,对于符合视频格式(例如.mp4, .avi, .mkv, .mov, .wmv, .flv)的文件,读取并创建VideoFileClip对象。
使用enhance_frame函数对视频剪辑每一帧进行增强处理,得到一个新的增强过的视频剪辑enhanced_clip。
将增强过的视频进一步减速处理,即降低播放速度至原来的一半,生成新的视频剪辑slower_clip。
(注释掉的部分)原代码还包含了抽帧处理的示例,但在这里并未启用。如果启用,会按设定的频率(比如每两帧抽掉第二帧)抽取部分帧来生成新的视频剪辑。
最后,将经过增强和减速处理的slower_clip视频剪辑写入到输出文件夹,同时保留音频信息。
综上所述,该代码实现了对视频文件进行批量的增强(亮度、对比度、饱和度、锐化)和变速处理,并将处理后的结果输出到指定的文件夹中。