diff --git a/FFMpegCore.Test/ArgumentBuilderTests.cs b/FFMpegCore.Test/ArgumentBuilderTests.cs index 97e32af..0ecb2c7 100644 --- a/FFMpegCore.Test/ArgumentBuilderTests.cs +++ b/FFMpegCore.Test/ArgumentBuilderTests.cs @@ -1,4 +1,4 @@ -using FFMpegCore.FFMPEG.Arguments; +using FFMpegCore.FFMPEG.Argument; using FFMpegCore.FFMPEG.Enums; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; @@ -24,7 +24,7 @@ public ArgumentBuilderTests() : base() private string GetArgumentsString(params Argument[] args) { - var container = new ArgumentsContainer(); + var container = new ArgumentContainer(); container.Add(new InputArgument("input.mp4")); foreach (var a in args) { @@ -70,7 +70,7 @@ public void Builder_BuildString_BitStream() [TestMethod] public void Builder_BuildString_Concat() { - var container = new ArgumentsContainer(); + var container = new ArgumentContainer(); container.Add(new ConcatArgument(concatFiles)); container.Add(new OutputArgument("output.mp4")); diff --git a/FFMpegCore.Test/VideoTest.cs b/FFMpegCore.Test/VideoTest.cs index 2cb17ee..c5895e8 100644 --- a/FFMpegCore.Test/VideoTest.cs +++ b/FFMpegCore.Test/VideoTest.cs @@ -1,6 +1,6 @@ using FFMpegCore.Enums; using FFMpegCore.FFMPEG; -using FFMpegCore.FFMPEG.Arguments; +using FFMpegCore.FFMPEG.Argument; using FFMpegCore.FFMPEG.Enums; using FFMpegCore.Tests.Resources; using Microsoft.VisualStudio.TestTools.UnitTesting; @@ -61,7 +61,7 @@ public bool Convert(VideoType type, bool multithreaded = false, VideoSize size = } } - public void Convert(VideoType type, ArgumentsContainer container) + public void Convert(VideoType type, ArgumentContainer container) { var output = Input.OutputLocation(type); @@ -69,7 +69,7 @@ public void Convert(VideoType type, ArgumentsContainer container) { var input = VideoInfo.FromFileInfo(Input); - var arguments = new ArgumentsContainer(); + var arguments = new ArgumentContainer(); arguments.Add(new InputArgument(input)); foreach (var arg in container) { @@ -122,7 +122,7 @@ public void Video_ToMP4() [TestMethod] public void Video_ToMP4_Args() { - var container = new ArgumentsContainer(); + var container = new ArgumentContainer(); container.Add(new VideoCodecArgument(VideoCodec.LibX264)); Convert(VideoType.Mp4, container); } @@ -136,7 +136,7 @@ public void Video_ToTS() [TestMethod] public void Video_ToTS_Args() { - var container = new ArgumentsContainer(); + var container = new ArgumentContainer(); container.Add(new CopyArgument()); container.Add(new BitStreamFilterArgument(Channel.Video, Filter.H264_Mp4ToAnnexB)); container.Add(new ForceFormatArgument(VideoCodec.MpegTs)); @@ -153,7 +153,7 @@ public void Video_ToOGV_Resize() [TestMethod] public void Video_ToOGV_Resize_Args() { - var container = new ArgumentsContainer(); + var container = new ArgumentContainer(); container.Add(new ScaleArgument(VideoSize.Ed)); container.Add(new VideoCodecArgument(VideoCodec.LibTheora)); Convert(VideoType.Ogv, container); @@ -168,7 +168,7 @@ public void Video_ToMP4_Resize() [TestMethod] public void Video_ToMP4_Resize_Args() { - var container = new ArgumentsContainer(); + var container = new ArgumentContainer(); container.Add(new ScaleArgument(VideoSize.Ld)); container.Add(new VideoCodecArgument(VideoCodec.LibX264)); Convert(VideoType.Mp4, container); diff --git a/FFMpegCore/Extend/BitmapExtensions.cs b/FFMpegCore/Extend/BitmapExtensions.cs index 050ada5..b784be6 100644 --- a/FFMpegCore/Extend/BitmapExtensions.cs +++ b/FFMpegCore/Extend/BitmapExtensions.cs @@ -18,10 +18,6 @@ public static VideoInfo AddAudio(this Bitmap poster, FileInfo audio, FileInfo ou { return new FFMpeg().PosterWithAudio(tempFile, audio, output); } - catch(Exception e) - { - throw; - } finally { tempFile.Delete(); diff --git a/FFMpegCore/FFMPEG/Arguments/Argument.cs b/FFMpegCore/FFMPEG/Argument/Argument.cs similarity index 98% rename from FFMpegCore/FFMPEG/Arguments/Argument.cs rename to FFMpegCore/FFMPEG/Argument/Argument.cs index 5340e7b..bad0d57 100644 --- a/FFMpegCore/FFMPEG/Arguments/Argument.cs +++ b/FFMpegCore/FFMPEG/Argument/Argument.cs @@ -4,7 +4,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Abstract class implements basic functionality of ffmpeg arguments diff --git a/FFMpegCore/FFMPEG/Arguments/ArgumentsContainer.cs b/FFMpegCore/FFMPEG/Argument/ArgumentContainer.cs similarity index 70% rename from FFMpegCore/FFMPEG/Arguments/ArgumentsContainer.cs rename to FFMpegCore/FFMPEG/Argument/ArgumentContainer.cs index b71cda4..7587101 100644 --- a/FFMpegCore/FFMPEG/Arguments/ArgumentsContainer.cs +++ b/FFMpegCore/FFMPEG/Argument/ArgumentContainer.cs @@ -5,29 +5,34 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Container of arguments represented parameters of FFMPEG process /// - public class ArgumentsContainer : IDictionary + public class ArgumentContainer : IDictionary { - Dictionary _args; + IDictionary _args; - public ArgumentsContainer() + public ArgumentContainer(params Argument[] arguments) { _args = new Dictionary(); + + foreach(var argument in arguments) + { + this.Add(argument); + } } - public Argument this[Type key] { get => ((IDictionary)_args)[key]; set => ((IDictionary)_args)[key] = value; } + public Argument this[Type key] { get => _args[key]; set => _args[key] = value; } - public ICollection Keys => ((IDictionary)_args).Keys; + public ICollection Keys => _args.Keys; - public ICollection Values => ((IDictionary)_args).Values; + public ICollection Values => _args.Values; - public int Count => ((IDictionary)_args).Count; + public int Count => _args.Count; - public bool IsReadOnly => ((IDictionary)_args).IsReadOnly; + public bool IsReadOnly => _args.IsReadOnly; /// /// This method is not supported, left for interface support @@ -48,7 +53,7 @@ public void Add(Type key, Argument value) [Obsolete] public void Add(KeyValuePair item) { - throw new InvalidOperationException("Not supported operation"); + this.Add(item.Value); } /// @@ -56,7 +61,7 @@ public void Add(KeyValuePair item) /// public void Clear() { - ((IDictionary)_args).Clear(); + _args.Clear(); } /// @@ -66,16 +71,19 @@ public void Clear() /// Returns if contains item public bool Contains(KeyValuePair item) { - return ((IDictionary)_args).Contains(item); + return _args.Contains(item); } /// /// Adds argument to collection /// /// Argument that should be added to collection - public void Add(Argument value) + public void Add(params Argument[] values) { - ((IDictionary)_args).Add(value.GetType(), value); + foreach(var value in values) + { + _args.Add(value.GetType(), value); + } } /// @@ -96,37 +104,37 @@ public bool ContainsInputOutput() /// public bool ContainsKey(Type key) { - return ((IDictionary)_args).ContainsKey(key); + return _args.ContainsKey(key); } public void CopyTo(KeyValuePair[] array, int arrayIndex) { - ((IDictionary)_args).CopyTo(array, arrayIndex); + _args.CopyTo(array, arrayIndex); } public IEnumerator> GetEnumerator() { - return ((IDictionary)_args).GetEnumerator(); + return _args.GetEnumerator(); } public bool Remove(Type key) { - return ((IDictionary)_args).Remove(key); + return _args.Remove(key); } public bool Remove(KeyValuePair item) { - return ((IDictionary)_args).Remove(item); + return _args.Remove(item); } public bool TryGetValue(Type key, out Argument value) { - return ((IDictionary)_args).TryGetValue(key, out value); + return _args.TryGetValue(key, out value); } IEnumerator IEnumerable.GetEnumerator() { - return ((IDictionary)_args).GetEnumerator(); + return _args.GetEnumerator(); } /// diff --git a/FFMpegCore/FFMPEG/Arguments/ArgumentsStringifier.cs b/FFMpegCore/FFMPEG/Argument/ArgumentStringifier.cs similarity index 98% rename from FFMpegCore/FFMPEG/Arguments/ArgumentsStringifier.cs rename to FFMpegCore/FFMPEG/Argument/ArgumentStringifier.cs index ca6d231..b8057df 100644 --- a/FFMpegCore/FFMPEG/Arguments/ArgumentsStringifier.cs +++ b/FFMpegCore/FFMPEG/Argument/ArgumentStringifier.cs @@ -4,9 +4,9 @@ using System.Drawing; using System.IO; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { - internal static class ArgumentsStringifier + internal static class ArgumentStringifier { internal static string Speed(Speed speed) { diff --git a/FFMpegCore/FFMPEG/Arguments/AudioCodecArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/AudioCodecArgument.cs similarity index 91% rename from FFMpegCore/FFMPEG/Arguments/AudioCodecArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/AudioCodecArgument.cs index 73e396f..a053f7d 100644 --- a/FFMpegCore/FFMPEG/Arguments/AudioCodecArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/AudioCodecArgument.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents parameter of audio codec and it's quality @@ -41,7 +41,7 @@ public AudioCodecArgument(AudioCodec value, int bitrate) : base(value) /// String representation of the argument public override string GetStringValue() { - return ArgumentsStringifier.Audio(Value, Bitrate); + return ArgumentStringifier.Audio(Value, Bitrate); } } } diff --git a/FFMpegCore/FFMPEG/Arguments/BitStreamFilterArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/BitStreamFilterArgument.cs similarity index 86% rename from FFMpegCore/FFMPEG/Arguments/BitStreamFilterArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/BitStreamFilterArgument.cs index a986fa8..d950903 100644 --- a/FFMpegCore/FFMPEG/Arguments/BitStreamFilterArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/BitStreamFilterArgument.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents parameter of bitstream filter @@ -26,7 +26,7 @@ public BitStreamFilterArgument(Channel first, Filter second) : base(first, secon /// String representation of the argument public override string GetStringValue() { - return ArgumentsStringifier.BitStreamFilter(First, Second); + return ArgumentStringifier.BitStreamFilter(First, Second); } } } diff --git a/FFMpegCore/FFMPEG/Arguments/ConcatArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/ConcatArgument.cs similarity index 91% rename from FFMpegCore/FFMPEG/Arguments/ConcatArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/ConcatArgument.cs index 76eea22..b37d6a1 100644 --- a/FFMpegCore/FFMPEG/Arguments/ConcatArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/ConcatArgument.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// @@ -34,7 +34,7 @@ public IEnumerator GetEnumerator() /// String representation of the argument public override string GetStringValue() { - return ArgumentsStringifier.InputConcat(Value); + return ArgumentStringifier.InputConcat(Value); } IEnumerator IEnumerable.GetEnumerator() diff --git a/FFMpegCore/FFMPEG/Arguments/CopyArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/CopyArgument.cs similarity index 89% rename from FFMpegCore/FFMPEG/Arguments/CopyArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/CopyArgument.cs index 2710b58..586e3f2 100644 --- a/FFMpegCore/FFMPEG/Arguments/CopyArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/CopyArgument.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents parameter of copy parameter @@ -28,7 +28,7 @@ public CopyArgument(Channel value = Channel.Both) : base(value) /// String representation of the argument public override string GetStringValue() { - return ArgumentsStringifier.Copy(Value); + return ArgumentStringifier.Copy(Value); } } } diff --git a/FFMpegCore/FFMPEG/Arguments/CpuSpeedArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/CpuSpeedArgument.cs similarity index 87% rename from FFMpegCore/FFMPEG/Arguments/CpuSpeedArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/CpuSpeedArgument.cs index 16a9dc5..c3e8f47 100644 --- a/FFMpegCore/FFMPEG/Arguments/CpuSpeedArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/CpuSpeedArgument.cs @@ -4,7 +4,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents cpu speed parameter @@ -25,7 +25,7 @@ public CpuSpeedArgument(int value) : base(value) /// String representation of the argument public override string GetStringValue() { - return ArgumentsStringifier.Speed(Value); + return ArgumentStringifier.Speed(Value); } } } diff --git a/FFMpegCore/FFMPEG/Arguments/DisableChannelArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/DisableChannelArgument.cs similarity index 85% rename from FFMpegCore/FFMPEG/Arguments/DisableChannelArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/DisableChannelArgument.cs index 3e5778a..258d1ad 100644 --- a/FFMpegCore/FFMPEG/Arguments/DisableChannelArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/DisableChannelArgument.cs @@ -1,6 +1,6 @@ using FFMpegCore.FFMPEG.Enums; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents cpu speed parameter @@ -21,7 +21,7 @@ public DisableChannelArgument(Channel value) : base(value) /// String representation of the argument public override string GetStringValue() { - return ArgumentsStringifier.Disable(Value); + return ArgumentStringifier.Disable(Value); } } } diff --git a/FFMpegCore/FFMPEG/Arguments/ForceFormatArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/ForceFormatArgument.cs similarity index 87% rename from FFMpegCore/FFMPEG/Arguments/ForceFormatArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/ForceFormatArgument.cs index 5debf8f..0180f59 100644 --- a/FFMpegCore/FFMPEG/Arguments/ForceFormatArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/ForceFormatArgument.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents force format parameter @@ -26,7 +26,7 @@ public ForceFormatArgument(VideoCodec value) : base(value) /// String representation of the argument public override string GetStringValue() { - return ArgumentsStringifier.ForceFormat(Value); + return ArgumentStringifier.ForceFormat(Value); } } } diff --git a/FFMpegCore/FFMPEG/Arguments/FrameOutputCountArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/FrameOutputCountArgument.cs similarity index 86% rename from FFMpegCore/FFMPEG/Arguments/FrameOutputCountArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/FrameOutputCountArgument.cs index fbc5205..b6c8a8d 100644 --- a/FFMpegCore/FFMPEG/Arguments/FrameOutputCountArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/FrameOutputCountArgument.cs @@ -4,7 +4,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents frame output count parameter @@ -25,7 +25,7 @@ public FrameOutputCountArgument(int value) : base(value) /// String representation of the argument public override string GetStringValue() { - return ArgumentsStringifier.FrameOutputCount(Value); + return ArgumentStringifier.FrameOutputCount(Value); } } } diff --git a/FFMpegCore/FFMPEG/Arguments/FrameRateArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/FrameRateArgument.cs similarity index 86% rename from FFMpegCore/FFMPEG/Arguments/FrameRateArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/FrameRateArgument.cs index ca8bd56..9966dfc 100644 --- a/FFMpegCore/FFMPEG/Arguments/FrameRateArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/FrameRateArgument.cs @@ -4,7 +4,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents frame rate parameter @@ -25,7 +25,7 @@ public FrameRateArgument(double value) : base(value) /// String representation of the argument public override string GetStringValue() { - return ArgumentsStringifier.FrameRate(Value); + return ArgumentStringifier.FrameRate(Value); } } } diff --git a/FFMpegCore/FFMPEG/Arguments/InputArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/InputArgument.cs similarity index 89% rename from FFMpegCore/FFMPEG/Arguments/InputArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/InputArgument.cs index 5a409df..841cbe3 100644 --- a/FFMpegCore/FFMPEG/Arguments/InputArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/InputArgument.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents input parameter @@ -38,7 +38,7 @@ public InputArgument(params Uri[] values) : base(values.Select(v => v.AbsolutePa /// String representation of the argument public override string GetStringValue() { - return string.Join(" ", Value.Select(v => ArgumentsStringifier.Input(v))); + return string.Join(" ", Value.Select(v => ArgumentStringifier.Input(v))); } } } diff --git a/FFMpegCore/FFMPEG/Arguments/LoopArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/LoopArgument.cs similarity index 87% rename from FFMpegCore/FFMPEG/Arguments/LoopArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/LoopArgument.cs index 1f1d968..f8a3f8a 100644 --- a/FFMpegCore/FFMPEG/Arguments/LoopArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/LoopArgument.cs @@ -4,7 +4,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents loop parameter @@ -25,7 +25,7 @@ public LoopArgument(int value) : base(value) /// String representation of the argument public override string GetStringValue() { - return ArgumentsStringifier.Loop(Value); + return ArgumentStringifier.Loop(Value); } } } diff --git a/FFMpegCore/FFMPEG/Arguments/OutputArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/OutputArgument.cs similarity index 91% rename from FFMpegCore/FFMPEG/Arguments/OutputArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/OutputArgument.cs index c3d4872..9d70148 100644 --- a/FFMpegCore/FFMPEG/Arguments/OutputArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/OutputArgument.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents output parameter @@ -38,7 +38,7 @@ public OutputArgument(Uri value) : base(value.AbsolutePath) /// String representation of the argument public override string GetStringValue() { - return ArgumentsStringifier.Output(Value); + return ArgumentStringifier.Output(Value); } public FileInfo GetAsFileInfo() diff --git a/FFMpegCore/FFMPEG/Arguments/OverrideArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/OverrideArgument.cs similarity index 94% rename from FFMpegCore/FFMPEG/Arguments/OverrideArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/OverrideArgument.cs index 9df279e..91f84e4 100644 --- a/FFMpegCore/FFMPEG/Arguments/OverrideArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/OverrideArgument.cs @@ -4,7 +4,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents override parameter diff --git a/FFMpegCore/FFMPEG/Arguments/ScaleArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/ScaleArgument.cs similarity index 91% rename from FFMpegCore/FFMPEG/Arguments/ScaleArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/ScaleArgument.cs index 17a88d9..50f59ca 100644 --- a/FFMpegCore/FFMPEG/Arguments/ScaleArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/ScaleArgument.cs @@ -6,7 +6,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents scale parameter @@ -36,7 +36,7 @@ public ScaleArgument(VideoSize videosize) /// String representation of the argument public override string GetStringValue() { - return ArgumentsStringifier.Scale(Value); + return ArgumentStringifier.Scale(Value); } } } diff --git a/FFMpegCore/FFMPEG/Arguments/SeekArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/SeekArgument.cs similarity index 87% rename from FFMpegCore/FFMPEG/Arguments/SeekArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/SeekArgument.cs index 3110e14..f6a8410 100644 --- a/FFMpegCore/FFMPEG/Arguments/SeekArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/SeekArgument.cs @@ -4,7 +4,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents seek parameter @@ -25,7 +25,7 @@ public SeekArgument(TimeSpan? value) : base(value) /// String representation of the argument public override string GetStringValue() { - return ArgumentsStringifier.Seek(Value); + return ArgumentStringifier.Seek(Value); } } } diff --git a/FFMpegCore/FFMPEG/Arguments/ShortestArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/ShortestArgument.cs similarity index 85% rename from FFMpegCore/FFMPEG/Arguments/ShortestArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/ShortestArgument.cs index cc04604..2a3e7e5 100644 --- a/FFMpegCore/FFMPEG/Arguments/ShortestArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/ShortestArgument.cs @@ -4,7 +4,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents shortest parameter @@ -25,7 +25,7 @@ public ShortestArgument(bool value) : base(value) /// String representation of the argument public override string GetStringValue() { - return ArgumentsStringifier.FinalizeAtShortestInput(Value); + return ArgumentStringifier.FinalizeAtShortestInput(Value); } } } diff --git a/FFMpegCore/FFMPEG/Arguments/SizeArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/SizeArgument.cs similarity index 90% rename from FFMpegCore/FFMPEG/Arguments/SizeArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/SizeArgument.cs index bbc3a4c..14f592e 100644 --- a/FFMpegCore/FFMPEG/Arguments/SizeArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/SizeArgument.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; using FFMpegCore.FFMPEG.Enums; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents size parameter @@ -35,7 +35,7 @@ public SizeArgument(int width, int heignt) : base(width, heignt) /// String representation of the argument public override string GetStringValue() { - return ArgumentsStringifier.Size(Value); + return ArgumentStringifier.Size(Value); } } } diff --git a/FFMpegCore/FFMPEG/Arguments/SpeedArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/SpeedArgument.cs similarity index 87% rename from FFMpegCore/FFMPEG/Arguments/SpeedArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/SpeedArgument.cs index 9801f8a..70690da 100644 --- a/FFMpegCore/FFMPEG/Arguments/SpeedArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/SpeedArgument.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents speed parameter @@ -26,7 +26,7 @@ public SpeedArgument(Speed value) : base(value) /// String representation of the argument public override string GetStringValue() { - return ArgumentsStringifier.Speed(Value); + return ArgumentStringifier.Speed(Value); } } } diff --git a/FFMpegCore/FFMPEG/Arguments/StartNumberArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/StartNumberArgument.cs similarity index 86% rename from FFMpegCore/FFMPEG/Arguments/StartNumberArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/StartNumberArgument.cs index 65c66ee..832117e 100644 --- a/FFMpegCore/FFMPEG/Arguments/StartNumberArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/StartNumberArgument.cs @@ -4,7 +4,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents start number parameter @@ -25,7 +25,7 @@ public StartNumberArgument(int value) : base(value) /// String representation of the argument public override string GetStringValue() { - return ArgumentsStringifier.StartNumber(Value); + return ArgumentStringifier.StartNumber(Value); } } } diff --git a/FFMpegCore/FFMPEG/Arguments/ThreadsArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/ThreadsArgument.cs similarity index 90% rename from FFMpegCore/FFMPEG/Arguments/ThreadsArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/ThreadsArgument.cs index 6bd3f6b..ecfad9b 100644 --- a/FFMpegCore/FFMPEG/Arguments/ThreadsArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/ThreadsArgument.cs @@ -4,7 +4,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents threads parameter @@ -33,7 +33,7 @@ public ThreadsArgument(bool isMultiThreaded) : /// String representation of the argument public override string GetStringValue() { - return ArgumentsStringifier.Threads(Value); + return ArgumentStringifier.Threads(Value); } } } diff --git a/FFMpegCore/FFMPEG/Arguments/VideoCodecArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/VideoCodecArgument.cs similarity index 89% rename from FFMpegCore/FFMPEG/Arguments/VideoCodecArgument.cs rename to FFMpegCore/FFMPEG/Argument/Atoms/VideoCodecArgument.cs index cb0217a..2357341 100644 --- a/FFMpegCore/FFMPEG/Arguments/VideoCodecArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/VideoCodecArgument.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// /// Represents video codec parameter @@ -33,7 +33,7 @@ public VideoCodecArgument(VideoCodec value, int bitrate) : base(value) /// String representation of the argument public override string GetStringValue() { - return ArgumentsStringifier.Video(Value, Bitrate); + return ArgumentStringifier.Video(Value, Bitrate); } } } diff --git a/FFMpegCore/FFMPEG/Arguments/FFArgumentBuilder.cs b/FFMpegCore/FFMPEG/Argument/FFArgumentBuilder.cs similarity index 53% rename from FFMpegCore/FFMPEG/Arguments/FFArgumentBuilder.cs rename to FFMpegCore/FFMPEG/Argument/FFArgumentBuilder.cs index 8e460d2..693021f 100644 --- a/FFMpegCore/FFMPEG/Arguments/FFArgumentBuilder.cs +++ b/FFMpegCore/FFMPEG/Argument/FFArgumentBuilder.cs @@ -1,41 +1,31 @@ using FFMpegCore.Enums; using FFMpegCore.Helpers; using System; -using System.Collections.Generic; using System.IO; using System.Linq; -using System.Text; -using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { /// - /// Builds parameters string from that would be passed to ffmpeg process + /// Builds parameters string from that would be passed to ffmpeg process /// public class FFArgumentBuilder : IArgumentBuilder { /// - /// Builds parameters string from that would be passed to ffmpeg process + /// Builds parameters string from that would be passed to ffmpeg process /// /// Container of arguments /// Parameters string - public string BuildArguments(ArgumentsContainer container) + public string BuildArguments(ArgumentContainer container) { if (!container.ContainsInputOutput()) throw new ArgumentException("No input or output parameter found", nameof(container)); - - CheckContainerException(container); - + return string.Join(" ", container.Select(argument => argument.Value.GetStringValue().Trim())); } - private void CheckContainerException(ArgumentsContainer container) - { - // TODO: implement arguments check - } - - private void CheckExtensionOfOutputExtension(ArgumentsContainer container, FileInfo output) + private void CheckExtensionOfOutputExtension(ArgumentContainer container, FileInfo output) { if(container.ContainsKey(typeof(VideoCodecArgument))) { @@ -44,7 +34,7 @@ private void CheckExtensionOfOutputExtension(ArgumentsContainer container, FileI } } - private Argument GetInput(ArgumentsContainer container) + private Argument GetInput(ArgumentContainer container) { if (container.ContainsKey(typeof(InputArgument))) return container[typeof(InputArgument)]; @@ -53,15 +43,5 @@ private Argument GetInput(ArgumentsContainer container) else throw new ArgumentException("No inputs found"); } - - private bool IsInputOrOutput(Argument arg) - { - return IsInputOrOutput(arg.GetType()); - } - - private bool IsInputOrOutput(Type arg) - { - return (arg == typeof(InputArgument)) || (arg == typeof(ConcatArgument)) || (arg == typeof(OutputArgument)) || (arg == typeof(OverrideArgument)); - } } } diff --git a/FFMpegCore/FFMPEG/Arguments/IArgumentBuilder.cs b/FFMpegCore/FFMPEG/Argument/IArgumentBuilder.cs similarity index 69% rename from FFMpegCore/FFMPEG/Arguments/IArgumentBuilder.cs rename to FFMpegCore/FFMPEG/Argument/IArgumentBuilder.cs index 8bdb681..1398c31 100644 --- a/FFMpegCore/FFMPEG/Arguments/IArgumentBuilder.cs +++ b/FFMpegCore/FFMPEG/Argument/IArgumentBuilder.cs @@ -6,10 +6,10 @@ using System.Text; using System.Threading.Tasks; -namespace FFMpegCore.FFMPEG.Arguments +namespace FFMpegCore.FFMPEG.Argument { public interface IArgumentBuilder { - string BuildArguments(ArgumentsContainer container); + string BuildArguments(ArgumentContainer container); } } diff --git a/FFMpegCore/FFMPEG/FFMpeg.cs b/FFMpegCore/FFMPEG/FFMpeg.cs index 9d564b8..c1d453c 100644 --- a/FFMpegCore/FFMPEG/FFMpeg.cs +++ b/FFMpegCore/FFMPEG/FFMpeg.cs @@ -1,5 +1,5 @@ using FFMpegCore.Enums; -using FFMpegCore.FFMPEG.Arguments; +using FFMpegCore.FFMPEG.Argument; using FFMpegCore.FFMPEG.Enums; using FFMpegCore.FFMPEG.Exceptions; using FFMpegCore.Helpers; @@ -20,7 +20,7 @@ namespace FFMpegCore.FFMPEG public class FFMpeg : FFBase { - IArgumentBuilder argumentBuilder { get; set; } + IArgumentBuilder ArgumentBuilder { get; set; } /// /// Intializes the FFMPEG encoder. @@ -28,13 +28,13 @@ public class FFMpeg : FFBase public FFMpeg() { _Init(); - argumentBuilder = new FFArgumentBuilder(); + ArgumentBuilder = new FFArgumentBuilder(); } public FFMpeg(IArgumentBuilder builder) { _Init(); - argumentBuilder = builder; + ArgumentBuilder = builder; } private void _Init() @@ -91,13 +91,14 @@ public Bitmap Snapshot(VideoInfo source, FileInfo output, Size? size = null, Tim } FFMpegHelper.ConversionExceptionCheck(source.ToFileInfo(), output); - var container = new ArgumentsContainer(); - container.Add(new InputArgument(source)); - container.Add(new VideoCodecArgument(VideoCodec.Png)); - container.Add(new FrameOutputCountArgument(1)); - container.Add(new SeekArgument(captureTime)); - container.Add(new SizeArgument(size)); - container.Add(new OutputArgument(output)); + var container = new ArgumentContainer( + new InputArgument(source), + new VideoCodecArgument(VideoCodec.Png), + new FrameOutputCountArgument(1), + new SeekArgument(captureTime), + new SizeArgument(size), + new OutputArgument(output) + ); if (!RunProcess(container, output)) { @@ -163,34 +164,40 @@ public VideoInfo Convert( outputSize.Width += 1; } - var container = new ArgumentsContainer(); + var container = new ArgumentContainer(); switch (type) { case VideoType.Mp4: - container.Add(new InputArgument(source)); - container.Add(new ThreadsArgument(multithreaded)); - container.Add(new ScaleArgument(outputSize)); - container.Add(new VideoCodecArgument(VideoCodec.LibX264, 2400)); - container.Add(new SpeedArgument(speed)); - container.Add(new AudioCodecArgument(AudioCodec.Aac, audioQuality)); - container.Add(new OutputArgument(output)); + container.Add( + new InputArgument(source), + new ThreadsArgument(multithreaded), + new ScaleArgument(outputSize), + new VideoCodecArgument(VideoCodec.LibX264, 2400), + new SpeedArgument(speed), + new AudioCodecArgument(AudioCodec.Aac, audioQuality), + new OutputArgument(output) + ); break; case VideoType.Ogv: - container.Add(new InputArgument(source)); - container.Add(new ThreadsArgument(multithreaded)); - container.Add(new ScaleArgument(outputSize)); - container.Add(new VideoCodecArgument(VideoCodec.LibTheora, 2400)); - container.Add(new SpeedArgument(speed)); - container.Add(new AudioCodecArgument(AudioCodec.LibVorbis, audioQuality)); - container.Add(new OutputArgument(output)); + container.Add( + new InputArgument(source), + new ThreadsArgument(multithreaded), + new ScaleArgument(outputSize), + new VideoCodecArgument(VideoCodec.LibTheora, 2400), + new SpeedArgument(speed), + new AudioCodecArgument(AudioCodec.LibVorbis, audioQuality), + new OutputArgument(output) + ); break; case VideoType.Ts: - container.Add(new InputArgument(source)); - container.Add(new CopyArgument()); - container.Add(new BitStreamFilterArgument(Channel.Video, Filter.H264_Mp4ToAnnexB)); - container.Add(new ForceFormatArgument(VideoCodec.MpegTs)); - container.Add(new OutputArgument(output)); + container.Add( + new InputArgument(source), + new CopyArgument(), + new BitStreamFilterArgument(Channel.Video, Filter.H264_Mp4ToAnnexB), + new ForceFormatArgument(VideoCodec.MpegTs), + new OutputArgument(output) + ); break; } @@ -215,13 +222,14 @@ public VideoInfo PosterWithAudio(FileInfo image, FileInfo audio, FileInfo output FFMpegHelper.ExtensionExceptionCheck(output, FileExtension.Mp4); FFMpegHelper.ConversionSizeExceptionCheck(Image.FromFile(image.FullName)); - var container = new ArgumentsContainer(); - container.Add(new LoopArgument(1)); - container.Add(new InputArgument(image.FullName, audio.FullName)); - container.Add(new VideoCodecArgument(VideoCodec.LibX264, 2400)); - container.Add(new AudioCodecArgument(AudioCodec.Aac, AudioQuality.Normal)); - container.Add(new ShortestArgument(true)); - container.Add(new OutputArgument(output)); + var container = new ArgumentContainer( + new LoopArgument(1), + new InputArgument(image.FullName, audio.FullName), + new VideoCodecArgument(VideoCodec.LibX264, 2400), + new AudioCodecArgument(AudioCodec.Aac, AudioQuality.Normal), + new ShortestArgument(true), + new OutputArgument(output) + ); if (!RunProcess(container, output)) { @@ -254,11 +262,12 @@ public VideoInfo Join(FileInfo output, params VideoInfo[] videos) return destinationPath; }).ToList(); - var container = new ArgumentsContainer(); - container.Add(new ConcatArgument(temporaryVideoParts)); - container.Add(new CopyArgument()); - container.Add(new BitStreamFilterArgument(Channel.Audio, Filter.Aac_AdtstoAsc)); - container.Add(new OutputArgument(output)); + var container = new ArgumentContainer( + new ConcatArgument(temporaryVideoParts), + new CopyArgument(), + new BitStreamFilterArgument(Channel.Audio, Filter.Aac_AdtstoAsc), + new OutputArgument(output) + ); try { @@ -295,14 +304,15 @@ public VideoInfo JoinImageSequence(FileInfo output, double frameRate = 30, param var firstImage = images.First(); - var container = new ArgumentsContainer(); - container.Add(new FrameRateArgument(frameRate)); - container.Add(new SizeArgument(firstImage.Width, firstImage.Height)); - container.Add(new StartNumberArgument(0)); - container.Add(new InputArgument($"{firstImage.Directory}\\%09d.png")); - container.Add(new FrameOutputCountArgument(images.Length)); - container.Add(new VideoCodecArgument(VideoCodec.LibX264)); - container.Add(new OutputArgument(output)); + var container = new ArgumentContainer( + new FrameRateArgument(frameRate), + new SizeArgument(firstImage.Width, firstImage.Height), + new StartNumberArgument(0), + new InputArgument($"{firstImage.Directory}\\%09d.png"), + new FrameOutputCountArgument(images.Length), + new VideoCodecArgument(VideoCodec.LibX264), + new OutputArgument(output) + ); try { @@ -331,10 +341,11 @@ public VideoInfo SaveM3U8Stream(Uri uri, FileInfo output) if (uri.Scheme == "http" || uri.Scheme == "https") { - var container = new ArgumentsContainer(); - container.Add(new InputArgument(uri)); - container.Add(new OutputArgument(output)); - + var container = new ArgumentContainer( + new InputArgument(uri), + new OutputArgument(output) + ); + if (!RunProcess(container, output)) { throw new FFMpegException(FFMpegExceptionType.Operation, $"Saving the ${uri.AbsoluteUri} stream failed."); @@ -357,11 +368,12 @@ public VideoInfo Mute(VideoInfo source, FileInfo output) FFMpegHelper.ConversionSizeExceptionCheck(source); FFMpegHelper.ExtensionExceptionCheck(output, source.Extension); - var container = new ArgumentsContainer(); - container.Add(new InputArgument(source)); - container.Add(new CopyArgument()); - container.Add(new DisableChannelArgument(Channel.Audio)); - container.Add(new OutputArgument(output)); + var container = new ArgumentContainer( + new InputArgument(source), + new CopyArgument(), + new DisableChannelArgument(Channel.Audio), + new OutputArgument(output) + ); if (!RunProcess(container, output)) { @@ -382,10 +394,11 @@ public FileInfo ExtractAudio(VideoInfo source, FileInfo output) FFMpegHelper.ConversionExceptionCheck(source.ToFileInfo(), output); FFMpegHelper.ExtensionExceptionCheck(output, FileExtension.Mp3); - var container = new ArgumentsContainer(); - container.Add(new InputArgument(source)); - container.Add(new DisableChannelArgument(Channel.Video)); - container.Add(new OutputArgument(output)); + var container = new ArgumentContainer( + new InputArgument(source), + new DisableChannelArgument(Channel.Video), + new OutputArgument(output) + ); if (!RunProcess(container, output)) { @@ -412,13 +425,13 @@ public VideoInfo ReplaceAudio(VideoInfo source, FileInfo audio, FileInfo output, FFMpegHelper.ConversionSizeExceptionCheck(source); FFMpegHelper.ExtensionExceptionCheck(output, source.Extension); - var container = new ArgumentsContainer(); - container.Add(new InputArgument(source.FullName, audio.FullName)); - //container.Add(new InputArgument(audio)); - container.Add(new CopyArgument()); - container.Add(new AudioCodecArgument(AudioCodec.Aac, AudioQuality.Hd)); - container.Add(new ShortestArgument(stopAtShortest)); - container.Add(new OutputArgument(output)); + var container = new ArgumentContainer( + new InputArgument(source.FullName, audio.FullName), + new CopyArgument(), + new AudioCodecArgument(AudioCodec.Aac, AudioQuality.Hd), + new ShortestArgument(stopAtShortest), + new OutputArgument(output) + ); if (!RunProcess(container, output)) { @@ -428,9 +441,9 @@ public VideoInfo ReplaceAudio(VideoInfo source, FileInfo audio, FileInfo output, return new VideoInfo(output); } - public VideoInfo Convert(ArgumentsContainer arguments) + public VideoInfo Convert(ArgumentContainer arguments) { - var args = argumentBuilder.BuildArguments(arguments); + var args = ArgumentBuilder.BuildArguments(arguments); var output = ((OutputArgument)arguments[typeof(OutputArgument)]).GetAsFileInfo(); if (!RunProcess(arguments, output)) @@ -459,11 +472,11 @@ public void Stop() private volatile StringBuilder _errorOutput = new StringBuilder(); - private bool RunProcess(ArgumentsContainer container, FileInfo output) + private bool RunProcess(ArgumentContainer container, FileInfo output) { var successState = true; - CreateProcess(this.argumentBuilder.BuildArguments(container), _ffmpegPath, true, rStandardError: true); + CreateProcess(this.ArgumentBuilder.BuildArguments(container), _ffmpegPath, true, rStandardError: true); try { diff --git a/FFMpegCore/FFMPEG/ProbeInfo.cs b/FFMpegCore/FFMPEG/ProbeInfo.cs new file mode 100644 index 0000000..e69de29