Codierungsproblem mit X264 und nicht durch 4 Auflösungen teilbarC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Codierungsproblem mit X264 und nicht durch 4 Auflösungen teilbar

Post by Anonymous »

Ich kodiere Rahmen, die H264 von BRGA bis YUV420P mit hohem Voreinstellung verwenden. Es funktioniert gut mit den meisten Auflösungen, aber Bilder auf 1366x768 sind stark verzerrt. Bisher habe ich festgestellt, dass es solche Probleme geben können, wenn Breite oder Höhe nicht teilbar ist. Wissen Sie, wie ich das beheben kann? >
Code: < /p>

Code: Select all

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() ?? [];

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post