diff --git a/FFMpegCore.Extensions.SkiaSharp/FFMpegCore.Extensions.SkiaSharp.csproj b/FFMpegCore.Extensions.SkiaSharp/FFMpegCore.Extensions.SkiaSharp.csproj index f055149..d15a7bd 100644 --- a/FFMpegCore.Extensions.SkiaSharp/FFMpegCore.Extensions.SkiaSharp.csproj +++ b/FFMpegCore.Extensions.SkiaSharp/FFMpegCore.Extensions.SkiaSharp.csproj @@ -4,6 +4,7 @@ true Image extension for FFMpegCore using SkiaSharp 5.0.0 + ../nupkg ffmpeg ffprobe convert video audio mediafile resize analyze muxing skiasharp diff --git a/FFMpegCore.Test/FFMpegCore.Test.csproj b/FFMpegCore.Test/FFMpegCore.Test.csproj index 219315b..b78af1b 100644 --- a/FFMpegCore.Test/FFMpegCore.Test.csproj +++ b/FFMpegCore.Test/FFMpegCore.Test.csproj @@ -12,21 +12,21 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + - - + + diff --git a/FFMpegCore/Extend/TimeSpanExtensions.cs b/FFMpegCore/Extend/TimeSpanExtensions.cs new file mode 100644 index 0000000..3e70d5c --- /dev/null +++ b/FFMpegCore/Extend/TimeSpanExtensions.cs @@ -0,0 +1,15 @@ +namespace FFMpegCore.Extend; + +public static class TimeSpanExtensions +{ + public static string ToLongString(this TimeSpan timeSpan) + { + var hours = timeSpan.Hours; + if (timeSpan.Days > 0) + { + hours += timeSpan.Days * 24; + } + + return $"{hours:00}:{timeSpan.Minutes:00}:{timeSpan.Seconds:00}.{timeSpan.Milliseconds:000}"; + } +} diff --git a/FFMpegCore/FFMpeg/Arguments/EndSeekArgument.cs b/FFMpegCore/FFMpeg/Arguments/EndSeekArgument.cs index ea57339..e4e8f5d 100644 --- a/FFMpegCore/FFMpeg/Arguments/EndSeekArgument.cs +++ b/FFMpegCore/FFMpeg/Arguments/EndSeekArgument.cs @@ -1,4 +1,6 @@ -namespace FFMpegCore.Arguments +using FFMpegCore.Extend; + +namespace FFMpegCore.Arguments { /// /// Represents seek parameter @@ -12,25 +14,6 @@ public EndSeekArgument(TimeSpan? seekTo) SeekTo = seekTo; } - public string Text - { - get - { - if (SeekTo.HasValue) - { - var hours = SeekTo.Value.Hours; - if (SeekTo.Value.Days > 0) - { - hours += SeekTo.Value.Days * 24; - } - - return $"-to {hours.ToString("00")}:{SeekTo.Value.Minutes.ToString("00")}:{SeekTo.Value.Seconds.ToString("00")}.{SeekTo.Value.Milliseconds.ToString("000")}"; - } - else - { - return string.Empty; - } - } - } + public string Text => SeekTo.HasValue ? $"-to {SeekTo.Value.ToLongString()}" : string.Empty; } } diff --git a/FFMpegCore/FFMpeg/Arguments/SeekArgument.cs b/FFMpegCore/FFMpeg/Arguments/SeekArgument.cs index 8862e76..29cda7f 100644 --- a/FFMpegCore/FFMpeg/Arguments/SeekArgument.cs +++ b/FFMpegCore/FFMpeg/Arguments/SeekArgument.cs @@ -1,4 +1,6 @@ -namespace FFMpegCore.Arguments +using FFMpegCore.Extend; + +namespace FFMpegCore.Arguments { /// /// Represents seek parameter @@ -12,25 +14,6 @@ public SeekArgument(TimeSpan? seekTo) SeekTo = seekTo; } - public string Text - { - get - { - if (SeekTo.HasValue) - { - var hours = SeekTo.Value.Hours; - if (SeekTo.Value.Days > 0) - { - hours += SeekTo.Value.Days * 24; - } - - return $"-ss {hours.ToString("00")}:{SeekTo.Value.Minutes.ToString("00")}:{SeekTo.Value.Seconds.ToString("00")}.{SeekTo.Value.Milliseconds.ToString("000")}"; - } - else - { - return string.Empty; - } - } - } + public string Text => SeekTo.HasValue ? $"-ss {SeekTo.Value.ToLongString()}" : string.Empty; } } diff --git a/FFMpegCore/FFMpegCore.csproj b/FFMpegCore/FFMpegCore.csproj index 843bdba..db5abd1 100644 --- a/FFMpegCore/FFMpegCore.csproj +++ b/FFMpegCore/FFMpegCore.csproj @@ -3,7 +3,7 @@ true A .NET Standard FFMpeg/FFProbe wrapper for easily integrating media analysis and conversion into your .NET applications - 5.0.1 + 5.0.2 ../nupkg @@ -13,12 +13,12 @@ - + - - + + diff --git a/FFMpegCore/FFProbe/MediaAnalysis.cs b/FFMpegCore/FFProbe/MediaAnalysis.cs index 53943dc..9fce0fe 100644 --- a/FFMpegCore/FFProbe/MediaAnalysis.cs +++ b/FFMpegCore/FFProbe/MediaAnalysis.cs @@ -50,7 +50,7 @@ private MediaFormat ParseFormat(Format analysisFormat) { var bitDepth = int.TryParse(stream.BitsPerRawSample, out var bprs) ? bprs : stream.BitsPerSample; - return bitDepth == 0 ? null : (int?)bitDepth; + return bitDepth == 0 ? null : bitDepth; } private VideoStream ParseVideoStream(FFProbeStream stream) @@ -126,7 +126,7 @@ public static class MediaAnalysisUtils { private static readonly Regex DurationRegex = new(@"^(\d+):(\d{1,2}):(\d{1,2})\.(\d{1,3})", RegexOptions.Compiled); - internal static Dictionary? ToCaseInsensitive(this Dictionary? dictionary) + internal static Dictionary ToCaseInsensitive(this Dictionary? dictionary) { return dictionary?.ToDictionary(tag => tag.Key, tag => tag.Value, StringComparer.OrdinalIgnoreCase) ?? new Dictionary(); } @@ -195,11 +195,6 @@ public static TimeSpan ParseDuration(string duration) } } - public static TimeSpan ParseDuration(FFProbeStream ffProbeStream) - { - return ParseDuration(ffProbeStream.Duration); - } - public static int ParseRotation(FFProbeStream fFProbeStream) { var displayMatrixSideData = fFProbeStream.SideData?.Find(item => item.TryGetValue("side_data_type", out var rawSideDataType) && rawSideDataType.ToString() == "Display Matrix"); diff --git a/FFMpegCore/Helpers/FFProbeHelper.cs b/FFMpegCore/Helpers/FFProbeHelper.cs index 0c44ab6..ff1ff20 100644 --- a/FFMpegCore/Helpers/FFProbeHelper.cs +++ b/FFMpegCore/Helpers/FFProbeHelper.cs @@ -3,27 +3,10 @@ namespace FFMpegCore.Helpers { - public class FFProbeHelper + public static class FFProbeHelper { private static bool _ffprobeVerified; - public static int Gcd(int first, int second) - { - while (first != 0 && second != 0) - { - if (first > second) - { - first -= second; - } - else - { - second -= first; - } - } - - return first == 0 ? second : first; - } - public static void RootExceptionCheck() { if (GlobalFFOptions.Current.BinaryFolder == null)