|
CITAZIONE (Khanattila @ 9/12/2013, 12:24) CITAZIONE (Liquid Dr4k3 @ 9/12/2013, 11:53) Sorry, my bad, l'avevo intesa diversamente. Guarda, tempo fa avevo provato ad aggiungere una flag per fare in modo che iterasse automaticamente da una risoluzione di partenza a una di destinazione per ritrovarsi il file scritto bello e pronto. A quel modo, se uno si ritrova senza avere la minima idea di quale possa essere la risoluzione, non se le deve passare tutte a mano prima di avere il file scritto. Il problema è che, da quanto ho capito, su avisynth l'unico modo per iterare è la ricorsione, non esattamente gentile con la memoria. Infatti dopo tipo 15-20 iterazioni mi collassava la memoria e cagava errori random. Quindi se avessi idee sul come implementare una cosa simile penso potrebbe tornare molto utile per la scrittura del file (non so se si è capito, ma sono tutto tranne che un programmatore). Avisynth non ha chiamate per liberare memoria, o almeno io non le ho trovate. Si possono fare dei cicli creando dei blocchi con ForNext e poi facendoli valutare. Per risparmiare memoria si potrebbero usare delle variabili globali e cercare di minimizzare tutto il resto. Poi per quanto riguarda la vera e propria detenzione credo che si debba trovare qualcosa di meglio dell'errore medio. Sarebbe interessante implementare la varianza standard ma le Runtime functions oltre la mediana non vanno. Anche un dato come la varianza sarebbe significativo, ma ti assicuro che con il lut anche il valor medio può andare. Infatti senza di quello per la risoluzione esatta hai una diminuzione del valor medio di circa un 15-20% rispetto ai valori vicini, mentre con il lut aggiunto da chibi si riduce a circa 1/5 del valore per poi risalire. Quindi è come se si andasse proprio ad incrementare la varianza degli errori medi rendendoli più significativi. BTW, se ci fosse il modo di implementare la varianza standard al livello di detenzione sarebbe sicuramente un'informazione utile. CITAZIONE (Khanattila @ 9/12/2013, 12:56) ResWidth = Res*clp.Width()/clp.Height().
Senza che lo gestisci dopo possiamo fare qualcosa di più raffinato per avere un'approssimazione ottimale. width = Int((clip.Height()*AR / 2) + 0.5))*2
Aggiungerei un Assert( 0 == height % 2) per verificare che la height sia corretta. Diffidare sempre dell'utente. Ok, appena torno vedo come si possono inserire, thx ^^ EDIT. Se metto ResWidth = Int(((Res*clp.Width()/clp.Height())/2)+0.5)*2 al posto di ResWidth = Res*clp.Width()/clp.Height() andrei a considerare solo le width Mod2, invece in alcuni casi mi interessa proprio che non sia Mod2 in modo da andare a vedere le 2 possibili approssimazioni della width che valore mi danno (infatti, ad esempio, per SnK proprio una di queste due approssimazioni era la risoluzione che stavo cercando). Edited by Liquid Dr4k3 - 9/12/2013, 14:16
|