diff --git a/FFMpegCore/FFProbe/FFProbe.cs b/FFMpegCore/FFProbe/FFProbe.cs index e199376..8647685 100644 --- a/FFMpegCore/FFProbe/FFProbe.cs +++ b/FFMpegCore/FFProbe/FFProbe.cs @@ -12,6 +12,11 @@ namespace FFMpegCore; public static class FFProbe { public static IMediaAnalysis Analyse(string filePath, FFOptions? ffOptions = null, string? customArguments = null) + { + return new MediaAnalysis(GetAnalysis(filePath, ffOptions, customArguments)); + } + + public static FFProbeAnalysis GetAnalysis(string filePath, FFOptions? ffOptions = null, string? customArguments = null) { ThrowIfInputFileDoesNotExist(filePath); @@ -19,7 +24,7 @@ public static class FFProbe var result = processArguments.StartAndWaitForExit(); ThrowIfExitCodeNotZero(result); - return ParseOutput(result); + return DeserializeOutput(result); } public static FFProbeFrames GetFrames(string filePath, FFOptions? ffOptions = null, string? customArguments = null) @@ -45,15 +50,25 @@ public static class FFProbe } public static IMediaAnalysis Analyse(Uri uri, FFOptions? ffOptions = null, string? customArguments = null) + { + return new MediaAnalysis(GetAnalysis(uri, ffOptions, customArguments)); + } + + public static FFProbeAnalysis GetAnalysis(Uri uri, FFOptions? ffOptions = null, string? customArguments = null) { var instance = PrepareStreamAnalysisInstance(uri.AbsoluteUri, ffOptions ?? GlobalFFOptions.Current, customArguments); var result = instance.StartAndWaitForExit(); ThrowIfExitCodeNotZero(result); - return ParseOutput(result); + return DeserializeOutput(result); } public static IMediaAnalysis Analyse(Stream stream, FFOptions? ffOptions = null, string? customArguments = null) + { + return new MediaAnalysis(GetAnalysis(stream, ffOptions, customArguments)); + } + + public static FFProbeAnalysis GetAnalysis(Stream stream, FFOptions? ffOptions = null, string? customArguments = null) { var streamPipeSource = new StreamPipeSource(stream); var pipeArgument = new InputPipeArgument(streamPipeSource); @@ -74,11 +89,17 @@ public static class FFProbe var result = task.ConfigureAwait(false).GetAwaiter().GetResult(); ThrowIfExitCodeNotZero(result); - return ParseOutput(result); + return DeserializeOutput(result); } public static async Task AnalyseAsync(string filePath, FFOptions? ffOptions = null, CancellationToken cancellationToken = default, string? customArguments = null) + { + return new MediaAnalysis(await GetAnalysisAsync(filePath, ffOptions, cancellationToken, customArguments)); + } + + public static async Task GetAnalysisAsync(string filePath, FFOptions? ffOptions = null, CancellationToken cancellationToken = default, + string? customArguments = null) { ThrowIfInputFileDoesNotExist(filePath); @@ -86,7 +107,7 @@ public static class FFProbe var result = await instance.StartAndWaitForExitAsync(cancellationToken).ConfigureAwait(false); ThrowIfExitCodeNotZero(result); - return ParseOutput(result); + return DeserializeOutput(result); } public static FFProbeFrames GetFrames(Uri uri, FFOptions? ffOptions = null, string? customArguments = null) @@ -120,16 +141,26 @@ public static class FFProbe public static async Task AnalyseAsync(Uri uri, FFOptions? ffOptions = null, CancellationToken cancellationToken = default, string? customArguments = null) + { + return new MediaAnalysis(await GetAnalysisAsync(uri, ffOptions, cancellationToken, customArguments)); + } + public static async Task GetAnalysisAsync(Uri uri, FFOptions? ffOptions = null, CancellationToken cancellationToken = default, + string? customArguments = null) { var instance = PrepareStreamAnalysisInstance(uri.AbsoluteUri, ffOptions ?? GlobalFFOptions.Current, customArguments); var result = await instance.StartAndWaitForExitAsync(cancellationToken).ConfigureAwait(false); ThrowIfExitCodeNotZero(result); - return ParseOutput(result); + return DeserializeOutput(result); } public static async Task AnalyseAsync(Stream stream, FFOptions? ffOptions = null, CancellationToken cancellationToken = default, string? customArguments = null) + { + return new MediaAnalysis(await GetAnalysisAsync(stream, ffOptions, cancellationToken, customArguments)); + } + public static async Task GetAnalysisAsync(Stream stream, FFOptions? ffOptions = null, CancellationToken cancellationToken = default, + string? customArguments = null) { var streamPipeSource = new StreamPipeSource(stream); var pipeArgument = new InputPipeArgument(streamPipeSource); @@ -153,7 +184,7 @@ public static class FFProbe ThrowIfExitCodeNotZero(result); pipeArgument.Post(); - return ParseOutput(result); + return DeserializeOutput(result); } public static async Task GetFramesAsync(Uri uri, FFOptions? ffOptions = null, CancellationToken cancellationToken = default, @@ -164,7 +195,7 @@ public static class FFProbe return ParseFramesOutput(result); } - private static IMediaAnalysis ParseOutput(IProcessResult instance) + private static FFProbeAnalysis DeserializeOutput(IProcessResult instance) { var json = string.Join(string.Empty, instance.OutputData); var ffprobeAnalysis = JsonSerializer.Deserialize(json, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); @@ -175,7 +206,7 @@ public static class FFProbe } ffprobeAnalysis.ErrorData = instance.ErrorData; - return new MediaAnalysis(ffprobeAnalysis); + return ffprobeAnalysis; } private static FFProbeFrames ParseFramesOutput(IProcessResult instance)