使用cv2生成AVI后添加音频出现色彩异常的问题求助
视频编解码器导致色彩异常问题
操作流程
1. 用OpenCV提取MP4帧为JPG文件
vidcap = cv2.VideoCapture(inp_file) success, image = vidcap.read()
cv2.imwrite("raw_frames/frame%d.jpg"%count, image) success, image = vidcap.read() count += 1
2. 处理帧后合成AVI视频
img = Image.open(file) width, height = img.size frameSize = (width, height) outfile = inp_file.split(".")[0] + '_asc' out = cv2.VideoWriter(outfile+'.avi', cv2.VideoWriter_fourcc(*'DIVX'), ffps, frameSize) path = "rendered_frames"
for img_i in range(len(all_images)): img = cv2.imread(path+"/rf_"+str(img_i)+"+.jpg") out.write(img) print("\tVideo complete!") out.release()
3. 用MoviePy为AVI添加原MP4音频
def combine_audio(vidname, audname, outname, fps): from moviepy.video.io.VideoFileClip import VideoFileClip from moviepy.audio.io.AudioFileClip import AudioFileClip my_clip = VideoFileClip(vidname) audio_background = AudioFileClip(audname) final_clip = my_clip.set_audio(audio_background) final_clip.write_videofile(outname, fps=fps, codec='rawvideo') combine_audio(outfile+'.avi', inp_file, outfile+"ii.avi", ffps)
问题现象
添加音频后的视频出现色彩异常:人物皮肤变为紫色、原本的紫色物体变成红色,仅白色区域基本保持不变。但OpenCV直接生成的AVI视频显示完全正常。
对比说明:
- 原图:色彩显示正常,人物肤色自然,紫色物体颜色准确
- 处理后:肤色呈紫色调,原紫色物体转为红色,白色区域无明显变化
已尝试的无效方案
- 改用MP4V编码生成MP4视频,搭配对应编解码器添加音频,但压缩率过高,无法满足视频精度需求
- 按照MoviePy文档留空
codec字段,运行直接报错 - 发现OpenCV生成的DIVX编码AVI在VLC中显示编解码器为MPEG-4(FMP4),但MoviePy不识别该编解码器
内容的提问来源于stack exchange,提问作者Adam Jones
相关产品推荐
相关产品推荐

