如何用Moviepy制作透明视频?

问题描述 投票:0回答:2

我正在尝试使用 Alpha 创建透明视频。

这是我的代码:

import moviepy.editor as mpe
clip = mpe.VideoFileClip("input3.mov")
mask = mpe.ImageClip("01.png", ismask=True, fromalpha=True).to_mask()
clip = clip.set_mask(mask)
final_clip = mpe.CompositeVideoClip([clip])
final_clip.write_videofile("output1.avi", codec="rawvideo")

使用的文件:

01.png

input3.mov

输出不透明(使用 Adobe After Effects 测试)。

阅读后https://github.com/Zulko/moviepy/issues/1502我找到了一种方法来做到这一点 - 通过将剪辑渲染为图像序列,我最终得到了一系列带有 Alpha 的图像。虽然不是透明视频,而是透明图片序列,我也可以接受,但是需要重新处理。

import moviepy.editor as mpe
clip = mpe.VideoFileClip("input3.mov")
mask = mpe.ImageClip("01.png", ismask=True, fromalpha=True).to_mask()
clip = clip.set_mask(mask)
final_clip = mpe.CompositeVideoClip([clip])
final_clip.write_images_sequence('00/frame%05d.png', fps=25, withmask=True, logger='bar')

但是有一个小问题,图片边缘有黑边。 ↓↓↓

黑色边框.jpg

我猜可能是默认黑色背景的效果。我更改背景颜色后,发现导出的图像序列丢失了alpha,这不是我想要的结果。

import moviepy.editor as mpe
clip = mpe.VideoFileClip("input3.mov")
mask = mpe.ImageClip("01.png", ismask=True, fromalpha=True).to_mask()
clip = clip.set_mask(mask)
final_clip = mpe.CompositeVideoClip([clip], bg_color=(255, 255, 255))
final_clip.write_images_sequence('00/frame%05d.png', fps=25, withmask=True, logger='bar')

缺少 alpha 的白色背景图像。 ↓↓↓

缺少 alpha.png

还有什么办法可以直接获取透明视频?

python video mask alpha moviepy
2个回答
1
投票

我修改了素材和代码来制作视频,最终得到了一个透明的视频。

此方法有局限性,并不适合所有情况。

这是用来制作视频的透明图像素材。导出透明序列图后,会有黑色边框,所以不使用此方法。

改变想法:

将每张透明图像设为白色背景图像和由alpha转换而来的灰度信息图像。

使用不同的图像资源制作两次视频,然后使用 Adobe Premiere 的抠像功能制作透明视频。

最终效果如下:

[视频.mp4]


0
投票

这是我的第一次堆栈溢出响应,我很兴奋。 我正在使用 moviepy,我使用类似的东西来导出透明视频,而无需使用 adobe Premiere pro

composite.write_videofile("composition.avi", codec = 'hap_alpha', ffmpeg_params = ['-c:v', 'hap', '-format', 'hap_alpha', '-vf', 'chromakey=black:0.1:0.1'], audio = False)

首先我指定了一个接受透明度的编解码器。我正在使用 hap,我必须独立安装它。你也可以使用专业分辨率之类的东西。然后,我使用 ffmpeg_params 参数将参数列表传递给 ffmpeg 作为视频导出。这实际上没有意义,但是您需要在每个部分周围加上引号,并在每个部分之间使用逗号。这些只是您为定期使用 ffmpeg 导出视频而向终端提供的参数。起初,我在色度键周围有 2 组引号,这引发了错误,所以只使用 1 组引号!

© www.soinside.com 2019 - 2024. All rights reserved.