UNPKG

@ctrl/video-filename-parser

Version:
40 lines (39 loc) 1.46 kB
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 {}; }