Browse Source

try to workaround amd crop metadata ffmpeg bug

pull/2680/head
Jason Dove 8 months ago
parent
commit
92d0982aa4
No known key found for this signature in database
  1. 34
      ErsatzTV.FFmpeg/OutputOption/AmdCropMetadataWorkaroundFilter.cs
  2. 8
      ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs

34
ErsatzTV.FFmpeg/OutputOption/AmdCropMetadataWorkaroundFilter.cs

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
using ErsatzTV.FFmpeg.Format;
namespace ErsatzTV.FFmpeg.OutputOption;
public class AmdCropMetadataWorkaroundFilter(string videoFormat, FrameSize frameSize) : OutputOption
{
public override string[] OutputOptions
{
get
{
if (videoFormat is not VideoFormat.Hevc)
{
return [];
}
int cropPixels = frameSize.Height switch
{
1080 => 8,
_ => 0
};
if (cropPixels == 0)
{
return [];
}
return
[
"-bsf:v",
$"{videoFormat}_metadata=crop_bottom={cropPixels}"
];
}
}
}

8
ErsatzTV.FFmpeg/Pipeline/VaapiPipelineBuilder.cs

@ -283,6 +283,14 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder @@ -283,6 +283,14 @@ public class VaapiPipelineBuilder : SoftwarePipelineBuilder
currentState,
pipelineSteps);
if (ffmpegState.VaapiDriver == "radeonsi")
{
pipelineSteps.Add(
new AmdCropMetadataWorkaroundFilter(
desiredState.VideoFormat,
desiredState.CroppedSize.IfNone(desiredState.PaddedSize)));
}
return new FilterChain(
videoInputFile.FilterSteps,
watermarkInputFile.Map(wm => wm.FilterSteps).IfNone([]),

Loading…
Cancel
Save