diff --git a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetTrackTitles.cs b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetTrackTitles.cs
index b8d913b6..a0bafeb9 100644
--- a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetTrackTitles.cs
+++ b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetTrackTitles.cs
@@ -192,7 +192,8 @@ public class FfmpegBuilderSetTrackTitles: FfmpegBuilderNode
fps: track.Stream?.FramesPerSecond ?? 0,
pixelFormat: track.Stream?.PixelFormat?.EmptyAsNull(),
resolution: track.Stream == null ? null : ResolutionHelper.GetResolution(track.Stream.Width, track.Stream.Height),
- dimensions: track.Stream == null ? null : track.Stream.Width + "x" + track.Stream.Height
+ dimensions: track.Stream == null ? null : track.Stream.Width + "x" + track.Stream.Height,
+ dynamicRange: track.Stream.HDR ? "HDR" : "SDR"
);
if (originalTitle == track.Title)
continue;
@@ -263,10 +264,11 @@ public class FfmpegBuilderSetTrackTitles: FfmpegBuilderNode
/// the tracks video dimensions
/// the tracks video pixelFormat
/// the tracks video FPS
+ /// the dynamic range
/// the formatted string
internal static string FormatTitle(string formatter, string separator, string language, string codec, bool isDefault = false, float bitrate = 0,
float channels = 0, int sampleRate = 0, bool isForced = false, bool sdh = false, bool cc = false, bool hi = false,
- ResolutionHelper.Resolution? resolution = null, string? dimensions = null, string? pixelFormat = null, float? fps = null)
+ ResolutionHelper.Resolution? resolution = null, string? dimensions = null, string? pixelFormat = null, float? fps = null, string? dynamicRange = null)
{
if (string.IsNullOrWhiteSpace(formatter))
return string.Empty;
@@ -336,6 +338,9 @@ public class FfmpegBuilderSetTrackTitles: FfmpegBuilderNode
formatter = Replace(formatter, "!pixelformat!", pixelFormat ?? string.Empty);
formatter = Replace(formatter, "!pixelformat", pixelFormat?.ToLowerInvariant() ?? string.Empty);
formatter = Replace(formatter, "pixelformat", pixelFormat?.ToUpperInvariant() ?? string.Empty);
+ formatter = Replace(formatter, "!dynamicrange!", dynamicRange ?? string.Empty);
+ formatter = Replace(formatter, "!dynamicrange", dynamicRange?.ToLowerInvariant() ?? string.Empty);
+ formatter = Replace(formatter, "dynamicrange", dynamicRange?.ToUpperInvariant() ?? string.Empty);
formatter = Replace(formatter, "dimensions", dimensions ?? string.Empty);
// Remove standalone separators
diff --git a/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_SetTrackTitlesTests.cs b/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_SetTrackTitlesTests.cs
index e6b80fdd..3095b72f 100644
--- a/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_SetTrackTitlesTests.cs
+++ b/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_SetTrackTitlesTests.cs
@@ -402,6 +402,33 @@ public class FFmpegBuilder_SetTrackTitlesTests : VideoTestBase
Assert.AreEqual("Track: English / HEVC / 720p", result);
}
+
+ [TestMethod]
+ public void FormatTitle_Video_HDR()
+ {
+ // Arrange
+ string formatter = "Track: lang / codec / fps / resolution / dimensions / pixelformat / dynamicrange";
+ string separator = " / ";
+ string language = "English";
+ string codec = "HEVC";
+
+ ResolutionHelper.Resolution resolution = ResolutionHelper.Resolution.r720p;
+
+ // Act
+ string result = FfmpegBuilderSetTrackTitles.FormatTitle(formatter, separator, language, codec,
+ resolution: resolution, dynamicRange: "HDR");
+
+ // Assert
+ Assert.AreEqual("Track: English / HEVC / 720P / HDR", result);
+
+ // Act
+ result = FfmpegBuilderSetTrackTitles.FormatTitle(formatter, separator, language, codec,
+ resolution: resolution, dynamicRange: "SDR");
+
+ // Assert
+ Assert.AreEqual("Track: English / HEVC / 720P / SDR", result);
+ }
+
[TestMethod]
public void FormatTitle_Video_PixelFormat()
{