Build ErsatzTV Image / CI toolchain image resolves (push) Successful in 11s
Build ErsatzTV Image / Delimiter ban (release path) (push) Successful in 25s
Build ErsatzTV Image / Build & test (.NET) (push) Successful in 9m9s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (push) Successful in 6m41s
Build ErsatzTV Image / Functional E2E (curl + UI contracts) (push) Successful in 6m23s
Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (push) Skipped
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (push) Skipped
Build ErsatzTV Image / Build & push image (amd64) (push) Successful in 6m23s
Co-authored-by: Timothy <timothy@noreply.gitea.tblindustries.be>
75 lines
3.0 KiB
C#
75 lines
3.0 KiB
C#
using ErsatzTV.Core.FFmpeg;
|
|
|
|
namespace ErsatzTV.Core.Domain;
|
|
|
|
public record FFmpegProfile
|
|
{
|
|
public int Id { get; set; }
|
|
public string Name { get; set; }
|
|
public int ThreadCount { get; set; }
|
|
public bool NormalizeAudio { get; set; }
|
|
public bool NormalizeVideo { get; set; }
|
|
public HardwareAccelerationKind HardwareAcceleration { get; set; }
|
|
public string VaapiDisplay { get; set; }
|
|
public VaapiDriver VaapiDriver { get; set; }
|
|
public string VaapiDevice { get; set; }
|
|
public int? QsvExtraHardwareFrames { get; set; }
|
|
public double? ReadRate { get; set; }
|
|
public double? ReadRateCatchup { get; set; }
|
|
public bool? QsvPreferNativeDecoder { get; set; }
|
|
public int ResolutionId { get; set; }
|
|
public Resolution Resolution { get; set; }
|
|
public ScalingBehavior ScalingBehavior { get; set; }
|
|
public FilterMode PadMode { get; set; }
|
|
public FFmpegProfileVideoFormat VideoFormat { get; set; }
|
|
public string VideoProfile { get; set; }
|
|
public string VideoPreset { get; set; }
|
|
public bool AllowBFrames { get; set; }
|
|
public FFmpegProfileBitDepth BitDepth { get; set; }
|
|
public int VideoBitrate { get; set; }
|
|
public int VideoBufferSize { get; set; }
|
|
public FFmpegProfileTonemapAlgorithm TonemapAlgorithm { get; set; }
|
|
public FFmpegProfileAudioFormat AudioFormat { get; set; }
|
|
public int AudioBitrate { get; set; }
|
|
public int AudioBufferSize { get; set; }
|
|
public NormalizeLoudnessMode NormalizeLoudnessMode { get; set; }
|
|
public double? TargetLoudness { get; set; }
|
|
public int AudioChannels { get; set; }
|
|
public int AudioSampleRate { get; set; }
|
|
public bool NormalizeFramerate { get; set; }
|
|
public bool NormalizeColors { get; set; }
|
|
public bool? DeinterlaceVideo { get; set; }
|
|
|
|
public static FFmpegProfile New(string name, Resolution resolution) =>
|
|
new()
|
|
{
|
|
Name = name,
|
|
ThreadCount = 0,
|
|
ResolutionId = resolution.Id,
|
|
Resolution = resolution,
|
|
ScalingBehavior = ScalingBehavior.ScaleAndPad,
|
|
PadMode = FilterMode.Software,
|
|
VideoFormat = FFmpegProfileVideoFormat.H264,
|
|
VideoProfile = "high",
|
|
VideoPreset = ErsatzTV.FFmpeg.Preset.VideoPreset.Unset,
|
|
AllowBFrames = false,
|
|
AudioFormat = FFmpegProfileAudioFormat.Aac,
|
|
VideoBitrate = 2000,
|
|
VideoBufferSize = 4000,
|
|
TonemapAlgorithm = FFmpegProfileTonemapAlgorithm.Linear,
|
|
AudioBitrate = 192,
|
|
AudioBufferSize = 384,
|
|
NormalizeLoudnessMode = NormalizeLoudnessMode.Off,
|
|
AudioChannels = 2,
|
|
AudioSampleRate = 48,
|
|
DeinterlaceVideo = true,
|
|
NormalizeFramerate = false,
|
|
HardwareAcceleration = HardwareAccelerationKind.None,
|
|
QsvExtraHardwareFrames = 64,
|
|
QsvPreferNativeDecoder = true,
|
|
NormalizeAudio = true,
|
|
NormalizeVideo = true,
|
|
NormalizeColors = true
|
|
};
|
|
}
|