视频转换成图像的脚本
from moviepy.editor import VideoFileClip
import os# 视频文件路径
video_file = '2024_10_21_16_06_IMG_2357.MOV'
# 输出文件夹路径
output_folder = 'output_images'
# 每秒转换的帧率
fps = 2# 从视频文件名中提取基本名称
base_filename = os.path.splitext(os.path.basename(video_file))[0]# 确保输出文件夹存在
if not os.path.exists(output_folder):os.makedirs(output_folder)# 加载视频文件
clip = VideoFileClip(video_file)# 计算视频的总帧数
total_frames = int(clip.duration * fps)# 遍历每一帧,并将其保存为图像
for i in range(total_frames):# 计算当前帧的时间戳timestamp = i / fps# 生成图像的文件名image_filename = f"{output_folder}/{base_filename}_frame_{i:05d}.png"# 保存当前帧为图像clip.save_frame(image_filename, t=timestamp)print(f"Saved {image_filename}")# 释放视频文件资源
clip.close()
print("视频转换完成。")
使用moviepy
库来将视频文件2024_10_21_14_45_IMG_1672.MOV
转换成300张图像。脚本还会创建一个与视频文件名前缀相同的文件夹来存储这些图像。确保已经安装了moviepy
库,如果没有安装,可以通过pip install moviepy
来安装
from moviepy.editor import VideoFileClip
import os# 视频文件名
video_filename = '2024_10_21_14_45_IMG_1672.MOV'# 提取视频文件的前缀作为文件夹名
folder_name = video_filename.split('.')[0]# 确保文件夹存在,如果不存在则创建
if not os.path.exists(folder_name):os.makedirs(folder_name)# 加载视频
clip = VideoFileClip(video_filename)# 计算每张图像的时间间隔
duration = clip.duration
interval = duration / 300# 逐帧提取图像
for i in range(300):# 计算当前帧的时间time = i * interval# 保存图像frame = clip.get_frame(time)image_filename = f'{folder_name}/{folder_name}_frame_{i:03d}.png'clip.save_frame(image_filename, t=time)# 输出文件夹名字
print(f'图像已保存到文件夹:{folder_name}')# 释放资源
clip.close()
-i https://pypi.tuna.tsinghua.edu.cn/simple/
import cv2
import os# 视频文件路径
video_file = '2024_10_21_14_45_IMG_1672.MOV'# 获取视频文件名和创建输出文件夹
video_name = os.path.basename(video_file)
folder_name = video_name.split('.')[0]
if not os.path.exists(folder_name):os.makedirs(folder_name)# 打开视频文件
cap = cv2.VideoCapture(video_file)# 获取视频的总帧数
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))# 计算跳过多少帧来获取300张图像
frame_step = max(1, total_frames // 60)# 初始化帧计数器
frame_count = 0# 遍历视频帧
while True:ret, frame = cap.read()if not ret:break# 每隔frame_step帧保存一张图像if frame_count % frame_step == 0:# 构建输出文件名image_name = f'{folder_name}/{frame_count:06d}.jpg'# 保存图像cv2.imwrite(image_name, frame)frame_count += 1# 释放视频捕获对象
cap.release()# 输出文件夹名字
print(f'Images have been saved to the folder: {folder_name}')