更具体地说: 我有一系列32位无符号RGBA整数用于像素 - 例如从左侧像素开始每行640个整数,从顶行开始每帧480行,重复n帧。有没有一种简单的方法可以将它提供给ffmpeg(或其他编码器),而无需先将其编码为通用图像格式?
我假设ffmpeg是我在这种情况下使用的最佳工具,但我愿意接受建议(输出视频格式无关紧要)。
我知道如果我知道正确的关键字,文档会启发我......如果我问错了问题,这就是我在最高级别尝试做的事情:
我有一些在显示树上绘制和动画的Actionscript代码,我将它包装在一个逐帧绘制BitmapData的AIR应用程序中。 AIR已被证明在直接编码这个输出时效率很低 - 我所管理的最好的是每秒几帧,我需要渲染至少15 fps,最好更像100 fps,当我发现时,我从ffmpeg中得到了ffmpeg喂它PNG图像(AIR可能需要1秒多的时间来编码一个640x480 png ......令人震惊)。我可以将原始字节数据发送到编码器或磁盘,而不是在AIR内部进行编码。
如果您想知道为什么我使用Actionscript来渲染动画或为什么必须快速编码,请不要。可以这么说,帧是在执行时计算的(例如,没有存储为.swf文件中的动画),我有非常大量的视频要创建,并且有限的时间这样做,并使用除了生成框架的Actionscript不是一种选择。
答案 0 :(得分:2)
我提出的解决方案是使用x264而不是ffmpeg。
出于测试目的,我将帧保存为文件:00.bin,01.bin,.. nn.bin,包含640x480x4 ARGB像素值。我用来验证方法可行的命令是以下可怕的黑客:
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。
简而言之,