Bootstrap

【Python】图像批量合成视频,并以文件夹名称命名合成的视频

一个文件夹中有多个子文件夹,子文件夹中有多张图像。如何把批量把子文件夹中的图像合成视频,视频名称是子文件夹的名称,生成的视频保存到指定文件夹,效果记录。

代码

import os
import cv2


def create_video_from_images(image_folder, output_folder, fps=30):
    # 获取子文件夹名称,这将作为视频文件的名称
    video_name = os.path.basename(image_folder)
    video_path = os.path.join(output_folder, f"{video_name}.mp4")

    # 获取子文件夹中的所有图像文件
    images = [img for img in os.listdir(image_folder) if img.endswith((".png", ".jpg", ".jpeg", ".bmp", ".tiff"))]

    # 确保图像列表不为空
    if not images:
        print(f"No images found in {image_folder}")
        return

    # 对图像文件进行排序,确保它们按照正确的顺序合成视频
    images.sort()

    # 读取第一张图像以获取帧尺寸
    frame = cv2.imread(os.path.join(image_folder, images[0]))
    height, width, layers = frame.shape

    # 定义编码器并创建VideoWriter对象
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # 使用mp4编码
    video = cv2.VideoWriter(video_path, fourcc, fps, (width, height))

    # 遍历所有图像并将它们写入视频文件
    for image_file in images:
        image_path = os.path.join(image_folder, image_file)
        video.write(cv2.imread(image_path))

    # 释放VideoWriter并关闭所有窗口
    video.release()
    cv2.destroyAllWindows()
    print(f"Video {video_path} created successfully.")


# 主函数,用于遍历主文件夹中的所有子文件夹并创建视频
def main(main_folder, output_folder):
    # 确保输出文件夹存在,如果不存在则创建它
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # 遍历主文件夹中的所有子文件夹
    for subdir, _, files in os.walk(main_folder):
        # 检查子文件夹中是否包含图像文件
        if any(file.endswith((".png", ".jpg", ".jpeg", ".bmp", ".tiff")) for file in files):
            create_video_from_images(subdir, output_folder)


# 设置主文件夹和输出文件夹的路径
main_folder_path = "F:/test_video/image/"
output_folder_path = "F:/test_video/video/"

# 调用主函数开始处理
main(main_folder_path, output_folder_path)

代码解释:

  1. create_video_from_images 函数接收一个子文件夹路径和输出文件夹路径作为参数,用于将子文件夹中的图像合成视频。

  2. 在函数中,首先通过 os.path.basename 获取子文件夹的名称,这将用作视频文件的名称。然后,拼接输出视频文件的完整路径。

  3. 使用列表推导式查找子文件夹中的所有图像文件,并检查列表是否非空。

  4. 对图像文件进行排序,确保它们按照文件名顺序被读取和写入视频。

  5. 读取第一张图像来确定帧的尺寸,这对于创建 VideoWriter 对象是必需的。

  6. 定义视频编码器和创建 VideoWriter 对象。这里使用 ‘mp4v’ 编码来创建MP4格式的视频。

  7. 遍历子文件夹中的所有图像,并使用 VideoWriter 的 write 方法将它们写入视频文件。

  8. 释放 VideoWriter 对象并关闭所有OpenCV窗口。

  9. main 函数遍历主文件夹中的所有子文件夹,并调用 create_video_from_images 函数来为每个子文件夹创建视频。

10 在 main 函数中,首先检查输出文件夹是否存在,如果不存在则创建它。

  1. 最后,设置主文件夹和输出文件夹的路径,并调用 main 函数开始处理。

效果展示

子文件夹
在这里插入图片描述
每个子文件夹中都有若干图像
在这里插入图片描述
合成视频并以子文件夹名称命名
在这里插入图片描述

;