Cómo mejorar la detección de escenas con SceneDetect

Si estás trabajando con herramientas como PySceneDetect, es probable que hayas notado que a veces la detección de escenas no es perfecta. ¿Cómo logras obtener cortes más precisos y evitar esos falsos positivos? La clave está en entender cómo funciona el software y ajustar los parámetros correctamente.

Esquema técnico mostrando cómo se procesan los videos con SceneDetect.
Diagrama del flujo de trabajo para optimizar la detección de escenas en PySceneDetect.

Entendiendo las limitaciones de la detección

Lo primero es aclarar que SceneDetect no «entiende» escenas narrativas. Lo que detecta son cambios visuales entre fotogramas. Por eso funciona muy bien para cortes bruscos, pero puede fallar con:

  • Fundidos a negro o disolvencias.
  • Cambios lentos de plano o mucho movimiento de cámara.
  • Material comprimido con artefactos visuales.

Técnicas para mejorar la detección

Aquí están los ajustes más efectivos que puedes aplicar:

1. Probar distintos detectores

No te quedes solo con el detector por defecto, detect-content. Existen otras opciones como detect-threshold, ideal para detectar fundidos a negro, o detect-adaptive, que ajusta dinámicamente el umbral y suele funcionar mejor en material difícil. Muchas veces una combinación de ambos da mejores resultados.

2. Ajustar el umbral (threshold)

Este es uno de los parámetros más importantes. Valores bajos (10-20) aumentan la sensibilidad, mientras que valores altos (30-50) reducen los falsos positivos. Si detectas demasiados cortes extraños, aumenta el umbral; si pierdes cortes reales, bájalo.

3. Usar estadísticas para calibrar

Puedes generar un archivo CSV con la opción save-stats stats.csv. Al inspeccionar los valores de content_val, podrás identificar claramente dónde ocurren los cortes reales y basar tu configuración en datos, no solo en prueba y error.

4. Reducir falsos positivos por movimiento

Si el video tiene explosiones, flashes o movimientos de cámara, usa la opción --min-scene-len 2s. Esto evita que el programa detecte microescenas accidentales.

5. Mejorar la precisión del frame exacto

Para analizar a resolución completa y evitar errores en cortes muy finos, usa --downscale 1. Es más lento, pero garantiza mayor precisión.

Cortes por copia vs. recodificación

Es importante entender si el programa genera nuevos keyframes automáticamente. Si SceneDetect solo te entrega una lista de escenas en un archivo CSV o EDL, no modifica el video original ni crea keyframes nuevos. Sin embargo, esto cambia dependiendo de cómo proceses los clips después:

  • Corte por copia de flujo (-c copy): Muy rápido y sin pérdida de calidad, pero depende de los keyframes existentes del archivo original.
  • Corte por recodificación (-c:v libx264): Más lento, pero genera nuevos keyframes donde corresponda en el reencodeo.

Ejemplo de comando optimizado

A continuación, la estructura correcta para ejecutar split-video con los parámetros que necesitas:

scenedetect -i video.mp4 -v info --downscale 1 detect-content --threshold 15 --min-scene-len 6s --merge-last-scene split-video -o "D:Scenes" -f "$VIDEO_NAME-Scene-$SCENE_NUMBER"

Recuerda que el orden de los parámetros sí importa: primero las opciones globales, luego el detector y finalmente la acción. Si te aparece un error sobre una opción no encontrada, es posible que estés usando una versión distinta de la herramienta con sintaxis diferente.