我有一张1920x1080像素的图片,内存中保存的该图片的像素数组,rgba格式,四个字节为一个像素,也就是一个1920x1080x4的字节数组.
我想把这个数组传递给ffmpeg,并希望ffmpeg正确解析数据格式和图片宽高,我应该如何描述数据格式或者像素格式。
我使用的pipe在java端做的数据的输入和输出,下边是我把像素数组转mjpeg后,使用ffmpeg生成avi格式视频的命令,可以正确生成视频.
ProcessBuilder extractBuilder =
new ProcessBuilder(
ffmpeg
, "-f", "image2pipe"
, "-y", "-framerate", "5.0"
, "-codec", "mjpeg"
// , "-codec", "bmp"
, "-i", "pipe:0"
, "-y"
, "-loglevel"
, "quiet"
, "-f", "avi"
, "pipe:1"
);
.
.
省略一些中间过程
.
OutputStream ffmpegInput = process.getOutputStream();
BufferedImage img = "像素数组转成的img";
ImageIO.write(image, "jpg", ffmpegInput);
使用jpg虽然可以,但是ImageIO.write一次耗时30毫秒左右,所有我想直接把原始的像素数组传递给ffmpeg,但是不知道如何让ffmpegg知道数据格式以及一张图片的宽和高.
今天用chatgpt,突然想到以前问过的问题,结果真的给我了更好的方案。
把原来的
"-f", "image2pipe"
改成然后输入就是一个个1920x1080x3的字节数组