@ctrl/video-filename-parser
Version:
A radarr style release name parser
46 lines (45 loc) • 1.96 kB
JavaScript
export var AudioCodec;
(function (AudioCodec) {
AudioCodec["MP3"] = "MP3";
AudioCodec["MP2"] = "MP2";
AudioCodec["DOLBY"] = "Dolby Digital";
AudioCodec["EAC3"] = "Dolby Digital Plus";
AudioCodec["AAC"] = "AAC";
AudioCodec["FLAC"] = "FLAC";
AudioCodec["DTS"] = "DTS";
AudioCodec["DTSHD"] = "DTS-HD";
AudioCodec["TRUEHD"] = "Dolby TrueHD";
AudioCodec["OPUS"] = "Opus";
AudioCodec["VORBIS"] = "Vorbis";
AudioCodec["PCM"] = "PCM";
AudioCodec["LPCM"] = "LPCM";
})(AudioCodec || (AudioCodec = {}));
const audioCodecPatterns = [
{ name: 'dolby-atmos', codec: AudioCodec.EAC3, regex: /\bDolby[-_. ]?Atmos\b/i },
{ name: 'eac3', codec: AudioCodec.EAC3, regex: /\b(?:EAC3|DDP(?:\d(?:[.\s-]?\d)?)?|DD\+)\b/i },
{ name: 'truehd', codec: AudioCodec.TRUEHD, regex: /\bTrue-?HD\b/i },
{
name: 'dolby',
codec: AudioCodec.DOLBY,
regex: /\b(?:Dolby-?Digital|Dolby|DD(?:\d(?:[.\s-]?\d)?)?|AC3D?)\b/i,
},
{ name: 'dts-hd', codec: AudioCodec.DTSHD, regex: /\b(?:DTS-?HD|DTS-?MA|DTS-X)\b/i },
{ name: 'dts', codec: AudioCodec.DTS, regex: /\bDTS\b/i },
{ name: 'aac', codec: AudioCodec.AAC, regex: /\bAAC(?=(?:\d(?:[.\s]?\d)?)?(?:ch)?\b)/i },
{ name: 'flac', codec: AudioCodec.FLAC, regex: /\bFLAC\b/i },
{ name: 'mp3', codec: AudioCodec.MP3, regex: /\b(?:LAME(?:\d)+-?(?:\d)+|mp3)\b/i },
{ name: 'mp2', codec: AudioCodec.MP2, regex: /\bmp2\b/i },
{ name: 'lpcm', codec: AudioCodec.LPCM, regex: /\bLPCM\b/i },
{ name: 'pcm', codec: AudioCodec.PCM, regex: /\bPCM\b/i },
{ name: 'opus', codec: AudioCodec.OPUS, regex: /\bOpus\b/i },
{ name: 'vorbis', codec: AudioCodec.VORBIS, regex: /\bVorbis\b/i },
];
export function parseAudioCodec(title) {
for (const { codec, regex } of audioCodecPatterns) {
const result = regex.exec(title);
if (result) {
return { codec, source: result[0] };
}
}
return {};
}