From ac441eefd6a545bacd0dd5802c84a12b6edc6554 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sat, 18 Oct 2025 15:58:40 +0300 Subject: [PATCH] Add raw response from ffprobe in MediaAnalysis --- FFMpegCore.Test/FFProbeTests.cs | 9 +++++++++ FFMpegCore/FFProbe/FFProbe.cs | 2 ++ FFMpegCore/FFProbe/FFProbeAnalysis.cs | 2 ++ FFMpegCore/FFProbe/IMediaAnalysis.cs | 1 + FFMpegCore/FFProbe/MediaAnalysis.cs | 4 +++- 5 files changed, 17 insertions(+), 1 deletion(-) diff --git a/FFMpegCore.Test/FFProbeTests.cs b/FFMpegCore.Test/FFProbeTests.cs index 2ee5a92..b0b39aa 100644 --- a/FFMpegCore.Test/FFProbeTests.cs +++ b/FFMpegCore.Test/FFProbeTests.cs @@ -351,4 +351,13 @@ public class FFProbeTests await Assert.ThrowsAsync(async () => await FFProbe.AnalyseAsync(input, cancellationToken: TestContext.CancellationToken, customArguments: "--some-invalid-argument")); } + + [TestMethod] + public void Probe_Success_Output_Data() + { + var info = FFProbe.Analyse(TestResources.Mp4Video); + + Assert.AreNotEqual(0, info.OutputData.Count); + CollectionAssert.Contains(info.OutputData.ToList(), " \"codec_long_name\": \"H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10\","); + } } diff --git a/FFMpegCore/FFProbe/FFProbe.cs b/FFMpegCore/FFProbe/FFProbe.cs index 164ea72..c9bf617 100644 --- a/FFMpegCore/FFProbe/FFProbe.cs +++ b/FFMpegCore/FFProbe/FFProbe.cs @@ -177,7 +177,9 @@ public static class FFProbe throw new FormatNullException(); } + ffprobeAnalysis.OutputData = instance.OutputData; ffprobeAnalysis.ErrorData = instance.ErrorData; + return new MediaAnalysis(ffprobeAnalysis); } diff --git a/FFMpegCore/FFProbe/FFProbeAnalysis.cs b/FFMpegCore/FFProbe/FFProbeAnalysis.cs index 7176ce1..5a7eee9 100644 --- a/FFMpegCore/FFProbe/FFProbeAnalysis.cs +++ b/FFMpegCore/FFProbe/FFProbeAnalysis.cs @@ -11,6 +11,8 @@ public class FFProbeAnalysis [JsonPropertyName("chapters")] public List Chapters { get; set; } = null!; + [JsonIgnore] public IReadOnlyList OutputData { get; set; } = new List(); + [JsonIgnore] public IReadOnlyList ErrorData { get; set; } = new List(); } diff --git a/FFMpegCore/FFProbe/IMediaAnalysis.cs b/FFMpegCore/FFProbe/IMediaAnalysis.cs index 72d1670..9597221 100644 --- a/FFMpegCore/FFProbe/IMediaAnalysis.cs +++ b/FFMpegCore/FFProbe/IMediaAnalysis.cs @@ -13,5 +13,6 @@ public interface IMediaAnalysis List VideoStreams { get; } List AudioStreams { get; } List SubtitleStreams { get; } + IReadOnlyList OutputData { get; } IReadOnlyList ErrorData { get; } } diff --git a/FFMpegCore/FFProbe/MediaAnalysis.cs b/FFMpegCore/FFProbe/MediaAnalysis.cs index 4129e63..75744f9 100644 --- a/FFMpegCore/FFProbe/MediaAnalysis.cs +++ b/FFMpegCore/FFProbe/MediaAnalysis.cs @@ -9,10 +9,11 @@ internal class MediaAnalysis : IMediaAnalysis internal MediaAnalysis(FFProbeAnalysis analysis) { Format = ParseFormat(analysis.Format); - Chapters = analysis.Chapters.Select(c => ParseChapter(c)).ToList(); + Chapters = analysis.Chapters.Select(ParseChapter).ToList(); VideoStreams = analysis.Streams.Where(stream => stream.CodecType == "video").Select(ParseVideoStream).ToList(); AudioStreams = analysis.Streams.Where(stream => stream.CodecType == "audio").Select(ParseAudioStream).ToList(); SubtitleStreams = analysis.Streams.Where(stream => stream.CodecType == "subtitle").Select(ParseSubtitleStream).ToList(); + OutputData = analysis.OutputData; ErrorData = analysis.ErrorData; } @@ -29,6 +30,7 @@ internal class MediaAnalysis : IMediaAnalysis public List VideoStreams { get; } public List AudioStreams { get; } public List SubtitleStreams { get; } + public IReadOnlyList OutputData { get; } public IReadOnlyList ErrorData { get; } private MediaFormat ParseFormat(Format analysisFormat)