次の行を実行すると
final String[] command = new String[]{ffmpeg -y -i /home/user/video.mov -ss 0 -t 20 -vcodec libx264 -vpre slow -crf 18 -f flv -bf 0 -g 10 -vsync 1 -r 30 -an -threads 0 -s 1920x1080 /home/user/video0.flv};
final Process process = Runtime.getRuntime().exec(command, null, null);
ffmpeg を起動し、video.mov の最初の 20 秒を video.flv に変換します。ただし、高解像度のビデオでは、OutOfMemory がスローされることがあります。明らかに、ffmpeg は大量のメモリを消費します。
私の質問は次のとおりです-Javaから開始された外部プロセスは、JavaヒープスペースまたはOSメモリからメモリを取得していますか?
これを知っていれば、-Xms および -Xmx パラメータを調整する方法がわかります。外部プロセスが OS メモリを使用する場合、-Xms と -Xmx を低い値のままにします (OS の空きメモリを増やします)。それ以外の場合は、-Xms と -Xmx を高い値に設定して、Java プロセスにより多くのメモリを割り当てます。