Browse Source

always downsample after loudnorm (#1639)

pull/1640/head
Jason Dove 2 years ago committed by GitHub
parent
commit
2119c88c97
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      CHANGELOG.md
  2. 19
      ErsatzTV.FFmpeg/Filter/NormalizeLoudnessFilter.cs
  3. 8
      ErsatzTV.FFmpeg/Pipeline/PipelineBuilderBase.cs

2
CHANGELOG.md

@ -46,6 +46,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). @@ -46,6 +46,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Allow playback of items with any positive duration, including less than one second
- Fix VAAPI transcoding of OTA content containing A53 CC data
- Fix AV1 software decoder priority (`libdav1d`, `libaom-av1`, `av1`)
- Fix some stream failures caused by loudnorm filter
### Changed
- Log search index updates under scanner category at debug level, to indicate a potential cause for the UI being out of date
@ -55,6 +56,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). @@ -55,6 +56,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Do not unnecessarily update the search index during media server library scans
- Use different library for reading song metadata that supports multiple tag entries
- Update `/iptv` routing to make UI completely inaccessible from that path prefix
- Use CUDA 11 instead of CUDA 12 in NVIDIA docker image to significantly lower required driver version
## [0.8.5-beta] - 2024-01-30
### Added

19
ErsatzTV.FFmpeg/Filter/NormalizeLoudnessFilter.cs

@ -2,15 +2,28 @@ @@ -2,15 +2,28 @@
public class NormalizeLoudnessFilter : BaseFilter
{
private readonly Option<int> _audioSampleRate;
private readonly AudioFilter _loudnessFilter;
public NormalizeLoudnessFilter(AudioFilter loudnessFilter) => _loudnessFilter = loudnessFilter;
public NormalizeLoudnessFilter(AudioFilter loudnessFilter, Option<int> audioSampleRate)
{
_loudnessFilter = loudnessFilter;
_audioSampleRate = audioSampleRate;
}
public override string Filter => _loudnessFilter switch
public override string Filter
{
AudioFilter.LoudNorm => "loudnorm=I=-16:TP=-1.5:LRA=11",
get
{
int audioSampleRate = _audioSampleRate.IfNone(48) * 1000;
return _loudnessFilter switch
{
AudioFilter.LoudNorm => $"loudnorm=I=-16:TP=-1.5:LRA=11,aresample={audioSampleRate}",
_ => string.Empty
};
}
}
public override FrameState NextState(FrameState currentState) => currentState;
}

8
ErsatzTV.FFmpeg/Pipeline/PipelineBuilderBase.cs

@ -416,9 +416,11 @@ public abstract class PipelineBuilderBase : IPipelineBuilder @@ -416,9 +416,11 @@ public abstract class PipelineBuilderBase : IPipelineBuilder
{
if (audioInputFile.DesiredState.NormalizeLoudnessFilter is not AudioFilter.None)
{
_audioInputFile.Iter(
f => f.FilterSteps.Add(
new NormalizeLoudnessFilter(audioInputFile.DesiredState.NormalizeLoudnessFilter)));
var filter = new NormalizeLoudnessFilter(
audioInputFile.DesiredState.NormalizeLoudnessFilter,
audioInputFile.DesiredState.AudioSampleRate);
_audioInputFile.Iter(f => f.FilterSteps.Add(filter));
}
}

Loading…
Cancel
Save