我用ffmpeg录制了一段视频
var inputArgs = string.Format(CultureInfo.InvariantCulture, "-framerate {0} -f rawvideo -pix_fmt {3} -video_size {1}x{2} -i -", VideoFPS, VideoXRes, VideoYRes, VideoPXLFormat);
var outputArgs = string.Format(CultureInfo.InvariantCulture, "-vcodec mpeg4 -crf {2} -pix_fmt yuv420p -preset {3} -shortest -r {1} \"{0}\"", outputPath, VideoFPS, VideoCRFValue, CompressionRate);
var ffmpegProcess = new Process
{
StartInfo =
{
FileName = ffmpegPath,
Arguments = $"{inputArgs} {outputArgs}",
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardInput = true
}
};
ffmpegProcess .Start();
var VideoRecordingFFmpegInput = VideoRecordingFFmpegProcces.StandardInput.BaseStream;
现在,我不时地将图像中的数据字节写入流中
VideoRecordingFFmpegInput.Write(framesByteArray, 0, sizeOfpack);
当我录制完这些画面时:
VideoRecordingFFmpegInput.Flush();
VideoRecordingFFmpegInput.Close();
ffmpegProcess.WaitForExit();
一切正常,它创建了我想要的文件。
当这个过程开始时,它会创建一个非常小的文件
在视频流中记录图像字节的过程中,这个大小不会改变(可能是写入RAM?)
但一旦ffmpeg过程完成,就会刷新/关闭
文件大小变为正常大小。
问题是,如果我记录几个小时,可能会导致OutOfMemory异常
有没有办法让帧记录下来并立即增加文件大小?(没有无限填充闸板?)