将 PNG 转换为具有透明度的 webm 视频

Posted

技术标签:

【中文标题】将 PNG 转换为具有透明度的 webm 视频【英文标题】:Convert PNGs to webm video with transparency 【发布时间】:2016-04-30 16:18:44 【问题描述】:

我想使用avconv 将一系列 PNG 图像转换为 WebM 视频,同时保留透明度。

我了解输出视频中使用的像素格式必须支持透明度。所以我尝试了:

$ avconv -framerate 25 -f image2 -i frames/%03d.png -pix_fmt yuva420p output.webm

很遗憾,avconv 抱怨:

Incompatible pixel format 'yuva420p' for codec 'libvpx-vp9', auto-selecting format 'yuv420p'

我正在使用ffmpeg version 2.8.4-1+b1 Copyright (c) 2000-2015 the FFmpeg developers

【问题讨论】:

avconv != ffmpeg 【参考方案1】:

您还可以使用以下命令将已经包含 alpha 通道的视频转换为具有透明度的 webm 视频:

ffmpeg -i myVideoWithAlphaChannel.mov -c:v libvpx -vf format=rgba myVideoWithAlphaChannel.mov.webm

myVideoWithAlphaChannel.mov(使用 Blender3D 生成)的格式为:

“Quicktime”格式 “PNG”编解码器

作为输出:

H.264 RGBA

Here Blender 3D rendering configuration

【讨论】:

【参考方案2】:

使用 VP8:

ffmpeg -framerate 25 -f image2 -i frames/%03d.png -c:v libvpx -pix_fmt yuva420p output.webm

编辑:现在,使用 VP9

ffmpeg -framerate 25 -f image2 -i frames/%03d.png -c:v libvpx-vp9 -pix_fmt yuva420p output.webm

【讨论】:

感谢您的洞察力。但是,如果我运行您的命令,它无法正常工作,avconv 会抱怨 Specified pix_fmt is not supported。我正在使用avconv version 9.18-6:9.18-0ubuntu0.14.04.1, Copyright (c) 2000-2014 切换到最近的 ffmpeg 构建并尝试。 还是没有运气。我现在使用avconv version 11.3-6:11.3-1~trusty,但仍然得到Specified pix_fmt is not supported 在您的回答(现已更新)中,您写的是 avconv 而不是 ffmpeg。所以我也使用了avconv。使用 ffmpeg,谢谢! 对于任何对 Ubuntu LTS 感到沮丧的人:VP9+alpha 不适用于 ffmpeg 2.8.x,您应该获得 ffmpeg 3.x。【参考方案3】:

由于2016-07-13,可以使用 Alpha 通道 (VP9a) 对 VP9/webm 视频进行编码。

您只需要在该日期之后编译的 ffmpeg 的副本。顺便说一句,你只需要写:

ffmpeg -i frames/%03d.png output.webm

FFmpeg 理解 png 格式,并将设置默认帧率 25 fps 和 yuva420p 像素格式输出。

【讨论】:

我添加了-b:v 800k 以提高视频比特率以获得更好的图像质量。默认值不够好。 对我不起作用。 ffmpeg 4.3.2,视频不透明。

以上是关于将 PNG 转换为具有透明度的 webm 视频的主要内容,如果未能解决你的问题,请参考以下文章

当我将透明度添加到 gif 并将其转换为 webm 时出现故障

MFC如何将具有透明属性的PNG转换为HBITMAP

将位图 (bmp) 转换为具有透明度的 png (Windows c++)

回形针 - 将 SVG 转换为 PNG 时保持透明度

使用 GhostScript 将 PDF 转换为透明 PNG

在 Delphi 2007 中将具有透明度的位图保存为 PNG