ffmpeg转换视频内存溢出的问题

本文介绍了使用FFmpeg处理大视频文件时遇到的内存溢出问题及解决方案,并分享了视频转换失败时调整分辨率的方法。

在使用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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值