首页 > 解决方案 > 来自moviepy的VideoFileClip在输出视频中生成多个帧

问题描述

在此处输入图像描述

import cv2
from moviepy.video.io.VideoFileClip import VideoFileClip

def process_image(img):
    out = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    return out

video_output = 'output_videos/Entry_02.mp4'
video_input = VideoFileClip('input_videos/Entry_02.mp4')
processed_video = video_input.fl_image(process_image)
%time processed_video.write_videofile(video_output, audio=False)

从moviepy探索VideoFileClip进行一些视频处理,不知道为什么它会在输出视频中生成重复的多个帧(3x3)。

标签: moviepy

解决方案


显然,write_videofile需要一个 RGB 图像(3 通道)而不是返回的灰度图像cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)out您应该通过复制到所有通道来获得所需的灰度图像。

def process_image(img):
    image_height = img.shape[0]
    image_width = img.shape[1]
    out = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    img = np.zeros((3, image_height, image_width))
    img[0] = out
    img[1] = out
    img[2] = out
    return np.moveaxis(img, 0, -1)

推荐阅读