[go: up one dir, main page]

Skip to content

Commit

Permalink
fix quality parameter for vaapi
Browse files Browse the repository at this point in the history
Hardware encoders has different expectations about quality input. VAAPI's mjpeg encoder excepts JPEG quality divided by QP2LAMBDA as input.

Signed-off-by: gnattu <gnattuoc@me.com>
  • Loading branch information
gnattu committed May 16, 2024
1 parent 8aee500 commit 20a1da1
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -871,6 +871,15 @@ private async Task<string> ExtractVideoImagesOnIntervalInternal(
throw new InvalidOperationException("Empty or invalid input argument.");
}

float? encoderQuality = qualityScale;
if (vidEncoder.Contains("vaapi", StringComparison.InvariantCultureIgnoreCase))
{
// vaapi's mjpeg encoder uses jpeg quality divided by QP2LAMBDA (118) as input, instead of ffmpeg defined qscale
// ffmpeg qscale is a value from 1-31, with 1 being best quality and 31 being worst
// jpeg quality is a value from 0-100, with 0 being worst quality and 100 being best
encoderQuality = (100 - ((qualityScale - 1) * (100 / 30))) / 118;
}

// Output arguments
var targetDirectory = Path.Combine(_configurationManager.ApplicationPaths.TempDirectory, Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(targetDirectory);
Expand All @@ -884,7 +893,7 @@ private async Task<string> ExtractVideoImagesOnIntervalInternal(
filterParam,
outputThreads.GetValueOrDefault(_threads),
vidEncoder,
qualityScale.HasValue ? "-qscale:v " + qualityScale.Value.ToString(CultureInfo.InvariantCulture) + " " : string.Empty,
qualityScale.HasValue ? "-qscale:v " + encoderQuality.Value.ToString(CultureInfo.InvariantCulture) + " " : string.Empty,
"image2",
outputPath);

Expand Down

0 comments on commit 20a1da1

Please sign in to comment.