You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCV VideoWriter生成视频时单张图片无序重复闪烁问题求助

图片合成视频无序闪烁问题解决

核心问题

你遇到的闪烁问题根源是os.listdir()返回的文件名顺序是操作系统默认的字典序,而非图片的自然播放顺序。比如文件名img1.jpg、img10.jpg、img2.jpg会被排成img1.jpg→img10.jpg→img2.jpg,导致视频中图片顺序混乱,看起来像某张图反复闪烁。

解决方案

对图片列表按自然顺序排序,以下是两种可行方法:

方法1:手动提取文件名中的数字排序(适用于带序号的文件名)

如果你的图片文件名是frame_001.jpg、img2.jpg这类带有序号的格式,可提取序号进行排序:

import cv2
import os
import numpy as np

image_folder = 'C:\\Users\\OneDrive\\Desktop\\new\\folder'
video_name = 'video.mp4'  # 建议MP4编码对应MP4后缀

# 筛选jpg文件并按文件名中的数字排序
images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]
# 提取文件名里的数字作为排序依据
images.sort(key=lambda x: int(''.join(filter(str.isdigit, x))))

# 获取帧尺寸
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width = frame.shape[:2]

# 初始化VideoWriter
fourcc = cv2.VideoWriter_fourcc(*'MP4V')
video = cv2.VideoWriter(video_name, fourcc, 30, (width, height))

# 逐帧写入视频
for image in images:
    img_path = os.path.join(image_folder, image)
    frame = cv2.imread(img_path)
    # 校验图片是否读取成功
    if frame is not None:
        video.write(frame)

# 释放资源
video.release()
cv2.destroyAllWindows()

方法2:使用natsort库实现通用自然排序

如果文件名格式复杂(比如包含字母和混合数字),推荐用第三方库natsort做自然排序:

  1. 先安装库:
pip install natsort
  1. 修改代码中的排序逻辑:
import cv2
import os
import numpy as np
from natsort import natsorted

image_folder = 'C:\\Users\\OneDrive\\Desktop\\new\\folder'
video_name = 'video.mp4'

images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]
# 自然排序
images = natsorted(images)

# 后续代码同方法1...

额外注意事项

  • 确保视频后缀与编码格式匹配:比如MP4V编码对应.mp4后缀,避免播放器兼容性问题。
  • 加入图片读取校验:防止因损坏图片写入错误帧,导致视频异常。

内容的提问来源于stack exchange,提问作者lelaf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 04:36:13