Python OpenCV:如何让输出视频沿用输入视频的格式配置?
直接复制原视频配置创建VideoWriter的方法
完全可以直接复用原视频的配置参数来创建VideoWriter,不用手动硬编码帧率、分辨率这些参数。下面是具体实现步骤和代码:
1. 从VideoCapture提取原视频参数
打开视频后,通过cap.get()方法提取关键配置:
- 帧率:
cap.get(cv2.CAP_PROP_FPS) - 帧宽度:
int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) - 帧高度:
int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) - 编码格式(FOURCC):先获取原视频的fourcc数值,再转成对应的字符码,最后生成
VideoWriter可用的fourcc对象
2. 完整代码示例
import cv2 # 打开输入视频 cap = cv2.VideoCapture('file.mp4') # 提取原视频参数 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)) # 处理原视频的FOURCC编码 fourcc_code = int(cap.get(cv2.CAP_PROP_FOURCC)) # 将数值转成四个字符的编码 fourcc_chars = chr((fourcc_code >> 0) & 0xFF) + \ chr((fourcc_code >> 8) & 0xFF) + \ chr((fourcc_code >> 16) & 0xFF) + \ chr((fourcc_code >> 24) & 0xFF) # 生成VideoWriter可用的fourcc对象 fourcc = cv2.VideoWriter_fourcc(*fourcc_chars) # 创建与原视频配置一致的VideoWriter # 注意:如果要生成单色alpha通道(单帧为单通道格式),需将isColor设为False out = cv2.VideoWriter('output_alpha.mp4', fourcc, fps, (frame_width, frame_height), isColor=False) # 处理每一帧(示例:生成单色alpha通道帧) while cap.isOpened(): ret, frame = cap.read() if not ret: break # 替换为你的目标检测逻辑,生成单色alpha通道帧(比如单通道灰度掩码) # 示例:将原帧转成灰度图作为alpha通道内容 alpha_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 写入输出视频 out.write(alpha_frame) # 释放资源 cap.release() out.release() cv2.destroyAllWindows()
注意事项
- 部分视频编码可能不支持写入操作(比如某些特殊硬件编码),如果遇到写入失败,可 fallback 到通用编码,比如
cv2.VideoWriter_fourcc(*'MP4V')或cv2.VideoWriter_fourcc(*'H264') - 若需输出带alpha通道的RGBA视频,要将
isColor设为True,且输出帧为4通道RGBA格式,同时注意MP4格式通常不支持alpha,可改用MOV等格式
内容的提问来源于stack exchange,提问作者Skyler
相关产品推荐
相关产品推荐

