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

使用OpenCV合并两个.AVI视频失败,求解决方案

解决OpenCV合并AVI视频失败的问题

问题描述

尝试用OpenCV将两个AVI视频按顺序合并,输出文件仅14KB且无法在VLC播放。两个输入视频由Fiji的TrackMate生成,大小分别为6.6MB和6.2MB,时长均为10秒。使用的代码如下:

import cv2

path = '/Volumes/GQA HD/GQA Experiments/2023_01_27/'
file1 = 'TrackMate capture of 1.avi'
file2 = 'TrackMate capture of 2.avi'

file_combined = 'TrackMate Combined captures of IMG_0240.avi'

# Paths of videos
videos = [path+file1, path+file2]

# Create new video
fourcc = cv2.VideoWriter_fourcc('M','J','P','G')
frameSize=(720,1280)
fps=30
video = cv2.VideoWriter(path+file_combined, fourcc, fps, frameSize)

# Write all frames sequentially to new video
for v in videos:
    curr_v = cv2.VideoCapture(v)
    while curr_v.isOpened():
        r, frame = curr_v.read()    # Get return value and curr frame of curr video
        if not r:
            break
        video.write(frame)          # Write the frame

video.release()                     # Save the video

解决方案

  • 匹配原视频的关键参数
    手动指定的frameSize和fps可能与输入视频实际参数不匹配,导致VideoWriter无法正常写入帧。应该从输入视频中读取这些参数:

    # 从第一个视频获取基准参数
    cap = cv2.VideoCapture(videos[0])
    fps = cap.get(cv2.CAP_PROP_FPS)
    frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    cap.release()
    
    # 用原视频参数初始化VideoWriter
    fourcc = cv2.VideoWriter_fourcc(*'MJPG')
    video = cv2.VideoWriter(path+file_combined, fourcc, fps, (frame_width, frame_height))
    
  • 添加视频读取有效性检查
    确保每个输入视频都能成功打开,避免因读取失败导致空帧写入:

    for v in videos:
        curr_v = cv2.VideoCapture(v)
        if not curr_v.isOpened():
            print(f"无法加载视频文件: {v}")
            continue
        while curr_v.isOpened():
            ret, frame = curr_v.read()
            if not ret:
                break
            # 确保帧尺寸与输出一致,不一致则调整
            if frame.shape[:2] != (frame_height, frame_width):
                frame = cv2.resize(frame, (frame_width, frame_height))
            video.write(frame)
        curr_v.release()  # 及时释放当前视频资源
    
  • 验证FourCC编码兼容性
    MJPG编码虽通用,但部分环境可能存在兼容性问题。如果仍失败,可尝试替换为cv2.VideoWriter_fourcc(*'XVID'),或者留空参数让OpenCV自动适配(部分版本支持)。

  • 确保资源彻底释放
    每个输入视频处理完成后必须调用curr_v.release(),避免资源泄漏导致视频写入不完整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 02:25:15