本章需要以下 Python 模块:

  • opencv-python:图像处理和视频写入

  • os:文件路径和文件遍历

2. 合成视频的基本原理
视频本质上是由一帧帧的静态图像按照一定的时间间隔播放形成的。在 OpenCV 中,我们可以通过 cv2.VideoWriter 类将图像写入为一个视频文件。

常见参数说明:
参数    含义
output.avi    输出文件名,格式可为 .avi 或 .mp4
fps    帧率,决定每秒显示几张图
frame_size    每帧的分辨率(宽,高)
fourcc    编码方式,如 'XVID'、'mp4v'
————————————————

3. 示例代码:将图片生成视频

以下是完整的 Python 示例代码:

import cv2
import os
 
# 配置参数
image_folder = 'image_test/'  # 图片目录路径 :ml-citation{ref="3,5" data="citationList"}
output_video = 'output.avi'    # 输出视频文件名
fps = 1                       # 帧率 :ml-citation{ref="5" data="citationList"}
frame_size = (1280, 720)       # 视频分辨率(需与图片尺寸一致):ml-citation{ref="3" data="citationList"}
 
# 获取排序后的图片列表 :ml-citation{ref="5" data="citationList"}
images = [img for img in os.listdir(image_folder) if img.endswith((".jpg", ".png"))]
images.sort()  # 按文件名排序 :ml-citation{ref="5" data="citationList"}
 
# 创建视频写入器
fourcc = cv2.VideoWriter_fourcc(*'XVID')  # 编码格式
video = cv2.VideoWriter(output_video, fourcc, fps, frame_size)
 
# 逐帧写入 :ml-citation{ref="3" data="citationList"}
for image in images:
    img_path = os.path.join(image_folder, image)
    frame = cv2.imread(img_path)
    frame = cv2.resize(frame, frame_size)  # 统一尺寸 :ml-citation{ref="3" data="citationList"}
    video.write(frame)
 
video.release()  # 释放资源 :ml-citation{ref="3" data="citationList"}

4. 注意事项
图片尺寸必须与 frame_size 一致,否则视频播放时会出现问题。可以使用 cv2.resize 调整图像尺寸。

fps 越高,视频播放越快。根据图片数量和期望总时长灵活设定。

输出文件格式与编码器要匹配,如 .avi 配 XVID,.mp4 配 mp4v。

  • OpenCV 官方文档:https://docs.opencv.org

  • 视频编码格式:XVID, MJPG, H264, mp4v

  • Python 图像处理扩展库:PIL, imageio

更多推荐