From 31e848b60d6dec8e504568ebf2d6d880392449dd Mon Sep 17 00:00:00 2001 From: John Andrews Date: Wed, 14 Feb 2024 20:43:12 +1300 Subject: [PATCH] FF-1329 - added prores encoder option --- .../Video/FfmpegBuilderProres.cs | 51 +++++++++++++++---- 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderProres.cs b/VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderProres.cs index 05dd3143..e3df6424 100644 --- a/VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderProres.cs +++ b/VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderProres.cs @@ -18,11 +18,39 @@ public class FfmpegBuilderProres : FfmpegBuilderNode /// Gets that this is an enterprise flow element /// public override bool Enterprise => true; + + /// + /// Gets or sets the profile to use + /// + [Select(nameof(Encoders), 1)] + [DefaultValue(4)] + public string Encoder { get; set; } + + private static List _Encoders; + /// + /// Gets or sets the encoder options + /// + public static List Encoders + { + get + { + if (_Encoders == null) + { + _Encoders = new List + { + new () { Label = "prores", Value = "prores" }, + new () { Label = "prores_ks / prores_kostya", Value = "prores_ks" }, + new () { Label = "prores_aw / prores_anatolyi", Value = "prores_aw" } + }; + } + return _Encoders; + } + } /// /// Gets or sets the profile to use /// - [Select(nameof(Profiles), 1)] + [Select(nameof(Profiles), 2)] [DefaultValue(3)] public int Profile { get; set; } @@ -51,7 +79,7 @@ public class FfmpegBuilderProres : FfmpegBuilderNode /// /// Gets or sets the pixel format to use /// - [Select(nameof(PixelFormats), 2)] + [Select(nameof(PixelFormats), 3)] [DefaultValue("yuva444p10le")] public string PixelFormat { get; set; } @@ -67,6 +95,7 @@ public class FfmpegBuilderProres : FfmpegBuilderNode { _PixelFormats = new List { + new () { Label = "Not Set", Value = string.Empty }, new () { Label = "4:2:2", Value = "yuva422p10le" }, new () { Label = "4:4:4", Value = "yuva444p10le" } }; @@ -78,10 +107,11 @@ public class FfmpegBuilderProres : FfmpegBuilderNode /// /// Gets or sets the profile to use /// - [Slider(3)] + [Slider(4, inverse: true)] [Range(0, 32)] [DefaultValue(9)] public int Quality { get; set; } + /// /// Executes the flow element @@ -106,7 +136,8 @@ public class FfmpegBuilderProres : FfmpegBuilderNode stream.EncodingParameters.Clear(); // prores_ks -profile:v 3 -qscale:v 13 -vendor apl0 -pix_fmt yuva444p10le - stream.EncodingParameters.Add("prores_ks"); + string encoder = Encoder?.EmptyAsNull() ?? "prores"; + stream.EncodingParameters.Add(encoder); stream.EncodingParameters.Add("-profile:v"); int profile = this.Profile; if (profile < 0) @@ -126,13 +157,15 @@ public class FfmpegBuilderProres : FfmpegBuilderNode stream.EncodingParameters.Add("-vendor"); stream.EncodingParameters.Add("apl0"); - string pix_fmt = PixelFormat?.EmptyAsNull() ?? "yuva422p10le"; - stream.EncodingParameters.Add("-pix_fmt"); - stream.EncodingParameters.Add(pix_fmt); - + args.Logger?.ILog("Encoding Prores Encoder: " + encoder); args.Logger?.ILog("Encoding Prores Profile: " + profile); args.Logger?.ILog("Encoding Prores Quality: " + quality); - args.Logger?.ILog("Encoding Prores Pixel Format: " + pix_fmt); + if (string.IsNullOrWhiteSpace(PixelFormat) == false) + { + stream.EncodingParameters.Add("-pix_fmt"); + stream.EncodingParameters.Add(PixelFormat); + args.Logger?.ILog("Encoding Prores Pixel Format: " + PixelFormat); + } stream.ForcedChange = true; return 1;