Edición de video en MPC usando sombreadores

Hay una tarea: cambiar el video "sobre la marcha" durante la reproducción, intercambiar las partes derecha e izquierda. No reflexionar, es decir, cambiar, es decir corta la imagen en dos partes e intercambialas. Por supuesto, puede hacerlo utilizando un servidor de trama como AviSynth , pero ya no está "sobre la marcha": debe escribir un script para cada archivo de video. Quiero hacerlo rápido y sin esfuerzo.

En un higo? Para que el curso de conferencias sobre aprendizaje automático de Yandex sea más conveniente para la visualización. El profesor señala los puntos de la presentación en vivo, y tienes que saltar constantemente a través de la pantalla con los ojos para comprender de qué se trata:

imagen

Solución


Utilizamos la herramienta de sombreado disponible en Media Player Classic . En el conjunto estándar hay varios sombreadores listos para editar imágenes: "Relieve", "Escala de grises", "16-235 a 0-255" y similares. No lo necesitamos allí, así que creamos un nuevo sombreador (un pequeño programa en el lenguaje HLSL ):

sampler s0 : register(s0); float4 main(float2 tex : TEXCOORD0) : COLOR { // swapLine 0.5 = in the middle float swapLine = 1082.0 / 1920.0; tex.x = (tex.x + swapLine) % 1.0; float4 c0 = tex2D(s0, tex); return c0; } 

Lo guardamos en la carpeta \ Shaders del reproductor multimedia (por ejemplo, C: \ Archivos de programa \ MPC-HC \ Shaders) con el nombre Shift.hlsl . A continuación, vaya a la configuración de Media Player Classic ( Opciones / Reproducción / Sombreadores ) y agregue el nuevo sombreador de sombreadores a la lista de sombreadores de pre-cambio de tamaño activo .

Este método de procesamiento de video no carga la CPU, ya que todo el trabajo lo realiza la tarjeta gráfica, en cualquier caso, si es real y no emulada.

¿Qué pasa, Barimore?


Este es un sombreador de píxeles que debería generar el color de un punto dependiendo de las coordenadas que se pasan a través del parámetro tex . La variable s0 contiene la textura con el cuadro actual del video.

La nueva coordenada horizontal se calcula como el resto del módulo de división 1 de la suma de la coordenada actual y el desplazamiento de la línea de intercambio . Por lo tanto, movemos el punto hacia la derecha y lo reorganizamos hacia el lado izquierdo cuando va más allá de las dimensiones.

Finalmente, el comando tex2D (s0, tex) devuelve el color del punto con la coordenada deseada del marco original.

PS


Source: https://habr.com/ru/post/es434856/


All Articles