Command line 将图像序列转换为具有透明度的视频
我得到了一个看起来很简单的问题,但事实证明比我想象的要困难得多。问题是: 我有一个相当大的图像序列,由编号的帧组成(从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-APICommand line 将图像序列转换为具有透明度的视频,command-line,video,transparency,ffmpeg,codec,Command Line,Video,Transparency,Ffmpeg,Codec,我得到了一个看起来很简单的问题,但事实证明比我想象的要困难得多。问题是: 我有一个相当大的图像序列,由编号的帧组成(从Maya输出,不管它值多少)。这些图像目前是Targa(.tga)格式,但我可以将它们转换为PNG或其他任意格式(如果有必要)。重要的是,他们有一个阿尔法通道 我想做的是通过编程将它们转换成视频剪辑。格式并不重要,但它必须是无损的,并且有一个alpha通道。在Quicktime容器中未压缩的视频可能是理想的 我最初的想法是ffmpeg,但在浪费了一天的时间之后,它似乎根本不支持a
-尼克是的,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
-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的观点,我没有遇到过这样的视频格式。你可能需要自己滚动。对,它应该是透明的,所以如果你把它覆盖在背景图像上,你可以看到背景。我已经添加了更多关于这方面的信息