ffmpeg - 在 Imagemagick 中创建的透明 PNG 在 FFMPEG 中绘制为不透明

标签 ffmpeg imagemagick transparency

我正在尝试使用 ImageMagick 编写视频创建脚本,以创建一些叠加层,然后将其放置在视频顶部。

如果我尝试直接使用 ImageMagick 创建的图像,透明度将被绘制为不透明。

我使用 ImageMagick 绘制命令创建了一个透明的 PNG。当加载到 GIMP 并检查时,PNG 有一个 alpha channel ,并且每个透明像素似乎都具有透明度:RGBA = 0,0,0,0

然后在 ffmpeg 中用作叠加层时,此图像在视频中仅具有不透明的黑色背景。

如果我再次从 GIMP 导出图像,则文件看起来相同,但在视频中仅显示为纯蓝色(覆盖图像中绘图的颜色)。

我可以通过获取覆盖图像,将其加载到 GIMP 中,然后选择所有图像并从剪贴板创建一个新图像并导出它(使用与我之前重新导出时完全相同的设置而不创建新文件)和它来解决这个问题然后将完全按照需要工作,显示覆盖的非透明部分而不显示透明部分。

关键问题:

我如何才能编写在 GIMP 中创建新文件时以某种方式发生的转换,或者(更好)一开始就不会出错?

这是两个文件:

splinter 的:
This does not work
作品:
This one does work
有什么区别?

最佳答案

我建议您在使用 ImageMagick 时在输出文件名前加上 PNG32:强制它生成 32 位 ber 像素图像 - 即 R、G、B 和 Alpha 各 1 个字节,并希望 ffmpeg对此更满意。

convert input.png -draw ... PNG32:output.png

如果你运行 identify -verbose (也在 ImageMagick 套件中)在您损坏的图像和工作图像上,您会看到主要区别在于工作图像具有 color-type=6bit-depth=8而损坏的图像有color-type=3 (indexed)bit-depth=4
enter image description here

关于ffmpeg - 在 Imagemagick 中创建的透明 PNG 在 FFMPEG 中绘制为不透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28662697/

相关文章:

video - 在不重新编码的情况下将帧从 mp4 文件复制到 mp4 时,什么会改变 fps?

Ffmpeg/lavfi 是否可以淡出使用电影 = 过滤器而不是 -i 参数加载的图像叠加层

python - 强制 Pillow 生成 TrueColor 类型的图像,而我只使用黑白

html - PNG图像在网站上不透明,无法找出原因

android - 使用 Theme.AppCompat 时 Activity 不透明

php - 我想在视频的开头和结尾合并一些图像以生成新视频

java - 使用 JMagick 对图像重新采样

c# - 在 .NET 中重定向来自 COM 对象包装器的 STDERR 输出

android - 具有透明图像的 CSS border-image 在 Android 上显示边缘

c++ - avcodec_decode_video2 : what do the extra bytes prevent?