Я использую демо-версию FFmpeg.AutoGen.Example
Для меня это хорошо, но для кодирования используется процессор. Это демо-версия FFmpeg.AutoGen:
Код: Выделить всё
private static unsafe void EncodeImagesToH264()
{
var frameFiles = Directory.GetFiles("./frames", "frame.*.jpg").OrderBy(x => x).ToArray();
using var fistFrameImage = ReadFrame(frameFiles.First());
var outputFileName = "frames/out.h264";
var fps = 25;
var sourceSize = new Size(fistFrameImage.Width, fistFrameImage.Height);
var sourcePixelFormat = AVPixelFormat.@AV_PIX_FMT_BGRA;
var destinationSize = sourceSize;
var destinationPixelFormat = AVPixelFormat.AV_PIX_FMT_YUV420P;
using var vfc = new VideoFrameConverter(sourceSize, sourcePixelFormat, destinationSize, destinationPixelFormat);
using var fs = File.Open(outputFileName, FileMode.Create);
using var vse = new H264VideoStreamEncoder(fs, fps, destinationSize);
var frameNumber = 0;
foreach (var frameFile in frameFiles)
{
using var bitmap = ReadFrame(frameFile);
var bitmapData = bitmap.Bytes;
fixed (byte* pBitmapData = bitmapData)
{
var data = new byte_ptr8 { [0] = pBitmapData };
var linesize = new int8 { [0] = bitmapData.Length / sourceSize.Height };
var frame = new AVFrame
{
data = data,
linesize = linesize,
height = sourceSize.Height
};
var convertedFrame = vfc.Convert(frame);
convertedFrame.pts = frameNumber * fps;
vse.Encode(convertedFrame);
}
Console.WriteLine($"frame: {frameNumber}");
frameNumber++;
}
vse.Drain();
}
Подробнее здесь: https://stackoverflow.com/questions/783 ... le-use-gpu