|
@@ -2021,14 +2021,20 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|
|
|
|
|
private static double GetVideoBitrateScaleFactor(string codec)
|
|
|
{
|
|
|
+ // hevc & vp9 - 40% more efficient than h.264
|
|
|
if (string.Equals(codec, "h265", StringComparison.OrdinalIgnoreCase)
|
|
|
|| string.Equals(codec, "hevc", StringComparison.OrdinalIgnoreCase)
|
|
|
- || string.Equals(codec, "vp9", StringComparison.OrdinalIgnoreCase)
|
|
|
- || string.Equals(codec, "av1", StringComparison.OrdinalIgnoreCase))
|
|
|
+ || string.Equals(codec, "vp9", StringComparison.OrdinalIgnoreCase))
|
|
|
{
|
|
|
return .6;
|
|
|
}
|
|
|
|
|
|
+ // av1 - 50% more efficient than h.264
|
|
|
+ if (string.Equals(codec, "av1", StringComparison.OrdinalIgnoreCase))
|
|
|
+ {
|
|
|
+ return .5;
|
|
|
+ }
|
|
|
+
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
@@ -2036,7 +2042,9 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|
|
{
|
|
|
var inputScaleFactor = GetVideoBitrateScaleFactor(inputVideoCodec);
|
|
|
var outputScaleFactor = GetVideoBitrateScaleFactor(outputVideoCodec);
|
|
|
- var scaleFactor = outputScaleFactor / inputScaleFactor;
|
|
|
+
|
|
|
+ // Don't scale the real bitrate lower than the requested bitrate
|
|
|
+ var scaleFactor = Math.Min(outputScaleFactor / inputScaleFactor, 1);
|
|
|
|
|
|
if (bitrate <= 500000)
|
|
|
{
|