diff --git a/FFMpegCore.Test/ArgumentBuilderTest.cs b/FFMpegCore.Test/ArgumentBuilderTest.cs index cf3ef89b..ec9feb9b 100644 --- a/FFMpegCore.Test/ArgumentBuilderTest.cs +++ b/FFMpegCore.Test/ArgumentBuilderTest.cs @@ -822,6 +822,13 @@ public void OutputPipe_MaxLength_ShorterThanMacOSMax() Assert.IsLessThan(_macOsMaxPipePathLength, pipePath.Length); } + [TestMethod] + public void Builder_BuildString_Null_Output() + { + var str = FFMpegArguments.FromFileInput("input.mp4").OutputToNull(opt => opt.WithCustomArgument("-filter_complex ebur128")).Arguments; + Assert.AreEqual("-i \"input.mp4\" -filter_complex ebur128 -f null -", str); + } + [TestMethod] public void Builder_BuildString_LowPassFilterDefault() { diff --git a/FFMpegCore/FFMpeg/Arguments/OutputNullArgument.cs b/FFMpegCore/FFMpeg/Arguments/OutputNullArgument.cs new file mode 100644 index 00000000..fa5725f7 --- /dev/null +++ b/FFMpegCore/FFMpeg/Arguments/OutputNullArgument.cs @@ -0,0 +1,16 @@ +namespace FFMpegCore.Arguments; + +public class OutputNullArgument : IOutputArgument +{ + public string Text => "-f null -"; + + public Task During(CancellationToken cancellationToken = default) => Task.CompletedTask; + + public void Post() + { + } + + public void Pre() + { + } +} diff --git a/FFMpegCore/FFMpeg/FFMpegArguments.cs b/FFMpegCore/FFMpeg/FFMpegArguments.cs index 927442d3..e6b734ea 100644 --- a/FFMpegCore/FFMpeg/FFMpegArguments.cs +++ b/FFMpegCore/FFMpeg/FFMpegArguments.cs @@ -156,7 +156,7 @@ public FFMpegArgumentProcessor OutputToPipe(IPipeSink reader, Action? addArguments) { var args = new FFMpegArgumentOptions(); @@ -180,6 +180,11 @@ public FFMpegArgumentProcessor MultiOutput(Action addO Arguments.AddRange(args.Arguments); return new FFMpegArgumentProcessor(this); } + + public FFMpegArgumentProcessor OutputToNull(Action? addArguments = null) + { + return ToProcessor(new OutputNullArgument(), addArguments); + } internal void Pre() {