diff --git a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetTrackTitles.cs b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetTrackTitles.cs index ea957d4a..ab6c0c98 100644 --- a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetTrackTitles.cs +++ b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderSetTrackTitles.cs @@ -254,9 +254,16 @@ public class FfmpegBuilderSetTrackTitles: FfmpegBuilderNode formatter = Replace(formatter, "lang", english); formatter = Replace(formatter, "lang-iso2", iso2); formatter = Replace(formatter, "lang-iso1", iso1); + + var codecCommericalName = GetCodecCommercialName(codec); + formatter = Replace(formatter, "!codec-cc", codecCommericalName.ToLowerInvariant()); + formatter = Replace(formatter, "codec-cc!", codecCommericalName.ToUpperInvariant()); + formatter = Replace(formatter, "codec-cc", codecCommericalName); + formatter = Replace(formatter, "!codec", codec.ToLowerInvariant()); formatter = Replace(formatter, "!codec!", codec); formatter = Replace(formatter, "codec", codec.ToUpperInvariant()); + formatter = Replace(formatter, "default", isDefault ? "Default" : string.Empty); formatter = Replace(formatter, "forced", isForced ? "Forced" : string.Empty); formatter = Replace(formatter, "cc", cc ? "CC" : string.Empty); @@ -344,4 +351,31 @@ public class FfmpegBuilderSetTrackTitles: FfmpegBuilderNode return input; } } + /// + /// Gets the commercial name for a codec. + /// + /// The codec name. + /// The commercial name. + private static string GetCodecCommercialName(string codec) + { + // Convert codec name to uppercase for case-insensitive comparison + return codec.ToUpper() switch + { + "DTS" => "Digital Theater Systems", + "DOLBY DIGITAL" => "Dolby Digital", + "DOLBY DIGITAL PLUS" => "Dolby Digital Plus", + "DOLBY DIGITAL ATMOS" => "Dolby Digital Atmos", + "DOLBY TRUEHD" => "Dolby TrueHD", + "DTS-HD MASTER AUDIO" => "DTS-HD Master Audio", + "PCM" => "Pulse-code Modulation", + "AAC" => "Advanced Audio Coding", + "MP3" => "MPEG-1 Audio Layer III", + "WMA" => "Windows Media Audio", + "FLAC" => "Free Lossless Audio Codec", + "ALAC" => "Apple Lossless Audio Codec", + "VORBIS" => "Vorbis", + _ => codec.ToUpperInvariant() + }; + } + } diff --git a/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_SetTrackTtitlesTests.cs b/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_SetTrackTtitlesTests.cs index 13b9afc6..563927fa 100644 --- a/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_SetTrackTtitlesTests.cs +++ b/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_SetTrackTtitlesTests.cs @@ -54,6 +54,29 @@ public class FFmpegBuilder_SetTrackTtitlesTests Assert.AreEqual("Track: English / AAC / Stereo / Default / 128Kbps / 44.1kHz / CC / SDH", result); } + + [TestMethod] + public void FormatTitle_Codec_CommericalName() + { + // Arrange + string formatter = "Track: lang / codec-cc / channels / default / bitrate / samplerate / cc / sdh / hi"; + string separator = " / "; + string language = "English"; + string codec = "DTS"; + bool isDefault = true; + float bitrate = 128_000; + float channels = 2.0f; + int sampleRate = 44100; + bool isForced = false; + + // Act + string result = FfmpegBuilderSetTrackTitles.FormatTitle(formatter, separator, language, codec, isDefault, bitrate, + channels, sampleRate, isForced); + + // Assert + Assert.AreEqual("Track: English / Digital Theater Systems / Stereo / Default / 128Kbps / 44.1kHz", result); + } + [TestMethod] public void FormatTitle_EmptyFormatter_ReturnsEmptyString() {