在使用ffmpeg转换视频遇到问题
问题1.在使用FFmpegFrameGrabber处理8k大视频时,start()方法报OOM
FFmpegFrameGrabber ff = new FFmpegFrameGrabber(new FileInputStream(originFile.getAbsoluteFile()));
ff.start();
Error on InputStream.reset() or skip(): java.lang.OutOfMemoryError: Java heap space
Error on InputStream.reset() or skip(): java.lang.OutOfMemoryError: Java heap space
Exception in thread "main" org.bytedeco.javacv.FrameGrabber$Exception: avformat_open_input() error -2: Could not open input "java.io.BufferedInputStream@61832929". (Has setFormat() been called?)
at org.bytedeco.javacv.FFmpegFrameGrabber.startUnsafe(FFmpegFrameGrabber.java:769)
at org.bytedeco.javacv.FFmpegFrameGrabber.start(FFmpegFrameGrabber.java:705)
at com.boe.utils.VideoTransferTest.main(VideoTransferTest.java:41)
解决方法:
将FFmpegFrameGrabber的maximumSize参数设置为0,解决问题。
FFmpegFrameGrabber ff = new FFmpegFrameGrabber(new FileInputStream(originFile.getAbsoluteFile()),0);
ff.start();
补充:maximumSize设置为0在转换某些视频的时候会报错,可以填一个具体值比如1000000
问题2.使用ffmpeg工具转换视频失败
line : frame= 1 fps=0.9 q=0.0 size= 0kB time=00:00:00.25 bitrate= 1.5kbits/s speed=0.222x
line : frame= 5 fps=3.0 q=0.0 size= 0kB time=00:00:00.27 bitrate= 1.4kbits/s dup=3 drop=0 speed=0.165x
line : frame= 11 fps=5.0 q=0.0 size= 0kB time=00:00:00.38 bitrate= 1.0kbits/s dup=3 drop=0 speed=0.175x
line : [hevc @ 00000171ed0e99c0] Error parsing NAL unit #2.
line : x264 [error]: malloc of size 102506688 failed
line : Video encoding failed
line : [aac @ 00000171ecee8f40] Qavg: 29900.762
line : [aac @ 00000171ecee8f40] 2 frames left in the queue on closing
line : Conversion failed!
解决方法:
将转换后视频的分辨率设置小一点。
ffmpegPath + " -i " + originFile.getAbsolutePath() + " -s 1280x720 -pix_fmt yuv420p " + outfile;
本文介绍了使用FFmpeg处理大视频文件时遇到的内存溢出问题及解决方案,并分享了视频转换失败时调整分辨率的方法。
4564

被折叠的 条评论
为什么被折叠?



