Add raw response from ffprobe in MediaAnalysis

This commit is contained in:
Bogdan 2025-10-18 15:58:40 +03:00
parent cc75e03ec9
commit ac441eefd6
5 changed files with 17 additions and 1 deletions

View file

@ -351,4 +351,13 @@ public class FFProbeTests
await Assert.ThrowsAsync<FFMpegException>(async () => await FFProbe.AnalyseAsync(input, await Assert.ThrowsAsync<FFMpegException>(async () => await FFProbe.AnalyseAsync(input,
cancellationToken: TestContext.CancellationToken, customArguments: "--some-invalid-argument")); 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\",");
}
} }

View file

@ -177,7 +177,9 @@ public static class FFProbe
throw new FormatNullException(); throw new FormatNullException();
} }
ffprobeAnalysis.OutputData = instance.OutputData;
ffprobeAnalysis.ErrorData = instance.ErrorData; ffprobeAnalysis.ErrorData = instance.ErrorData;
return new MediaAnalysis(ffprobeAnalysis); return new MediaAnalysis(ffprobeAnalysis);
} }

View file

@ -11,6 +11,8 @@ public class FFProbeAnalysis
[JsonPropertyName("chapters")] public List<Chapter> Chapters { get; set; } = null!; [JsonPropertyName("chapters")] public List<Chapter> Chapters { get; set; } = null!;
[JsonIgnore] public IReadOnlyList<string> OutputData { get; set; } = new List<string>();
[JsonIgnore] public IReadOnlyList<string> ErrorData { get; set; } = new List<string>(); [JsonIgnore] public IReadOnlyList<string> ErrorData { get; set; } = new List<string>();
} }

View file

@ -13,5 +13,6 @@ public interface IMediaAnalysis
List<VideoStream> VideoStreams { get; } List<VideoStream> VideoStreams { get; }
List<AudioStream> AudioStreams { get; } List<AudioStream> AudioStreams { get; }
List<SubtitleStream> SubtitleStreams { get; } List<SubtitleStream> SubtitleStreams { get; }
IReadOnlyList<string> OutputData { get; }
IReadOnlyList<string> ErrorData { get; } IReadOnlyList<string> ErrorData { get; }
} }

View file

@ -9,10 +9,11 @@ internal class MediaAnalysis : IMediaAnalysis
internal MediaAnalysis(FFProbeAnalysis analysis) internal MediaAnalysis(FFProbeAnalysis analysis)
{ {
Format = ParseFormat(analysis.Format); 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(); VideoStreams = analysis.Streams.Where(stream => stream.CodecType == "video").Select(ParseVideoStream).ToList();
AudioStreams = analysis.Streams.Where(stream => stream.CodecType == "audio").Select(ParseAudioStream).ToList(); AudioStreams = analysis.Streams.Where(stream => stream.CodecType == "audio").Select(ParseAudioStream).ToList();
SubtitleStreams = analysis.Streams.Where(stream => stream.CodecType == "subtitle").Select(ParseSubtitleStream).ToList(); SubtitleStreams = analysis.Streams.Where(stream => stream.CodecType == "subtitle").Select(ParseSubtitleStream).ToList();
OutputData = analysis.OutputData;
ErrorData = analysis.ErrorData; ErrorData = analysis.ErrorData;
} }
@ -29,6 +30,7 @@ internal class MediaAnalysis : IMediaAnalysis
public List<VideoStream> VideoStreams { get; } public List<VideoStream> VideoStreams { get; }
public List<AudioStream> AudioStreams { get; } public List<AudioStream> AudioStreams { get; }
public List<SubtitleStream> SubtitleStreams { get; } public List<SubtitleStream> SubtitleStreams { get; }
public IReadOnlyList<string> OutputData { get; }
public IReadOnlyList<string> ErrorData { get; } public IReadOnlyList<string> ErrorData { get; }
private MediaFormat ParseFormat(Format analysisFormat) private MediaFormat ParseFormat(Format analysisFormat)