我正在尝试从一组图像创建.ts文件。我的ffmpeg命令是
[/usr/bin/ffmpeg, -framerate 5, -re -f image2pipe , -i - , -pix_fmt yuv420p , -preset veryfast , -c:v libx264 , -profile:v main , -crf 20 , -sc_threshold 0 , -g 48 , -keyint_min 48 , -hls_time 5 , -hls_list_size 0 , -hls_flags append_list+omit_endlist+round_durations , -b 800k , -maxrate 1100k , -bufsize 2200k , /home/rashmi/Music/output.m3u8]
我从一个java函数调用它
List<String> command = new ArrayList<>();
command.add(PATH);
command.add(" -framerate " + streamInput.getVideoFPS());
command.add(" -re -f image2pipe ");
command.add(" -i - ");
command.add(" -pix_fmt yuv420p ");
command.add(" -preset veryfast ");
command.add(" -c:v libx264 ");
command.add(" -profile:v main ");
command.add(" -crf 20 ");
command.add(" -sc_threshold 0 ");
command.add(" -g 48 ");
command.add(" -keyint_min 48 ");
command.add(" -hls_time " + streamInput.getSegmentLength() + " ");
command.add(" -hls_list_size 0 ");
command.add(" -hls_flags append_list+omit_endlist+round_durations ");
command.add(" -b 800k ");
command.add(" -maxrate 1100k ");
command.add(" -bufsize 2200k ");
command.add(streamInput.getManifestFilePath());
System.out.println("FFMPEG COMMAND:\n"+ command.toString());
ProcessBuilder pb = new ProcessBuilder(command);
pb.redirectInput(ProcessBuilder.Redirect.PIPE);
pb.directory(Paths.get(streamInput.getFolderPath()).toFile());
Process ffmpegProcess = pb.inheritIO().start();
OutputStream ffmpegInput = ffmpegProcess.getOutputStream();
for(File frame: frames){
// System.out.println(frame.getAbsolutePath());
byte[] image;
image = new byte[(int)frame.length()];
FileInputStream fileInputStream = new FileInputStream(frame);
fileInputStream.read(image);
ImageInputStream iis = ImageIO.createImageInputStream(
new ByteArrayInputStream(image));
BufferedImage img = ImageIO.read(iis);
ImageIO.write(img, "PNG", ffmpegInput);
}
我要走了
[/usr/bin/ffmpeg, -framerate 5, -re -f image2pipe , -i - , -pix_fmt yuv420p , -preset veryfast , -c:v libx264 , -profile:v main , -crf 20 , -sc_threshold 0 , -g 48 , -keyint_min 48 , -hls_time 5 , -hls_list_size 0 , -hls_flags append_list+omit_endlist+round_durations , -b 800k , -maxrate 1100k , -bufsize 2200k , /home/rashmi/Music/output.m3u8]
ffmpeg version 4.3-2~18.04.york0 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
configuration: --prefix=/usr --extra-version='2~18.04.york0' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
[NULL @ 0x55a3c18a3e40] Unable to find a suitable output format for ' -framerate 5'
-framerate 5: Invalid argument
javax.imageio.IIOException: I/O error writing PNG file!
at java.desktop/com.sun.imageio.plugins.png.PNGImageWriter.write(PNGImageWriter.java:1277)
at java.desktop/javax.imageio.ImageWriter.write(ImageWriter.java:613)
at java.desktop/javax.imageio.ImageIO.doWrite(ImageIO.java:1628)
at java.desktop/javax.imageio.ImageIO.write(ImageIO.java:1594)
at com.streaming.hls.utils.StreamSegmentGenerator.buildStreamSegmet(StreamSegmentGenerator.java:81)
at com.streaming.hls.utils.StreamSegmentGenerator.main(StreamSegmentGenerator.java:110)
Caused by: java.io.IOException: Stream closed
at java.base/java.lang.ProcessBuilder$NullOutputStream.write(ProcessBuilder.java:442)
at java.base/java.io.OutputStream.write(OutputStream.java:162)
at java.desktop/javax.imageio.stream.FileCacheImageOutputStream.flushBefore(FileCacheImageOutputStream.java:255)
at java.desktop/com.sun.imageio.plugins.png.ChunkStream.finish(PNGImageWriter.java:142)
at java.desktop/com.sun.imageio.plugins.png.PNGImageWriter.write_IHDR(PNGImageWriter.java:487)
at java.desktop/com.sun.imageio.plugins.png.PNGImageWriter.write(PNGImageWriter.java:1244)
... 5 more
我尝试用-r替换-framerate,这也引发了同样的错误。但是当我直接在终端中运行命令时,它就工作了。我不确定出了什么问题[null@0x55a3c18a3e40]无法为'-framerate 5'-framerate 5'找到合适的输出格式:参数无效
暂无答案!
目前还没有任何答案,快来回答吧!