mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-01-15 23:58:57 +00:00
Merge pull request #11492 from jellyfin/better-vbr-settings
Add better audio VBR settings
This commit is contained in:
@@ -2606,8 +2606,9 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
return 128000 * (outputAudioChannels ?? audioStream.Channels ?? 2);
|
||||
}
|
||||
|
||||
public string GetAudioVbrModeParam(string encoder, int bitratePerChannel)
|
||||
public string GetAudioVbrModeParam(string encoder, int bitrate, int channels)
|
||||
{
|
||||
var bitratePerChannel = bitrate / Math.Max(channels, 1);
|
||||
if (string.Equals(encoder, "libfdk_aac", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return " -vbr:a " + bitratePerChannel switch
|
||||
@@ -2622,14 +2623,26 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
|
||||
if (string.Equals(encoder, "libmp3lame", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return " -qscale:a " + bitratePerChannel switch
|
||||
// lame's VBR is only good for a certain bitrate range
|
||||
// For very low and very high bitrate, use abr mode
|
||||
if (bitratePerChannel is < 122500 and > 48000)
|
||||
{
|
||||
< 48000 => "8",
|
||||
< 64000 => "6",
|
||||
< 88000 => "4",
|
||||
< 112000 => "2",
|
||||
_ => "0"
|
||||
};
|
||||
return " -qscale:a " + bitratePerChannel switch
|
||||
{
|
||||
< 64000 => "6",
|
||||
< 88000 => "4",
|
||||
< 112000 => "2",
|
||||
_ => "0"
|
||||
};
|
||||
}
|
||||
|
||||
return " -abr:a 1" + " -b:a " + bitrate;
|
||||
}
|
||||
|
||||
if (string.Equals(encoder, "aac_at", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
// aac_at's CVBR mode
|
||||
return " -aac_at_mode:a 2" + " -b:a " + bitrate;
|
||||
}
|
||||
|
||||
if (string.Equals(encoder, "libvorbis", StringComparison.OrdinalIgnoreCase))
|
||||
@@ -7003,8 +7016,8 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
var bitrate = state.OutputAudioBitrate;
|
||||
if (bitrate.HasValue && !LosslessAudioCodecs.Contains(codec, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var vbrParam = GetAudioVbrModeParam(codec, bitrate.Value / (channels ?? 2));
|
||||
if (encodingOptions.EnableAudioVbr && vbrParam is not null)
|
||||
var vbrParam = GetAudioVbrModeParam(codec, bitrate.Value, channels ?? 2);
|
||||
if (encodingOptions.EnableAudioVbr && state.EnableAudioVbrEncoding && vbrParam is not null)
|
||||
{
|
||||
args += vbrParam;
|
||||
}
|
||||
@@ -7034,8 +7047,8 @@ namespace MediaBrowser.Controller.MediaEncoding
|
||||
|
||||
if (bitrate.HasValue && !LosslessAudioCodecs.Contains(outputCodec, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var vbrParam = GetAudioVbrModeParam(GetAudioEncoder(state), bitrate.Value / (channels ?? 2));
|
||||
if (encodingOptions.EnableAudioVbr && vbrParam is not null)
|
||||
var vbrParam = GetAudioVbrModeParam(GetAudioEncoder(state), bitrate.Value, channels ?? 2);
|
||||
if (encodingOptions.EnableAudioVbr && state.EnableAudioVbrEncoding && vbrParam is not null)
|
||||
{
|
||||
audioTranscodeParams.Add(vbrParam);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user