
旅行归来,明天就要去“小学生青椒志愿者课堂”,我有两个课时,分别是手工类“扇子”和“绣球花”。
第一课:扇子
考虑到扇子比较容易,凑不满1小时,就要用视频来凑时间。
IDM下载的视频

第二课,绣球花

这些视频的速度都比较快(加速了)

我想让视频慢一点,折叠动作看的清楚一点。如0.5倍速。用deepseek写代码

第一种:慢0.5倍,没有声音
'''
青椒课堂,绣球花,视频慢0,5倍。没有声音
deepseek,阿夏
20250710
'''import cv2
import os# 设置视频路径
path = r"C:\Users\jg2yXRZ\Downloads\Video"
folder_path=path+r"\绣球"
output_folder = path+r"\绣球2"
os.makedirs(output_folder, exist_ok=True)# 遍历文件夹中的 MP4 文件
for filename in os.listdir(folder_path):if filename.endswith(".mp4"):video_path = os.path.join(folder_path, filename)cap = cv2.VideoCapture(video_path)# 获取原视频的帧率和尺寸fps = cap.get(cv2.CAP_PROP_FPS)width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))# 设置输出视频(0.5倍速,FPS减半)output_path = os.path.join(output_folder, f"slow_{filename}")fourcc = cv2.VideoWriter_fourcc(*'mp4v')out = cv2.VideoWriter(output_path, fourcc, fps * 0.5, (width, height))# 逐帧读取并写入(实现0.5倍速)while cap.isOpened():ret, frame = cap.read()if not ret:breakout.write(frame) # 写入两次,降低播放速度out.write(frame) # 相当于每帧重复一次cap.release()out.release()print("视频处理完成!输出文件夹:", output_folder)
与原视频比,时间边长了,但是没有声音

第二种:慢0.5倍,有声音(声音延时,沉重)
'''
青椒课堂,绣球花,视频慢0,5倍。有声音(慢速,不好听)
deepseek,阿夏
20250710
'''
from moviepy.editor import VideoFileClip
from moviepy.video.fx import all as vfx
import os# 设置视频路径
path = r"C:\Users\jg2yXRZ\Downloads\Video"
folder_path = path + r"\绣球"
output_folder = path + r"\绣球3"
os.makedirs(output_folder, exist_ok=True)for filename in os.listdir(folder_path):if filename.endswith(".mp4"):video_path = os.path.join(folder_path, filename)# 加载视频并确保音频存在clip = VideoFileClip(video_path)# 0.5倍速处理(同时放慢视频和音频)slow_clip = clip.fx(vfx.speedx, 0.5)# 输出文件路径output_path = os.path.join(output_folder, f"slow_{filename}")# 写入文件,设置音频质量参数slow_clip.write_videofile(output_path,codec="libx264",audio_codec="aac",audio_bitrate="192k", # 提高音频比特率fps=clip.fps, # 保持原始帧率threads=4 # 使用多线程加速处理)# 关闭剪辑以释放资源clip.close()slow_clip.close()print(f"处理完成!所有视频已保存到: {output_folder}")

视频减速了,但是我还需要一个折纸步骤截图,选了这个视频做截图
第三步:视频截图
普通质量
'''
青椒课堂,绣球花视频1秒截图1张 普通质量格式
deepseek,阿夏
20250710
'''import cv2
import os# 视频文件夹路径
path = r'C:\Users\jg2yXRZ\Downloads\Video\绣球3'
output_folder = os.path.join(path, "绣球截图")
os.makedirs(output_folder, exist_ok=True)# 视频文件路径
video_path = os.path.join(path, "00slow_樱花绣球花折纸教程,轻松做出春日浪漫花朵,手作,剪纸折纸,好看视频.mp4")# 尝试打开视频
cap = cv2.VideoCapture(video_path)
if not cap.isOpened():print("错误:无法打开视频文件!请检查路径或格式。")exit()# 获取帧率
fps = cap.get(cv2.CAP_PROP_FPS)
if fps == 0:print("警告:未能读取帧率,尝试默认 30 FPS。")fps = 30 # 默认值frames_per_second = int(round(fps))
print(f"视频帧率: {fps} FPS")# 截图
frame_count = 0
saved_count = 0while cap.isOpened():ret, frame = cap.read()if not ret:breakif frame_count % frames_per_second == 0:output_path = os.path.join(output_folder, f"frame_{saved_count:04d}.jpg")cv2.imwrite(output_path, frame)saved_count += 1print(f"已保存: {output_path}")frame_count += 1cap.release()
print(f"完成!共保存 {saved_count} 张图片。")

1图大约23K,感觉不清晰

改用高清质量
'''
青椒课堂,绣球花视频1秒截图1张 超清格式
deepseek,阿夏
20250710
'''from moviepy.editor import VideoFileClip
import os
from PIL import Image# 设置路径
path = r'C:\Users\jg2yXRZ\Downloads\Video\绣球3'
output_folder = os.path.join(path, "绣球截图超清")
os.makedirs(output_folder, exist_ok=True)# 加载视频
video = VideoFileClip(os.path.join(path, "00slow_樱花绣球花折纸教程,轻松做出春日浪漫花朵,手作,剪纸折纸,好看视频.mp4"))
print(f"视频分辨率: {video.size}")for t in range(0, int(video.duration)):frame = video.get_frame(t) # 获取 NumPy 数组格式的帧output_path = os.path.join(output_folder, f"frame_{t:04d}.jpg")# 转换为 Pillow 图像并保存为高质量 JPEGimg = Image.fromarray(frame)img.save(output_path, quality=95, subsampling=0) # subsampling=0 禁用色度抽样print(f"已保存超清帧: {output_path}")print(f"完成!共保存 {int(video.duration)} 张超清图片。")

1秒1图,超清是60K

我感觉不够,还是做了0,5秒一张的
'''
青椒课堂,绣球花视频0.5秒截图1张 超清格式
deepseek,阿夏
20250710
'''from moviepy.editor import VideoFileClip
import os
from PIL import Image# 设置截图间隔(秒)
interval = 0.5 # 0.5秒1张# 设置路径
path = r'C:\Users\jg2yXRZ\Downloads\Video\绣球3'
output_folder = os.path.join(path, f"绣球截图超清_{interval}秒")
os.makedirs(output_folder, exist_ok=True)# 加载视频
video = VideoFileClip(os.path.join(path, "00slow_樱花绣球花折纸教程,轻松做出春日浪漫花朵,手作,剪纸折纸,好看视频.mp4"))
print(f"视频分辨率: {video.size}")# 计算总截图数量
total_frames = int(video.duration / interval)
print(f"预计截图数量: {total_frames} 张")# 截图
for i in range(total_frames):t = i * interval # 当前时间点(秒)frame = video.get_frame(t) # 获取当前帧output_path = os.path.join(output_folder, f"frame_{i:04d}.jpg")# 保存为超清 JPEGImage.fromarray(frame).save(output_path, quality=95, subsampling=0)print(f"已保存: {output_path} (时间: {t:.1f}秒)")print(f"完成!共保存 {total_frames} 张超清图片。")

手动删除重复样式的,保留1张。

最后稍微用到一些截图

希望明天的活动顺利