将图像序列转换为透明的视频

Cod*_*tch 33 video command-line transparency ffmpeg codec

我看起来应该是一个非常简单的问题,但事实证明它比我想象的要困难得多.这是问题所在:

我有一个相当大的图像序列,由编号的帧组成(Maya的输出,它的价值).图像目前采用Targa(.tga)格式,但如果重要的话,我可以将它们转换为PNG或其他任意格式.重要的是,他们有一个alpha通道.

我想要做的是以编程方式将它们变成视频剪辑.格式并不重要,但它需要无损并具有alpha通道.Quicktime容器中的未压缩视频可能是理想的.

我最初的想法是ffmpeg,但是在浪费了大部分时间之后,它似乎根本没有对alpha通道的支持.我要么缺少某些东西,要么底层的libavcodec不会这样做.

那么,这里的正确方法是什么?像ffmpeg这样的命令行工具会很好,但是在Windows上运行并且可以从脚本调用的任何解决方案都可以.

注意:在视频中使用alpha chanel实际上并不是那么罕见,如果你想将它合成在另一个视频片段或静止图像之上,它真的很有用.据我所知,未压缩的视频,Quicktime动画编解码器和Sorenson Video 3编解码器都支持透明度,我也听说过H.264.我们真正谈论的是32位色深,这得到了广泛支持; Quicktime .mov文件和Windowss .avi文件都可以处理它,也可能更多.

Quicktime Pro非常乐意将图像序列转换为32位.mov文件.点击导出,将颜色深度更改为"百万种颜色+",选择动画编解码器,将质量提高到100,然后就是 - 无损压缩视频,带有alpha字符,并且自编解码器以来它几乎可以在任何地方播放自1.0版以来一直是Quicktime的一部分.问题是,Quicktime Pro没有任何类型的命令行界面(至少在Windows上).ffmpeg支持使用Quicktime Animation编解码器(它称为qtrle)进行编码,但它只支持24位的位深度.

问题是找不到支持Alpha通道的视频格式.Quicktime Animation是理想的,但即使是未压缩的视频也应该可以使用.问题是找到一个支持它的工具.

小智 29

是的,ffmpeg肯定支持视频文件中的alpha通道.并非ffmpeg中的所有编解码器似乎都支持alpha..MOV文件中的动画PNG是alpha的一个很好的组合.

使用alpha编辑/导入带alpha的图像到alpha视频: ffmpeg -i %d.png -vcodec png z.mov

Quicktime会玩这个.

使用alpha解码/导出带alpha的视频,尝试使用alpha: ffmpeg -i z.mov -f image2 export2\%d.png

请注意,我将它们导出到名为"export2"的目录中.务必将%d部分留在那里.这些命令将在Windows系统上运行.Linux/Mac用户可能需要添加引号并像往常一样交换一些\.


sat*_*toc 17

我知道这个话题有点旧,但无论如何我都在发帖.

使用Quicktime Animation(RLE)或FFVHUFF/HUFFYUV的FFMPEG可以.

  • ffmpeg -i yoursequence%d.png -vcodec qtrle movie_with_alpha.mov
  • ffmpeg -i yoursequence%d.png -vcodec ffvhuff movie_with_alpha.avi
  • ffmpeg -i yoursequence%d.png -vcodec huffyuv movie_with_alpha.avi

您将获得保留透明度(Alpha通道)的视频文件.

我也听说过On2-VP6的变种(还不是WebM-VP8)可以处理alpha,但我手头没有他们的编解码器.

这也有效. - ffmpeg -i yoursequence%d.png -vcodec png movie_with_alpha.mov


thi*_*der 9

对于遇到这个问题并沮丧地将头撞在墙上的 Web 开发人员……可以创建透明的 WebM 视频,但目前您可能需要从源代码编译 ffmpeg 和所需的库。

我想在网站上显示渲染的 Blender 视频但保留透明度。第一步是将 Blender 输出渲染为单独的 PNG 文件。之后,我花了很长时间试图强制 ffmpeg 将这些 PNG 文件转换为单个视频。基本命令很简单:

ffmpeg -i input%04d.png output.webm
Run Code Online (Sandbox Code Playgroud)

此命令input0000.png通过文件名加载所有 PNGinput9999.png并将它们转换为视频。透明度很快就消失了。梳理输出,我意识到 ffmpeg 有助于选择非透明格式:

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

此时我意识到我可能必须从头开始重新编译 ffmpeg。我在使用其他一些工具时苦苦挣扎,但最终还是回到了 ffmpeg。从最新的源代码编译 libvbx 和 ffmpeg 后,事情变得很有魅力。