actionscript-3 - 如何将 RGBA 值流编码为视频?

标签 actionscript-3 stream ffmpeg bytearray video-encoding

进一步来说:
我有一个用于像素的 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 将 ARGB 值呈现为 ByteArray
  • 将字节序交换为 BGRA
  • 将其通过管道传输到 x264:原始解复用器、bgra 颜色空间、指定 fps/w/h/质量
  • ??
  • 利润。
  • 关于actionscript-3 - 如何将 RGBA 值流编码为视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7235547/

    相关文章:

    actionscript-3 - 过滤器问题: sprite does not dispatch MouseEvents anymore

    actionscript-3 - 在没有 AIR 运行时文件的情况下运行 AIR 应用程序

    actionscript-3 - 检查 AS3 中安全面板记住选项的状态

    c# - 如何打开进程并使整个类(class)都可以使用 Steam 读/写器

    linux - 如何使用 ffmpeg 高质量将 flv 转换为 avi

    actionscript-3 - 私有(private)函数被继承

    python - 如何使用 openCV python 读取 Youtube 直播?

    android - m3u8 无法在 android 4.0.3 中播放

    parsing - 为什么我不能让手动修改的 MPEG-4 扩展框( block )大小工作?

    audio - ffmpeg:添加多声道音频流(ac3 到 aac)