gpt4 book ai didi

actionscript-3 - AIR - 将位图数据传输到 FFmpeg 视频

转载 作者:行者123 更新时间:2023-12-04 18:17:22 25 4
gpt4 key购买 nike

嘿,我遇到了类似的问题:Converting RGB to YUV, + ffmpeg

在 AIR 中,我认为编码太长而无法以合理的速率渲染帧 - 所以我从 bitmap.getPixels(rect) 导出了 argb ByteArray直接写入文件。

所以对于一个 30 秒的 flash 动画,我会导出假设 1500 帧到 1500 .argb文件。

这种方法效果很好。我能够使用 ffmpeg cmd 渲染高清视频:

ffmpeg -f image2 -pix_fmt argb -vcodec rawvideo -s 640x380 -i frame_%d.argb -r 24 -qscale 1.1 -s 640x380 -i ./music.mp3 -shortest render-high.mpg

到目前为止,一切都很好!然而,在这两个进程之间,我们需要存储大约 3gb 的数据。

然后我尝试将所有 argb 附加到一个文件并让 ffmpeg 使用它,但没有从中得到任何好处......还尝试弄乱 tcp/udp 但卡住了......

有谁知道简化该过程并希望将 Air 和 ffmpeg 连接在一起的方法?

最佳答案

您需要使用以下参数启动 ffmpeg NativeProcess:

ffmpeg -f rawvideo -pix_fmt argb -s 640x480 -r 24 -i - -c libx264 -b:v 1024k video.mp4

在这里,您需要指定输入帧大小 (-s) 帧速率 (-r) 和视频输出比特率 (-b:v) 和输出文件名。这些论点的顺序也很重要。

然后你只需从 bitmap.getPixels(rect) 管道字节数组使用 _process.standardInput.writeBytes(data, 0, data.bytesAvailable); 到此 nativeProcess 的标准输入一帧一帧。

偶尔会发生 IOErrorEvent.STANDARD_INPUT_IO_ERROR - 这意味着 ffmpeg 无法跟上您的数据并且帧将被丢弃。除了降低帧大小、帧速率或比特率之外,您无能为力 - 您可能希望为帧设置某种队列,但高分辨率未压缩图像非常大,因此您只能存储数十个它们在内存中,由于 IO 速度慢,您将无法将它们存储在磁盘上。而这个问题只有在处理高清视频编码时才会出现。

调用 _process.closeInput();当您没有更多帧要发送并等待 ffmpeg 进程以代码 0 退出时。

关于actionscript-3 - AIR - 将位图数据传输到 FFmpeg 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11418978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com