elguaxo escribió:roisiano escribió:Pues he estado intentando hacer funcionar el MT, sin éxito.
...
donde la línea 73 del script marras es:
Código: Seleccionar todo
MT("""MCTemporalDenoise(settings="very low",sigma=1,chroma=true,enhance=false,sharp=false)""",threads=4,overlap=16)
Hacer el debug de algo dentro de MT no es fácil porque AviSynth solo escupe un error genérico. El problema de tu línea de comando debe ser que por defecto MCTemporalDenoise utiliza GPU=true, es decir la versión de FFT3DFilter que corre sobre la tarjeta de video y a esta no le gusta MT. Un GPU=false dentro de tus opciones de MCTemporalDenoise seguramente solucione el error. El otro camino sería hacer el prefiltrado por afuera del multithreading con un truquito que Didée nos enseñó aquí:
http://forum.doom9.org/showthread.php?p ... ost1432820 Igualmente si tienes 4 núcleos, la versión normal de FFT3dFilter correrá más rápido que la versión GPU, así antes que el truquito de Didée te aconsejo simplemente utilizar GPU=False.
Diferencias conceptuales entre
SetMTmode y
MT. SetMTmode procesa cuadros enteros y manda uno a un núcleo y otros al resto, etc mientras que MT los parte y a cada núcleo le va tocando una parte de un mismo cuadro.
SetMTmode sería más elegante pero en la práctica suele fallar después de un rato en muchos escenarios. Otra de sus desventajas es que hay que utilizarlo para todo el script o nada. MT por otro lado arranca con el problema que parte los cuadros mientras que un movimiento puede estirarse a lo largo de todo un cuadro, por esto tenemos el parámetro overlap para compensar esta desventaja. Algunos filtros que requieren procesar todo un cuadro, como sería un resize, necesitan tratamiento especial como explican
aquí. Pero la gran ventaja de MT es que lo podemos utilizar solamente en las partes lentas del script y si logramos que funcione, no nos vamos a encontrar con sorpresas de principio a fin del ripeo.
Nada, no había manera:
Ni "cargando" el plugin MT.dll al principio ni "sin cargarlo" funciona.
Cuando pongo la instrucción:
Código: Seleccionar todo
MT("""
MCTemporalDenoise(settings="very low",sigma=1,chroma=true,enhance=false,sharp=false,GPU=false)
""",threads=4, overlap=8)
así escrita, el error me lo da en la línea 60.
Código: Seleccionar todo
avs [error]: MT: âtâBâïâ^é╠Ä└ìsé╔Ä©öséÁé▄éÁé¢üB[
MCTemporalDenoise(settings="very low",sigma=1,chroma=true,enhance=false,sharp=fa
lse,GPU=false)
]
(C:\mi_script.avs, line 60)
x264 [error]: could not open input file `C:\mi_script.avs'
De esas 3, la línea 60 es:
Así pues, probé con:
Código: Seleccionar todo
MT("""
MCTemporalDenoise(settings="very low",sigma=1,chroma=true,enhance=false,sharp=false,GPU=false)
""",threads=0, overlap=8)
Y sí, así funciona. Ignoro el motivo, pero supongo que no reconoce los 4 núcleos, o algo así

.
Eso sí, la codificación es en torno a un 15-20% más lenta que empleando:
Código: Seleccionar todo
MCTemporalDenoise(settings="very low",sigma=1,chroma=true,enhance=false,sharp=false)
Por cierto; tanto con GPU=false como sin ese parámetro, funciona. De hecho, en la prueba que hice es ligerísimamente más rápido sin GPU=false. Lo que no sé es si estoy aprovechando todos los núcleos o no. No entiendo el porqué del problema con threads=4

.
Pongo cómo queda el script completo por si a alguien le sirve de ayuda. No es necesario "cargar" MT.dll:
Código: Seleccionar todo
LoadPlugin("C:\PROGRA~2\GORDIA~1\DGMPGDec\DGDecode.dll")
Import("C:\Program Files (x86)\AviSynth 2.5\plugins\MCTemporalDenoise.v1.4.20.avs")
# SOURCE
mpeg2source("C:\DVD\Pelicula\Pelicula.d2v")
# CROPPING
crop(0,0,716,568)
# Filtrado muy muy suave:
MT("""
MCTemporalDenoise(settings="very low",sigma=1,chroma=true,enhance=false,sharp=false)
""",threads=0, overlap=8)