进一步来说:
我有一个用于像素的 32 位无符号 RGBA 整数序列 - 例如从左侧像素开始每行 640 个整数,从顶行开始每帧 480 行,重复 n 帧。有没有一种简单的方法可以将其提供给 ffmpeg(或其他一些编码器),而无需先将其编码为常见的图像格式?
我假设 ffmpeg 是我在这种情况下使用的最佳工具,但我愿意接受建议(输出视频格式并不重要)。
我知道如果我知道正确的关键字,文档会启发我......如果我问错了问题,这就是我试图在最高级别做的事情:
我有一些在显示树上绘制和动画的 Actionscript 代码,我将它包装在一个逐帧绘制 BitmapData 的 AIR 应用程序中。 AIR 已被证明在直接编码此输出时效率非常低 - 我管理的最好的是每秒几帧,我需要渲染至少 15 fps,最好更像 100 fps,当我离开 ffmpeg 时输入 PNG 图像(AIR 编码一个 640x480 png 可能需要 1 秒以上的时间......令人震惊)。我可以将原始字节数据发送到编码器或磁盘,而不是在 AIR 中进行编码,其速度与渲染速度一样快。
如果您想知道我为什么要使用 Actionscript 来渲染动画或者为什么必须快速对其进行编码,请不要。可以这么说,帧是在执行时计算的(例如,不作为动画存储在 .swf 文件中),我有大量的视频要创建并且时间有限,并且使用的不是生成框架的 ActionScript 不是一种选择。
最佳答案
我想出的解决方案是使用 x264 而不是 ffmpeg。
出于测试目的,我将帧保存为文件:00.bin、01.bin、..nn.bin,包含 640x480x4 ARGB 像素值。我用来验证该方法是否可行的命令是以下可怕的 hack:
cat *.bin | \
perl -e 'while (sysread(STDIN,$d,4)){print pack("N",unpack("V",$d));}' | \
x264 --demuxer raw --input-csp bgra --fps 15 --input-res 640x480 --qp 0 \
--muxer flv -o out.flv -
那里丑陋的 perl 片段有一个交换四字节字节序的技巧,因为 x265 只能采用 BGRA 而我的测试文件包含 ARGB。
简而言之,
关于actionscript-3 - 如何将 RGBA 值流编码为视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7235547/