是否可以将IntelliJ IDEA调试器附加到正在运行的Java进程?如果有,怎么样?
是否有资源下载Android开发环境的主题和/或样式,以便我可以在我的应用程序中使用它们?
谢谢
我正在寻找一种方法将java应用程序中的系列图像(jpegs)流式传输到FFMpeg STDIN管道.FFMpeg应处理这些图像并创建视频文件作为输出.
使用以下命令"ffmpeg.exe -i pipe:0 out.avi"将FFMpeg作为java应用程序的子进程执行
当我在控制台中运行"ffmpeg -i input.jpg out.avi"命令时,我按预期得到"out.avi"文件
但是当我在我的java应用程序中使用以下测试器代码时,我收到了一个错误.
File ffmpeg_output_msg = new File("ffmpeg_output_msg.txt");
ProcessBuilder pb = new ProcessBuilder(
"ffmpeg.exe","-i","pipe:0","out.avi");
pb.redirectErrorStream(true);
pb.redirectOutput(ffmpeg_output_msg);
pb.redirectInput(ProcessBuilder.Redirect.PIPE);
Process p = pb.start();
OutputStream ffmpegInput = p.getOutputStream();
byte[] image;
File file = new File("input.jpg");
image = new byte[(int)file.length()];
FileInputStream fileInputStream = new FileInputStream(file);
fileInputStream.read(image);
ImageInputStream iis = ImageIO.createImageInputStream(
new ByteArrayInputStream(image));
BufferedImage img = ImageIO.read(iis);
ImageIO.write(img, "JPEG", ffmpegInput);
Run Code Online (Sandbox Code Playgroud)
ffmpeg版本N-59664-g94cf4f8版权所有(c)2000-2014 FFmpeg开发人员于2014年1月7日22:07:02建立了gcc 4.8.2(GCC)
配置: - enable -gpl --enable-version3 --disable -w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls …
我有一个很长的字节数组,表示大图的abgr32像素数据 ( 0xAABBGGRR)。有没有一种有效的方法来改变java中这个长字节数组的endiness?
例如:
源字节数组是 [ FF,11,22,33,FF,12,34,11,..........]
是否可以将其转换为类似 [ 33,22,11,FF,11,34,12,FF,....] 的内容?效率很重要。
我曾尝试使用 ByteBuffer.order( ByteOrder.LITTLE_ENDIAN) 和ByteBuffer.order(ByteOrder.BIG_ENDIAN)转换,但它没有帮助。
感谢您的帮助。
我正在尝试根据一系列原始的rgb24像素数据创建一个压缩的h264视频文件。像素数据从Java应用程序流式传输到其子进程ffmpeg.exe。
为了进行测试,我创建了一个带有rgb24像素数据的字节数组,然后将其发送到ffmpeg的输入流。
除了一个问题,一切都正常。
看起来编码文件的帧速率不正确。FFMpeg应该以30fps的速率(-r 30)压缩视频文件。
我正在发送30 * 20帧。因此,我应该获得一个长度为20秒的视频文件。但与此相反,视频文件的长度是24秒。当我检查压缩文件的属性时,它按预期显示30fps。
看起来预期帧速率与实际帧速率之间的比率为5到6(20-> 24,30-> 36)。我也尝试流式传输rgb32像素数据,但结果相同。
码:
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
//building the frame
for (int i=0; i<1024*800; i++)
{
byteArray.write(i&0xFF); //r
byteArray.write(i&0xFF); //g
byteArray.write(i&0xFF); //b
}
byte pixelData[] = byteArray.toByteArray();
File ffmpeg_output_msg = new File("ffmpeg_output_msg.txt");
ProcessBuilder pb = new ProcessBuilder("ffmpeg.exe","-vcodec","rawvideo","-f","rawvideo","-pix_fmt","rgb24","-s","1024x800","-i","pipe:0","-r","30","-y","-c:v","libx264","out.mkv");
pb.redirectErrorStream(true);
pb.redirectOutput(ffmpeg_output_msg);
Process p = pb.start();
OutputStream ffmpegInput = p.getOutputStream();
//30fps, 20secs
for(int i=0;i<30*20;i++)
{
ffmpegInput.write(pixelData);
}
ffmpegInput.flush();
ffmpegInput.close();
Run Code Online (Sandbox Code Playgroud)
有什么想法可能是这个问题的根源吗?提前致谢
更新 我已将帧速率更改为其他值,并且看起来ffmpeg完全忽略了该参数。它始终使用25fps。仅对文件属性中写入的数据使用“ -r 30”效果(视频:MPEG4视频(H264)1024x800 30fps [视频])
编码文件中是否可能有两种不同的帧率?