Command line 将图像序列转换为具有透明度的视频

Command line 将图像序列转换为具有透明度的视频,command-line,video,transparency,ffmpeg,codec,Command Line,Video,Transparency,Ffmpeg,Codec,我得到了一个看起来很简单的问题,但事实证明比我想象的要困难得多。问题是: 我有一个相当大的图像序列,由编号的帧组成(从Maya输出,不管它值多少)。这些图像目前是Targa(.tga)格式,但我可以将它们转换为PNG或其他任意格式(如果有必要)。重要的是,他们有一个阿尔法通道 我想做的是通过编程将它们转换成视频剪辑。格式并不重要,但它必须是无损的,并且有一个alpha通道。在Quicktime容器中未压缩的视频可能是理想的 我最初的想法是ffmpeg,但在浪费了一天的时间之后,它似乎根本不支持a

我得到了一个看起来很简单的问题,但事实证明比我想象的要困难得多。问题是:

我有一个相当大的图像序列,由编号的帧组成(从Maya输出,不管它值多少)。这些图像目前是Targa(.tga)格式,但我可以将它们转换为PNG或其他任意格式(如果有必要)。重要的是,他们有一个阿尔法通道

我想做的是通过编程将它们转换成视频剪辑。格式并不重要,但它必须是无损的,并且有一个alpha通道。在Quicktime容器中未压缩的视频可能是理想的

我最初的想法是ffmpeg,但在浪费了一天的时间之后,它似乎根本不支持alpha频道。要么我遗漏了什么,要么底层的libavcodec就是做不到

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

注意:在你的视频中有一个阿尔法香奈儿其实并不少见,如果你想在另一个视频剪辑或静止图像上合成它,它真的很有用。据我所知,未压缩视频、Quicktime动画编解码器和Sorenson视频3编解码器都支持传输,我听说H.264也支持传输。我们真正谈论的是32位颜色深度,这是相当广泛的支持;Quicktime.mov文件和Windowss.avi文件都可以处理它,而且可能还有更多

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

问题是找不到支持alpha通道的视频格式。Quicktime动画将是理想的,但即使是未压缩的视频也应该可以工作。问题在于找到一个支持它的工具。

Cody

您可以使用编写自己的命令行实用程序,我建议您坚持使用更高级别的Quicktime COM API,只有在必要时才深入研究C-API


-尼克

是的,ffmpeg确实支持视频文件中的alpha通道。ffmpeg中并非所有的编解码器都支持alpha。.MOV文件中的运动PNG是alpha的一个很好的组合

要使用alpha对图像进行编码/将图像导入到使用alpha的视频,请尝试:
ffmpeg-i%d.png-vcodec png z.mov

Quicktime将播放该节目

要将带有alpha的视频解码/导出为带有alpha的图像,请尝试:
ffmpeg-i z.mov-f image2 export2\%d.png


注意,我将它们导出到一个名为“export2”的目录中。请确保将%d个零件留在那里。这些命令将在Windows系统上正常工作。Linux/Mac用户可能需要添加引号,并像往常一样交换一些。

我知道这个主题有点老,但我还是要发布

FFMPEG和Quicktime动画(RLE)或FFVHUFF/HUFFYUV都可以

  • 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

对于遇到这个问题并沮丧地把头撞在墙上的web开发人员来说……创建一个新的脚本是可能的,但目前您可能需要从源代码编译ffmpeg和所需的库

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

ffmpeg -i input%04d.png output.webm
此命令通过
input9999.png
加载文件名为
input0000.png
的所有png,并将其转换为视频。透明度很快就丧失了。通过梳理输出,我意识到ffmpeg选择了一种非透明格式:

编解码器“flv”的不兼容像素格式“yuva420p”,自动选择格式“yuv420p”


此时,我意识到可能需要从头开始重新编译ffmpeg。我努力使用其他一些工具,但最终还是使用了ffmpeg。从最新的源代码编译libvbx和ffmpeg后,一切都很顺利。

检查您的ffmpeg版本

ffmpeg -version
ffmpeg版本n4.1.4版权所有(c)2000-2019 ffmpeg开发者 使用gcc 7(Ubuntu 7.4.0-1ubuntu1~18.04.1)构建

您将需要更新到v4以使用alpha支持

sudo snap install ffmpeg 
注意,您需要从系统中删除旧的ffmpeg

sudo apt-get remove ffmpeg  
ffmpeg -version

ffmpeg version n4.1.4 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
  configuration: --prefix= --prefix=/usr --disable-debug --disable-doc --disable-static --enable-avisynth --enable-cuda --enable-cuvid --enable-libdrm --enable-ffplay --enable-gnutls --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopus --enable-libpulse --enable-sdl2 --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-nonfree --enable-nvenc --enable-omx --enable-openal --enable-opencl --enable-runtime-cpudetect --enable-shared --enable-vaapi --enable-vdpau --enable-version3 --enable-xlib
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
注意-您可以在每次通过运行ffmpeg时隐藏上述内容,以防不断出现


-隐藏横幅

您希望alpha频道发生什么情况?视频在某些地方应该是透明的吗?(我不知道有哪种格式支持这一点)或者前一帧是否应该显示出来?我同意RoBerg的观点,我没有遇到过这样的视频格式。你可能需要自己滚动。对,它应该是透明的,所以如果你把它覆盖在背景图像上,你可以看到背景。我已经添加了更多关于这方面的信息