Oppure potevi semplicemente fare che una volta arrivati a 1440x810, le risoluzioni superiori venivano confrontate con un downscale sempre a 1440xN; soluzione migliore, in quanto upscalare più volte, seppur con lo stesso algoritmo, porta a risultati differenti, per cui rende più complesso trovare la risoluzione originale.
Contando che i .ts 1440x1080 sono già downscalati dall'upscale 1920x1080 iniziale, questo significa che introduci effettivamente un altro resize che ti allontana ulteriormente da una buona comprensione della res originale, più di quanto non faccia già l'avere un .ts con tutte le sminchiate del caso.
In pratica, quindi, secondo me conviene implementare questo metodo generico:
CODICE
[...]
function ResFinder(clip clp, int Res, int "Kernel", int "Mode", float "PAR")
[...]
PAR = Default(PAR,1)#per i 1440x1080 si usa 1.33, in quanto per portare a 16:9 un 4:3 ci vuole un PAR di 4:3
[...]
ResWidth = Res*clp.Width()*PAR/clp.Height()
ResWidth = (ResWidth > clp.Width()) && (Res < clp.Height()) ? clp.Width : ResWidth
[...]
Che ho scritto su due piedi senza controllare, per cui magari scaga.
Attualmente la parte
&& (Res < clp.Height()) è superflua ed è lì solo in attesa che qualcuno trovi un modo decente per implementare la ricorsione nello script.