我正在寻找一种将一系列图像(jpeg)从java应用程序流式传输到FFMpeg STDIN管道的方法。
FFMpeg 应该处理这些图像并创建一个视频文件作为输出。
FFMpeg 作为 java 应用程序的子进程执行,使用以下命令“ffmpeg.exe -i pipeline:0 out.avi”
当我在控制台中运行“ffmpeg -i input.jpg out.avi”命令时,我按预期得到“out.avi”文件
但是当我在 java 应用程序中使用以下测试器代码时,出现错误。
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);
FFMpeg 输出:
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 --enable-iconv --enable -libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore- amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable- libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil 52. 62.100 / 52. 62.100
libavcodec 55. 47.100 / 55. 47.100
libavformat 55. 22.102 / 55. 22.102
libavdevice 55. 5.102 / 55. 5.102
libavfilter 4. 0.103 / 4. 0.103
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100
pipeline:: 处理输入时发现无效数据
有什么想法如何让它发挥作用吗?
非常感谢您的宝贵时间。
首先确保您在代码中使用的确切命令可以在命令行中运行。看来对于管道,必须手动指定格式和编解码器:
ffmpeg -f image2pipe -codec mjpeg -i pipe:0 out.avi < input.jpg
Java 程序本身看起来不错。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)