From 7d77c336099d5c85f146110090377b49b2247912 Mon Sep 17 00:00:00 2001 From: Malte Rosenbjerg Date: Thu, 27 Feb 2020 20:16:17 +0100 Subject: [PATCH] Remove ArgumentStringifier + cleanup No reason to split the responsibility Former-commit-id: 0e2c788796c8a11261fa8a9fffd8dc85db7b31a7 --- FFMpegCore/FFMPEG/Argument/Argument.cs | 27 +-- .../FFMPEG/Argument/ArgumentStringifier.cs | 179 ------------------ .../Argument/Atoms/AudioCodecArgument.cs | 22 +-- .../Argument/Atoms/BitStreamFilterArgument.cs | 23 ++- .../FFMPEG/Argument/Atoms/ConcatArgument.cs | 16 +- .../Atoms/ConstantRateFactorArgument.cs | 3 +- .../FFMPEG/Argument/Atoms/CopyArgument.cs | 22 +-- .../FFMPEG/Argument/Atoms/CpuSpeedArgument.cs | 15 +- .../Argument/Atoms/DisableChannelArgument.cs | 20 +- .../FFMPEG/Argument/Atoms/DrawTextArgument.cs | 7 +- .../FFMPEG/Argument/Atoms/DurationArgument.cs | 15 +- .../Argument/Atoms/FaststartArgument.cs | 7 +- .../Argument/Atoms/ForceFormatArgument.cs | 15 +- .../Atoms/FrameOutputCountArgument.cs | 15 +- .../Argument/Atoms/FrameRateArgument.cs | 15 +- .../FFMPEG/Argument/Atoms/InputArgument.cs | 27 +-- .../FFMPEG/Argument/Atoms/LoopArgument.cs | 15 +- .../FFMPEG/Argument/Atoms/OutputArgument.cs | 27 +-- .../FFMPEG/Argument/Atoms/OverrideArgument.cs | 9 +- .../Argument/Atoms/RemoveMetadataArgument.cs | 7 +- .../FFMPEG/Argument/Atoms/ScaleArgument.cs | 19 +- .../FFMPEG/Argument/Atoms/SeekArgument.cs | 15 +- .../FFMPEG/Argument/Atoms/ShortestArgument.cs | 15 +- .../FFMPEG/Argument/Atoms/SizeArgument.cs | 23 +-- .../FFMPEG/Argument/Atoms/SpeedArgument.cs | 11 +- .../Argument/Atoms/StartNumberArgument.cs | 15 +- .../FFMPEG/Argument/Atoms/ThreadsArgument.cs | 19 +- .../Argument/Atoms/VariableBitRateArgument.cs | 3 +- .../Argument/Atoms/VideoCodecArgument.cs | 22 +-- .../FFMPEG/Argument/FFArgumentBuilder.cs | 22 +-- FFMpegCore/FFMPEG/Enums/VideoSize.cs | 4 +- FFMpegCore/ImageInfo.cs | 4 +- FFMpegCore/VideoInfo.cs | 4 +- 33 files changed, 142 insertions(+), 520 deletions(-) delete mode 100644 FFMpegCore/FFMPEG/Argument/ArgumentStringifier.cs diff --git a/FFMpegCore/FFMPEG/Argument/Argument.cs b/FFMpegCore/FFMPEG/Argument/Argument.cs index f911ea3..e187afe 100644 --- a/FFMpegCore/FFMPEG/Argument/Argument.cs +++ b/FFMpegCore/FFMPEG/Argument/Argument.cs @@ -22,12 +22,10 @@ public override string ToString() /// public abstract class Argument : Argument { - private T _value; - /// /// Value type of /// - public T Value { get => _value; set { CheckValue(value); _value = value; } } + public T Value { get; protected set; } public Argument() { } @@ -35,11 +33,6 @@ public Argument(T value) { Value = value; } - - protected virtual void CheckValue(T value) - { - - } } /// @@ -47,19 +40,15 @@ protected virtual void CheckValue(T value) /// public abstract class Argument : Argument { - - private T1 _first; - private T2 _second; - /// /// First value type of /// - public T1 First { get => _first; set { CheckFirst(_first); _first = value; } } + public T1 First { get; set; } /// /// Second value type of /// - public T2 Second { get => _second; set { CheckSecond(_second); _second = value; } } + public T2 Second { get; set; } public Argument() { } @@ -68,15 +57,5 @@ public Argument(T1 first, T2 second) First = first; Second = second; } - - protected virtual void CheckFirst(T1 value) - { - - } - - protected virtual void CheckSecond(T2 value) - { - - } } } diff --git a/FFMpegCore/FFMPEG/Argument/ArgumentStringifier.cs b/FFMpegCore/FFMPEG/Argument/ArgumentStringifier.cs deleted file mode 100644 index ee11c03..0000000 --- a/FFMpegCore/FFMPEG/Argument/ArgumentStringifier.cs +++ /dev/null @@ -1,179 +0,0 @@ -using FFMpegCore.FFMPEG.Enums; -using System; -using System.Collections.Generic; -using System.Drawing; - -namespace FFMpegCore.FFMPEG.Argument -{ - internal static class ArgumentStringifier - { - internal static string Speed(Speed speed) - { - return $"-preset {speed.ToString().ToLower()} "; - } - - internal static string Speed(int cpu) - { - return $"-quality good -cpu-used {cpu} -deadline realtime "; - } - - internal static string Audio(AudioCodec codec, int bitrate) - { - return Audio(codec) + Audio(bitrate); - } - - internal static string Audio(AudioCodec codec) - { - return $"-c:a {codec.ToString().ToLower()} "; - } - - internal static string Audio(AudioQuality bitrate) - { - return Audio((int)bitrate); - } - - internal static string Audio(int bitrate) - { - return $"-b:a {bitrate}k "; - } - - internal static string Video(VideoCodec codec, int bitrate = 0) - { - var video = $"-c:v {codec.ToString().ToLower()} -pix_fmt yuv420p "; - - if (bitrate > 0) - { - video += $"-b:v {bitrate}k "; - } - - return video; - } - - internal static string Threads(bool multiThread) - { - var threadCount = multiThread - ? Environment.ProcessorCount - : 1; - - return Threads(threadCount); - } - - internal static string Threads(int threads) - { - return $"-threads {threads} "; - } - - internal static string Disable(Channel type) - { - switch (type) - { - case Channel.Video: - return "-vn "; - case Channel.Audio: - return "-an "; - default: - return string.Empty; - } - } - - internal static string Output(string output) - { - return $"\"{output}\""; - } - - internal static string Input(string template) - { - return $"-i \"{template}\" "; - } - - internal static string Scale(VideoSize size, int width =-1) - { - return size == VideoSize.Original ? string.Empty : Scale(width, (int)size); - } - - internal static string Scale(int width, int height) - { - return $"-vf scale={width}:{height} "; - } - - internal static string Size(Size? size) - { - if (!size.HasValue) return string.Empty; - - var formatedSize = $"{size.Value.Width}x{size.Value.Height}"; - - return $"-s {formatedSize} "; - } - - internal static string ForceFormat(VideoCodec codec) - { - return $"-f {codec.ToString().ToLower()} "; - } - - internal static string BitStreamFilter(Channel type, Filter filter) - { - switch (type) - { - case Channel.Audio: - return $"-bsf:a {filter.ToString().ToLower()} "; - case Channel.Video: - return $"-bsf:v {filter.ToString().ToLower()} "; - default: - return string.Empty; - } - } - - internal static string Copy(Channel type = Channel.Both) - { - switch (type) - { - case Channel.Audio: - return "-c:a copy "; - case Channel.Video: - return "-c:v copy "; - default: - return "-c copy "; - } - } - - internal static string Seek(TimeSpan? seek) - { - return !seek.HasValue ? string.Empty : $"-ss {seek} "; - } - - internal static string FrameOutputCount(int number) - { - return $"-vframes {number} "; - } - - internal static string Loop(int count) - { - return $"-loop {count} "; - } - - internal static string FinalizeAtShortestInput(bool applicable) - { - return applicable ? "-shortest " : string.Empty; - } - - internal static string InputConcat(IEnumerable paths) - { - return $"-i \"concat:{string.Join(@"|", paths)}\" "; - } - - internal static string FrameRate(double frameRate) - { - return $"-r {frameRate} "; - } - - internal static string StartNumber(int v) - { - return $"-start_number {v} "; - } - - internal static string Duration(TimeSpan? duration) - { - return !duration.HasValue ? string.Empty : $"-t {duration} "; - } - } -} \ No newline at end of file diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/AudioCodecArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/AudioCodecArgument.cs index 66195f9..7cdb6c5 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/AudioCodecArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/AudioCodecArgument.cs @@ -10,33 +10,23 @@ public class AudioCodecArgument : Argument /// /// Bitrate of audio channel /// - public int Bitrate { get; protected set; } = (int)AudioQuality.Normal; + public int Bitrate { get; } = (int)AudioQuality.Normal; - public AudioCodecArgument() - { - } + public AudioCodecArgument() { } - public AudioCodecArgument(AudioCodec value) : base(value) - { - } + public AudioCodecArgument(AudioCodec value) : base(value) { } - public AudioCodecArgument(AudioCodec value, AudioQuality bitrate) : base(value) - { - Bitrate = (int)bitrate; - } + public AudioCodecArgument(AudioCodec value, AudioQuality bitrate) : this(value, (int) bitrate) { } public AudioCodecArgument(AudioCodec value, int bitrate) : base(value) { Bitrate = bitrate; } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.Audio(Value, Bitrate); + return $"-c:a {Value.ToString().ToLower()} -b:a {Bitrate}k"; } } } diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/BitStreamFilterArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/BitStreamFilterArgument.cs index 553072b..4e321ea 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/BitStreamFilterArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/BitStreamFilterArgument.cs @@ -1,4 +1,5 @@ -using FFMpegCore.FFMPEG.Enums; +using System; +using FFMpegCore.FFMPEG.Enums; namespace FFMpegCore.FFMPEG.Argument { @@ -7,21 +8,19 @@ namespace FFMpegCore.FFMPEG.Argument /// public class BitStreamFilterArgument : Argument { - public BitStreamFilterArgument() - { - } + public BitStreamFilterArgument() { } - public BitStreamFilterArgument(Channel first, Filter second) : base(first, second) - { - } + public BitStreamFilterArgument(Channel first, Filter second) : base(first, second) { } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.BitStreamFilter(First, Second); + return First switch + { + Channel.Audio => $"-bsf:a {Second.ToString().ToLower()}", + Channel.Video => $"-bsf:v {Second.ToString().ToLower()}", + _ => string.Empty + }; } } } diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/ConcatArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/ConcatArgument.cs index cbdbb51..9e98cb6 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/ConcatArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/ConcatArgument.cs @@ -10,27 +10,19 @@ namespace FFMpegCore.FFMPEG.Argument /// public class ConcatArgument : Argument>, IEnumerable { - public ConcatArgument() - { - Value = new List(); - } + public ConcatArgument() : base(new List()) { } - public ConcatArgument(IEnumerable value) : base(value) - { - } + public ConcatArgument(IEnumerable value) : base(value) { } public IEnumerator GetEnumerator() { return Value.GetEnumerator(); } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.InputConcat(Value); + return $"-i \"concat:{string.Join(@"|", Value)}\""; } IEnumerator IEnumerable.GetEnumerator() diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/ConstantRateFactorArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/ConstantRateFactorArgument.cs index d948030..f6a8f99 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/ConstantRateFactorArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/ConstantRateFactorArgument.cs @@ -15,9 +15,10 @@ public ConstantRateFactorArgument(int crf) : base(crf) } } + /// public override string GetStringValue() { - return $"-crf {Value} "; + return $"-crf {Value}"; } } } \ No newline at end of file diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/CopyArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/CopyArgument.cs index cd94e69..41a0c30 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/CopyArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/CopyArgument.cs @@ -8,22 +8,18 @@ namespace FFMpegCore.FFMPEG.Argument /// public class CopyArgument : Argument { - public CopyArgument() - { - Value = Channel.Both; - } + public CopyArgument() : base(Channel.Both) { } + public CopyArgument(Channel value = Channel.Both) : base(value) { } - public CopyArgument(Channel value = Channel.Both) : base(value) - { - } - - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.Copy(Value); + return Value switch + { + Channel.Audio => "-c:a copy", + Channel.Video => "-c:v copy", + Channel.Both => "-c copy" + }; } } } diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/CpuSpeedArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/CpuSpeedArgument.cs index 53c4014..576bab2 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/CpuSpeedArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/CpuSpeedArgument.cs @@ -5,21 +5,14 @@ /// public class CpuSpeedArgument : Argument { - public CpuSpeedArgument() - { - } + public CpuSpeedArgument() { } - public CpuSpeedArgument(int value) : base(value) - { - } + public CpuSpeedArgument(int value) : base(value) { } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.Speed(Value); + return $"-quality good -cpu-used {Value} -deadline realtime"; } } } diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/DisableChannelArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/DisableChannelArgument.cs index 258d1ad..7aaa730 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/DisableChannelArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/DisableChannelArgument.cs @@ -7,21 +7,19 @@ namespace FFMpegCore.FFMPEG.Argument /// public class DisableChannelArgument : Argument { - public DisableChannelArgument() - { - } + public DisableChannelArgument() { } - public DisableChannelArgument(Channel value) : base(value) - { - } + public DisableChannelArgument(Channel value) : base(value) { } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.Disable(Value); + return Value switch + { + Channel.Video => "-vn", + Channel.Audio => "-an", + _ => string.Empty + }; } } } diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/DrawTextArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/DrawTextArgument.cs index 5daf264..a3781e2 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/DrawTextArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/DrawTextArgument.cs @@ -9,13 +9,12 @@ namespace FFMpegCore.FFMPEG.Argument public class DrawTextArgument : Argument> { public DrawTextArgument(string text, string fontPath, params (string, string)[] optionalArguments) - : base(new[] {("text", text), ("fontfile", fontPath)}.Concat(optionalArguments)) - { - } + : base(new[] {("text", text), ("fontfile", fontPath)}.Concat(optionalArguments)) { } + /// public override string GetStringValue() { - return $"-vf drawtext=\"{string.Join(": ", Value.Select(FormatArgumentPair))}\" "; + return $"-vf drawtext=\"{string.Join(": ", Value.Select(FormatArgumentPair))}\""; } private static string FormatArgumentPair((string key, string value) pair) diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/DurationArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/DurationArgument.cs index 0e764db..6576afa 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/DurationArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/DurationArgument.cs @@ -7,21 +7,14 @@ namespace FFMpegCore.FFMPEG.Argument /// public class DurationArgument : Argument { - public DurationArgument() - { - } + public DurationArgument() { } - public DurationArgument(TimeSpan? value) : base(value) - { - } + public DurationArgument(TimeSpan? value) : base(value) { } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.Duration(Value); + return !Value.HasValue ? string.Empty : $"-t {Value}"; } } } diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/FaststartArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/FaststartArgument.cs index dd56607..b358183 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/FaststartArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/FaststartArgument.cs @@ -5,13 +5,12 @@ /// public class FaststartArgument : Argument { - public FaststartArgument() - { - } + public FaststartArgument() { } + /// public override string GetStringValue() { - return "-movflags faststart "; + return "-movflags faststart"; } } } \ No newline at end of file diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/ForceFormatArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/ForceFormatArgument.cs index b9c3a4d..700d320 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/ForceFormatArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/ForceFormatArgument.cs @@ -7,21 +7,14 @@ namespace FFMpegCore.FFMPEG.Argument /// public class ForceFormatArgument : Argument { - public ForceFormatArgument() - { - } + public ForceFormatArgument() { } - public ForceFormatArgument(VideoCodec value) : base(value) - { - } + public ForceFormatArgument(VideoCodec value) : base(value) { } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.ForceFormat(Value); + return $"-f {Value.ToString().ToLower()}"; } } } diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/FrameOutputCountArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/FrameOutputCountArgument.cs index 3facb87..5d0ebf6 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/FrameOutputCountArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/FrameOutputCountArgument.cs @@ -5,21 +5,14 @@ /// public class FrameOutputCountArgument : Argument { - public FrameOutputCountArgument() - { - } + public FrameOutputCountArgument() { } - public FrameOutputCountArgument(int value) : base(value) - { - } + public FrameOutputCountArgument(int value) : base(value) { } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.FrameOutputCount(Value); + return $"-vframes {Value}"; } } } diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/FrameRateArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/FrameRateArgument.cs index f6e0f01..9e57704 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/FrameRateArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/FrameRateArgument.cs @@ -5,21 +5,14 @@ /// public class FrameRateArgument : Argument { - public FrameRateArgument() - { - } + public FrameRateArgument() { } - public FrameRateArgument(double value) : base(value) - { - } + public FrameRateArgument(double value) : base(value) { } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.FrameRate(Value); + return $"-r {Value}"; } } } diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/InputArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/InputArgument.cs index e4a370f..d421b0a 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/InputArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/InputArgument.cs @@ -9,33 +9,20 @@ namespace FFMpegCore.FFMPEG.Argument /// public class InputArgument : Argument { - public InputArgument() - { - } + public InputArgument() { } - public InputArgument(params string[] values) : base(values) - { - } + public InputArgument(params string[] values) : base(values) { } - public InputArgument(params VideoInfo[] values) : base(values.Select(v => v.FullName).ToArray()) - { - } + public InputArgument(params VideoInfo[] values) : base(values.Select(v => v.FullName).ToArray()) { } - public InputArgument(params FileInfo[] values) : base(values.Select(v => v.FullName).ToArray()) - { - } + public InputArgument(params FileInfo[] values) : base(values.Select(v => v.FullName).ToArray()) { } - public InputArgument(params Uri[] values) : base(values.Select(v => v.AbsoluteUri).ToArray()) - { - } + public InputArgument(params Uri[] values) : base(values.Select(v => v.AbsoluteUri).ToArray()) { } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return string.Join(" ", Value.Select(v => ArgumentStringifier.Input(v))); + return string.Join(" ", Value.Select(v => $"-i \"{v}\"")); } public VideoInfo[] GetAsVideoInfo() { diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/LoopArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/LoopArgument.cs index b09b2dd..9885afc 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/LoopArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/LoopArgument.cs @@ -5,21 +5,14 @@ /// public class LoopArgument : Argument { - public LoopArgument() - { - } + public LoopArgument() { } - public LoopArgument(int value) : base(value) - { - } + public LoopArgument(int value) : base(value) { } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.Loop(Value); + return $"-loop {Value}"; } } } diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/OutputArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/OutputArgument.cs index 5049b0b..36ecc33 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/OutputArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/OutputArgument.cs @@ -8,33 +8,20 @@ namespace FFMpegCore.FFMPEG.Argument /// public class OutputArgument : Argument { - public OutputArgument() - { - } + public OutputArgument() { } - public OutputArgument(string value) : base(value) - { - } + public OutputArgument(string value) : base(value) { } - public OutputArgument(VideoInfo value) : base(value.FullName) - { - } + public OutputArgument(VideoInfo value) : base(value.FullName) { } - public OutputArgument(FileInfo value) : base(value.FullName) - { - } + public OutputArgument(FileInfo value) : base(value.FullName) { } - public OutputArgument(Uri value) : base(value.AbsolutePath) - { - } + public OutputArgument(Uri value) : base(value.AbsolutePath) { } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.Output(Value); + return $"\"{Value}\""; } public FileInfo GetAsFileInfo() diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/OverrideArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/OverrideArgument.cs index ec5ad73..ea02968 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/OverrideArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/OverrideArgument.cs @@ -6,14 +6,9 @@ /// public class OverrideArgument : Argument { - public OverrideArgument() - { - } + public OverrideArgument() { } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { return "-y"; diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/RemoveMetadataArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/RemoveMetadataArgument.cs index 3f24f80..544ba84 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/RemoveMetadataArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/RemoveMetadataArgument.cs @@ -5,13 +5,12 @@ /// public class RemoveMetadataArgument : Argument { - public RemoveMetadataArgument() - { - } + public RemoveMetadataArgument() { } + /// public override string GetStringValue() { - return $"-map_metadata -1 "; + return $"-map_metadata -1"; } } } \ No newline at end of file diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/ScaleArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/ScaleArgument.cs index a0b4712..7c85b39 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/ScaleArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/ScaleArgument.cs @@ -8,30 +8,21 @@ namespace FFMpegCore.FFMPEG.Argument /// public class ScaleArgument : Argument { - public ScaleArgument() - { - } + public ScaleArgument() { } - public ScaleArgument(Size value) : base(value) - { - } + public ScaleArgument(Size value) : base(value) { } - public ScaleArgument(int width, int heignt) : base(new Size(width, heignt)) - { - } + public ScaleArgument(int width, int height) : base(new Size(width, height)) { } public ScaleArgument(VideoSize videosize) { Value = videosize == VideoSize.Original ? new Size(-1, -1) : new Size(-1, (int)videosize); } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.Scale(Value.Width, Value.Height); + return $"-vf scale={Value.Width}:{Value.Height}"; } } } diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/SeekArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/SeekArgument.cs index edc0a6e..beaa44e 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/SeekArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/SeekArgument.cs @@ -7,21 +7,14 @@ namespace FFMpegCore.FFMPEG.Argument /// public class SeekArgument : Argument { - public SeekArgument() - { - } + public SeekArgument() { } - public SeekArgument(TimeSpan? value) : base(value) - { - } + public SeekArgument(TimeSpan? value) : base(value) { } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.Seek(Value); + return !Value.HasValue ? string.Empty : $"-ss {Value}"; } } } diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/ShortestArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/ShortestArgument.cs index c25b0ad..bc67e64 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/ShortestArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/ShortestArgument.cs @@ -5,21 +5,14 @@ /// public class ShortestArgument : Argument { - public ShortestArgument() - { - } + public ShortestArgument() { } - public ShortestArgument(bool value) : base(value) - { - } + public ShortestArgument(bool value) : base(value) { } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.FinalizeAtShortestInput(Value); + return Value ? "-shortest" : string.Empty; } } } diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/SizeArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/SizeArgument.cs index f70dc7d..2c27b20 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/SizeArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/SizeArgument.cs @@ -8,29 +8,18 @@ namespace FFMpegCore.FFMPEG.Argument /// public class SizeArgument : ScaleArgument { - public SizeArgument() - { - } + public SizeArgument() { } - public SizeArgument(Size? value) : base(value ?? new Size()) - { - } + public SizeArgument(Size? value) : base(value ?? default) { } - public SizeArgument(VideoSize videosize) : base(videosize) - { - } + public SizeArgument(VideoSize videosize) : base(videosize) { } - public SizeArgument(int width, int heignt) : base(width, heignt) - { - } + public SizeArgument(int width, int height) : base(width, height) { } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.Size(Value); + return Value == default ? string.Empty : $"-s {Value.Width}x{Value.Height}"; } } } diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/SpeedArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/SpeedArgument.cs index 6d8f5cd..49cf64d 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/SpeedArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/SpeedArgument.cs @@ -11,17 +11,12 @@ public SpeedArgument() { } - public SpeedArgument(Speed value) : base(value) - { - } + public SpeedArgument(Speed value) : base(value) { } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.Speed(Value); + return $"-preset {Value.ToString().ToLower()}"; } } } diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/StartNumberArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/StartNumberArgument.cs index 7a8201d..daf6740 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/StartNumberArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/StartNumberArgument.cs @@ -5,21 +5,14 @@ /// public class StartNumberArgument : Argument { - public StartNumberArgument() - { - } + public StartNumberArgument() { } - public StartNumberArgument(int value) : base(value) - { - } + public StartNumberArgument(int value) : base(value) { } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.StartNumber(Value); + return $"-start_number {Value}"; } } } diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/ThreadsArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/ThreadsArgument.cs index 5c95a4a..32f017f 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/ThreadsArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/ThreadsArgument.cs @@ -8,28 +8,19 @@ namespace FFMpegCore.FFMPEG.Argument /// public class ThreadsArgument : Argument { - public ThreadsArgument() - { - } + public ThreadsArgument() { } - public ThreadsArgument(int value) : base(value) - { - } + public ThreadsArgument(int value) : base(value) { } public ThreadsArgument(bool isMultiThreaded) : base(isMultiThreaded ? Environment.ProcessorCount - : 1) - { - } + : 1) { } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.Threads(Value); + return $"-threads {Value}"; } } } diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/VariableBitRateArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/VariableBitRateArgument.cs index f43e826..15bea02 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/VariableBitRateArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/VariableBitRateArgument.cs @@ -15,9 +15,10 @@ public VariableBitRateArgument(int vbr) : base(vbr) } } + /// public override string GetStringValue() { - return $"-vbr {Value} "; + return $"-vbr {Value}"; } } } \ No newline at end of file diff --git a/FFMpegCore/FFMPEG/Argument/Atoms/VideoCodecArgument.cs b/FFMpegCore/FFMPEG/Argument/Atoms/VideoCodecArgument.cs index eaf5d9b..e8296ab 100644 --- a/FFMpegCore/FFMPEG/Argument/Atoms/VideoCodecArgument.cs +++ b/FFMpegCore/FFMPEG/Argument/Atoms/VideoCodecArgument.cs @@ -9,26 +9,26 @@ public class VideoCodecArgument : Argument { public int Bitrate { get; protected set; } = 0; - public VideoCodecArgument() - { - } + public VideoCodecArgument() { } - public VideoCodecArgument(VideoCodec value) : base(value) - { - } + public VideoCodecArgument(VideoCodec value) : base(value) { } public VideoCodecArgument(VideoCodec value, int bitrate) : base(value) { Bitrate = bitrate; } - /// - /// String representation of the argument - /// - /// String representation of the argument + /// public override string GetStringValue() { - return ArgumentStringifier.Video(Value, Bitrate); + var video = $"-c:v {Value.ToString().ToLower()} -pix_fmt yuv420p"; + + if (Bitrate != default) + { + video += $" -b:v {Bitrate}k"; + } + + return video; } } } diff --git a/FFMpegCore/FFMPEG/Argument/FFArgumentBuilder.cs b/FFMpegCore/FFMPEG/Argument/FFArgumentBuilder.cs index 693021f..4707bf3 100644 --- a/FFMpegCore/FFMPEG/Argument/FFArgumentBuilder.cs +++ b/FFMpegCore/FFMPEG/Argument/FFArgumentBuilder.cs @@ -20,28 +20,8 @@ public string BuildArguments(ArgumentContainer container) { if (!container.ContainsInputOutput()) throw new ArgumentException("No input or output parameter found", nameof(container)); - - return string.Join(" ", container.Select(argument => argument.Value.GetStringValue().Trim())); - } - - private void CheckExtensionOfOutputExtension(ArgumentContainer container, FileInfo output) - { - if(container.ContainsKey(typeof(VideoCodecArgument))) - { - var codec = (VideoCodecArgument)container[typeof(VideoCodecArgument)]; - FFMpegHelper.ExtensionExceptionCheck(output, FileExtension.ForCodec(codec.Value)); - } - } - - private Argument GetInput(ArgumentContainer container) - { - if (container.ContainsKey(typeof(InputArgument))) - return container[typeof(InputArgument)]; - else if (container.ContainsKey(typeof(ConcatArgument))) - return container[typeof(ConcatArgument)]; - else - throw new ArgumentException("No inputs found"); + return string.Join(" ", container.Select(argument => argument.Value.GetStringValue())); } } } diff --git a/FFMpegCore/FFMPEG/Enums/VideoSize.cs b/FFMpegCore/FFMPEG/Enums/VideoSize.cs index 396d349..501be83 100644 --- a/FFMpegCore/FFMPEG/Enums/VideoSize.cs +++ b/FFMpegCore/FFMPEG/Enums/VideoSize.cs @@ -2,10 +2,10 @@ { public enum VideoSize { - Hd = 720, FullHd = 1080, + Hd = 720, Ed = 480, Ld = 360, - Original + Original = -1 } } \ No newline at end of file diff --git a/FFMpegCore/ImageInfo.cs b/FFMpegCore/ImageInfo.cs index 9c9c044..3c1d947 100644 --- a/FFMpegCore/ImageInfo.cs +++ b/FFMpegCore/ImageInfo.cs @@ -46,9 +46,7 @@ public ImageInfo(FileInfo fileInfo) /// Create a image information object from a target path. /// /// Path to image. - public ImageInfo(string path) : this(new FileInfo(path)) - { - } + public ImageInfo(string path) : this(new FileInfo(path)) { } /// /// Aspect ratio. diff --git a/FFMpegCore/VideoInfo.cs b/FFMpegCore/VideoInfo.cs index a4556d3..58da8f5 100644 --- a/FFMpegCore/VideoInfo.cs +++ b/FFMpegCore/VideoInfo.cs @@ -28,9 +28,7 @@ public VideoInfo(FileInfo fileInfo) /// Create a video information object from a target path. /// /// Path to video. - public VideoInfo(string path) : this(new FileInfo(path)) - { - } + public VideoInfo(string path) : this(new FileInfo(path)) { } /// /// Duration of the video file.