从java应用程序发送原始像素数据时,FFMpeg以错误的帧速率压缩

从java应用程序发送原始像素数据时,FFMpeg以错误的帧速率压缩,java,ffmpeg,pipe,frame-rate,Java,Ffmpeg,Pipe,Frame Rate,我试图从一系列原始rgb24像素数据创建一个压缩的h264视频文件。 像素数据从java应用程序流式传输到ffmpeg.exe,ffmpeg.exe是其子流程 出于测试目的,我用rgb24像素数据创建了一个字节数组,然后将其发送到ffmpeg的输入流 除了一个问题外,一切正常 看起来编码文件的帧速率是错误的。 FFMpeg应以30fps的速率(-r 30)压缩视频文件 我正在发送30*20帧。所以我应该得到一个20秒长的视频文件。 但与此相反,视频文件的长度是24秒。 当我检查压缩文件属性时,它

我试图从一系列原始rgb24像素数据创建一个压缩的h264视频文件。 像素数据从java应用程序流式传输到ffmpeg.exe,ffmpeg.exe是其子流程

出于测试目的,我用rgb24像素数据创建了一个字节数组,然后将其发送到ffmpeg的输入流

除了一个问题外,一切正常

看起来编码文件的帧速率是错误的。 FFMpeg应以30fps的速率(-r 30)压缩视频文件

我正在发送30*20帧。所以我应该得到一个20秒长的视频文件。 但与此相反,视频文件的长度是24秒。 当我检查压缩文件属性时,它显示了预期的30fps

看起来预期帧速率和实际帧速率的比率为5:6(20-->24,30-->36)。 我也尝试过流rgb32像素数据,但我得到了相同的结果

代码:

ByteArrayOutputStream byteArray=newbytearrayoutputstream();
//构建框架
对于(int i=0;iok),求解它

我必须在输出流和输入流上强制fps。 在-i之前添加-r30,告诉ffmpeg输入流的速率为30fps

最终ffmpeg:

ffmpeg.exe -r 30 -vcodec rawvideo -f rawvideo -pix_fmt rgb24 -s 1024x800 -i pipe:0 -y -c:v libx264 -r 30 out.mkv

我在从静止图像帧编码时也遇到了这个问题。谢谢你的提示。
ffmpeg.exe -r 30 -vcodec rawvideo -f rawvideo -pix_fmt rgb24 -s 1024x800 -i pipe:0 -y -c:v libx264 -r 30 out.mkv