From 4c4a36f01351dc63345be6eaabf3aedac7a2b4e1 Mon Sep 17 00:00:00 2001 From: John Andrews Date: Tue, 19 Apr 2022 10:24:26 +1200 Subject: [PATCH] added Video 10bit node --- .../Models/FfmpegVideoStream.cs | 18 ++++++++++++++-- .../Video/FfmpegBuilderVideo10Bit.cs | 21 +++++++++++++++++++ VideoNodes/VideoNodes.en.json | 7 +++++++ 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderVideo10Bit.cs diff --git a/VideoNodes/FfmpegBuilderNodes/Models/FfmpegVideoStream.cs b/VideoNodes/FfmpegBuilderNodes/Models/FfmpegVideoStream.cs index daa089dc..277e21d2 100644 --- a/VideoNodes/FfmpegBuilderNodes/Models/FfmpegVideoStream.cs +++ b/VideoNodes/FfmpegBuilderNodes/Models/FfmpegVideoStream.cs @@ -13,6 +13,20 @@ _Filter = value ?? new List(); } } + private List _OptionalFilter = new List(); + + /// + /// Gets or sets filters that will process but only if processing is needed, these won't trigger a has changed + /// value of the video file by themselves + /// + public List OptionalFilter + { + get => _OptionalFilter; + set + { + _OptionalFilter = value ?? new List(); + } + } private List _EncodingParameters = new List(); public List EncodingParameters @@ -50,10 +64,10 @@ //results.Add("copy"); } - if (Filter.Any()) + if (Filter.Any() || OptionalFilter.Any()) { results.Add("-filter:v:" + outputIndex); - results.Add(String.Join(", ", Filter)); + results.Add(String.Join(", ", Filter.Concat(OptionalFilter)).Replace("{index}", outputIndex.ToString())); } } diff --git a/VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderVideo10Bit.cs b/VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderVideo10Bit.cs new file mode 100644 index 00000000..a61c676c --- /dev/null +++ b/VideoNodes/FfmpegBuilderNodes/Video/FfmpegBuilderVideo10Bit.cs @@ -0,0 +1,21 @@ +namespace FileFlows.VideoNodes.FfmpegBuilderNodes +{ + public class FfmpegBuilderVideo10Bit : FfmpegBuilderNode + { + public override int Outputs => 1; + public override int Execute(NodeParameters args) + { + base.Init(args); + + var videoInfo = GetVideoInfo(args); + if (videoInfo == null || videoInfo.VideoStreams?.Any() != true) + return -1; + + var stream = Model?.VideoStreams?.Where(x => x.Deleted == false)?.FirstOrDefault(); + if (stream != null) + stream.OptionalFilter.AddRange(new[] { "-pix_fmt:{index}", "yuv420p10le" }); + + return 1; + } + } +} diff --git a/VideoNodes/VideoNodes.en.json b/VideoNodes/VideoNodes.en.json index b8c64a50..901e82d7 100644 --- a/VideoNodes/VideoNodes.en.json +++ b/VideoNodes/VideoNodes.en.json @@ -362,6 +362,13 @@ "Resolution": "Resolution" } }, + "FfmpegBuilderVideo10Bit": { + "Label": "FFMPEG Builder: Video 10 Bit", + "Description": "Sets FFMPEG Builder to encode the video streams in 10 Bit", + "Outputs": { + "1": "FFMPEG Builder video streams set to encode in 10 Bit" + } + }, "FfmpegBuilderVideoCodec": { "Label": "FFMPEG Builder: Video Codec", "Description": "Sets FFMPEG Builder to encode the video streams in the specified codec",