@ctrl/video-filename-parser
Version:
A radarr style release name parser
40 lines (39 loc) • 1.46 kB
JavaScript
import { parseSource, Source } from './source.js';
export var Resolution;
(function (Resolution) {
Resolution["R2160P"] = "2160P";
Resolution["R1080P"] = "1080P";
Resolution["R720P"] = "720P";
Resolution["R576P"] = "576P";
Resolution["R540P"] = "540P";
Resolution["R480P"] = "480P";
})(Resolution || (Resolution = {}));
const resolutionPatterns = [
{
resolution: Resolution.R2160P,
regex: /2160p|4k[-_. ](?:UHD|HEVC|BD)|(?:UHD|HEVC|BD)[-_. ]4k|\b(4k)\b|COMPLETE.UHD|UHD.COMPLETE/i,
},
{ resolution: Resolution.R1080P, regex: /(1080(i|p)|1920x1080)(10bit)?/i },
{ resolution: Resolution.R720P, regex: /(720(i|p)|1280x720|960p)(10bit)?/i },
{ resolution: Resolution.R576P, regex: /576(i|p)/i },
{ resolution: Resolution.R540P, regex: /540(i|p)/i },
{ resolution: Resolution.R480P, regex: /480(i|p)|640x480|848x480/i },
];
export function parseResolution(title, precomputedSource) {
for (const { resolution, regex } of resolutionPatterns) {
const match = regex.exec(title);
if (match) {
return {
resolution,
source: match[0],
};
}
}
// Fallback to guessing from some sources
// Make safe assumptions like dvdrip is probably 480p
const source = precomputedSource ?? parseSource(title);
if (source.includes(Source.DVD)) {
return { resolution: Resolution.R480P };
}
return {};
}