diff --git a/FFMpegCore.Test/FFMpegCore.Test.csproj b/FFMpegCore.Test/FFMpegCore.Test.csproj
index e9488ef2..7abd5df9 100644
--- a/FFMpegCore.Test/FFMpegCore.Test.csproj
+++ b/FFMpegCore.Test/FFMpegCore.Test.csproj
@@ -57,6 +57,9 @@
PreserveNewest
+
+ PreserveNewest
+
PreserveNewest
diff --git a/FFMpegCore.Test/FFProbeTests.cs b/FFMpegCore.Test/FFProbeTests.cs
index 77894343..fb7fb46a 100644
--- a/FFMpegCore.Test/FFProbeTests.cs
+++ b/FFMpegCore.Test/FFProbeTests.cs
@@ -180,6 +180,18 @@ public async Task Probe_Success_FromStream_Async()
Assert.AreEqual(3, info.Duration.Seconds);
}
+ [TestMethod, Timeout(10000)]
+ public void Probe_HDR()
+ {
+ var info = FFProbe.Analyse(TestResources.HdrVideo);
+
+ Assert.IsNotNull(info.PrimaryVideoStream);
+ Assert.AreEqual("tv", info.PrimaryVideoStream.ColorRange);
+ Assert.AreEqual("bt2020nc", info.PrimaryVideoStream.ColorSpace);
+ Assert.AreEqual("arib-std-b67", info.PrimaryVideoStream.ColorTransfer);
+ Assert.AreEqual("bt2020", info.PrimaryVideoStream.ColorPrimaries);
+ }
+
[TestMethod, Timeout(10000)]
public async Task Probe_Success_Subtitle_Async()
{
diff --git a/FFMpegCore.Test/Resources/TestResources.cs b/FFMpegCore.Test/Resources/TestResources.cs
index beb7ead4..97e78924 100644
--- a/FFMpegCore.Test/Resources/TestResources.cs
+++ b/FFMpegCore.Test/Resources/TestResources.cs
@@ -6,6 +6,7 @@ public static class TestResources
public static readonly string Mp4VideoRotation = "./Resources/input_3sec_rotation_90deg.mp4";
public static readonly string Mp4VideoRotationNegative = "./Resources/input_3sec_rotation_negative_90deg.mp4";
public static readonly string WebmVideo = "./Resources/input_3sec.webm";
+ public static readonly string HdrVideo = "./Resources/input_hdr.mov";
public static readonly string Mp4WithoutVideo = "./Resources/input_audio_only_10sec.mp4";
public static readonly string Mp4WithoutAudio = "./Resources/input_video_only_3sec.mp4";
public static readonly string RawAudio = "./Resources/audio.raw";
diff --git a/FFMpegCore.Test/Resources/input_hdr.mov b/FFMpegCore.Test/Resources/input_hdr.mov
new file mode 100644
index 00000000..3fdeea11
Binary files /dev/null and b/FFMpegCore.Test/Resources/input_hdr.mov differ
diff --git a/FFMpegCore/FFProbe/FFProbeAnalysis.cs b/FFMpegCore/FFProbe/FFProbeAnalysis.cs
index e88f4618..0904db63 100644
--- a/FFMpegCore/FFProbe/FFProbeAnalysis.cs
+++ b/FFMpegCore/FFProbe/FFProbeAnalysis.cs
@@ -94,6 +94,18 @@ public class FFProbeStream : ITagsContainer, IDispositionContainer
[JsonPropertyName("side_data_list")]
public List> SideData { get; set; } = null!;
+
+ [JsonPropertyName("color_range")]
+ public string ColorRange { get; set; } = null!;
+
+ [JsonPropertyName("color_space")]
+ public string ColorSpace { get; set; } = null!;
+
+ [JsonPropertyName("color_transfer")]
+ public string ColorTransfer { get; set; } = null!;
+
+ [JsonPropertyName("color_primaries")]
+ public string ColorPrimaries { get; set; } = null!;
}
public class Format : ITagsContainer
diff --git a/FFMpegCore/FFProbe/MediaAnalysis.cs b/FFMpegCore/FFProbe/MediaAnalysis.cs
index 887baeba..c8f48873 100644
--- a/FFMpegCore/FFProbe/MediaAnalysis.cs
+++ b/FFMpegCore/FFProbe/MediaAnalysis.cs
@@ -87,6 +87,10 @@ private VideoStream ParseVideoStream(FFProbeStream stream)
Width = stream.Width ?? 0,
Profile = stream.Profile,
PixelFormat = stream.PixelFormat,
+ ColorRange = stream.ColorRange,
+ ColorSpace = stream.ColorSpace,
+ ColorTransfer = stream.ColorTransfer,
+ ColorPrimaries = stream.ColorPrimaries,
Rotation = MediaAnalysisUtils.ParseRotation(stream),
Language = stream.GetLanguage(),
Disposition = MediaAnalysisUtils.FormatDisposition(stream.Disposition),
diff --git a/FFMpegCore/FFProbe/VideoStream.cs b/FFMpegCore/FFProbe/VideoStream.cs
index b41bb627..b6474897 100644
--- a/FFMpegCore/FFProbe/VideoStream.cs
+++ b/FFMpegCore/FFProbe/VideoStream.cs
@@ -15,6 +15,10 @@ public class VideoStream : MediaStream
public string PixelFormat { get; set; } = null!;
public int Rotation { get; set; }
public double AverageFrameRate { get; set; }
+ public string ColorRange { get; set; } = null!;
+ public string ColorSpace { get; set; } = null!;
+ public string ColorTransfer { get; set; } = null!;
+ public string ColorPrimaries { get; set; } = null!;
public PixelFormat GetPixelFormatInfo() => FFMpeg.GetPixelFormat(PixelFormat);
}