Я кодирую рамки с использованием H264 от BRGA до YUV420p с высокой предустановкой. Он отлично работает с большинством решений, но изображения на 1366x768 сильно искажены. До сих пор я обнаружил, что, если ширина или высота не делится на 4, могут возникнуть такие проблемы. Вы знаете, как я могу это исправить? >
code: < /p>
stride = this.width * 4;
encoder = new CodecContext(Codec.FindEncoderById(AVCodecID.H264))
{
Width = this.width,
Height = this.height,
Framerate = new AVRational(1, framerate),
TimeBase = new AVRational(1, framerate),
PixelFormat = AVPixelFormat.Yuv420p,
Profile = (int)FF_PROFILE.H264High,
MaxBFrames = 0,
GopSize = 10,
};
encoder.Open(null, new MediaDictionary
{
["crf"] = "22",
["tune"] = "zerolatency",
["preset"] = "veryfast",
["subme"] = "5"
});
rgbFrame.Width = width;
rgbFrame.Height = height;
rgbFrame.Format = (int)AVPixelFormat.Bgra;
unsafe
{
fixed (byte* ptr = frame)
{
rgbFrame.Data[0] = (nint)ptr;
}
}
rgbFrame.Linesize[0] = stride;
rgbFrame.Pts = pts++;
yuvFrame.Width = width;
yuvFrame.Height = height;
yuvFrame.Format = (int)AVPixelFormat.Yuv420p;
yuvFrame.EnsureBuffer();
yuvFrame.MakeWritable();
videoFrameConverter.ConvertFrame(rgbFrame, yuvFrame);
yuvFrame.Pts = pts;
var encodedFrames = encoder.EncodeFrame(yuvFrame, packetRef);
var packet = encodedFrames.FirstOrDefault();
var data = packet?.Data.ToArray() ?? [];
Подробнее здесь: https://stackoverflow.com/questions/794 ... esolutions