problema ffmpeg filter_complex

Estoy tratando de lograr un efecto complejo con ffmpeg, pero parece que estoy fallando en la sintaxis de -filter_complexalgún lugar.

El objetivo es capturar parte de la pantalla (con el dispositivo de presentación directa UScreenCapture) donde muestro dos imágenes una al lado de la otra (llamadas [bg]y [key], o [rgb]y [alpha]en la cadena de filtros). A la izquierda está la imagen en sí, a la derecha su canal alfa, que se muestra en blanco y negro. Luego quiero componer eso encima de otra entrada (alguna entrada de video de un archivo u otro dispositivo de captura... pero un archivo en este caso, llamado [video]en la cadena de filtros).

Para componer los tres juntos, primero mezclo 'multiplicar' el alfa con el video, cambiando a negro todo lo que esté fuera del alfa blanco (volcado en [out1]), y mezclo 'multiplicando' el fondo de la imagen con el alfa negativo (volcado en [out2]). Para finalizar la cadena, agrego las dos salidas con la adición del modo de fusión... y las vuelvo a una tubería

En teoría, debería funcionar, pero sigue quejándose de que el especificador de flujo 'alfa' no coincide con ningún flujo:

ffmpeg -v debug -f dshow -i video=UScreenCapture -i chroma.mp4 -filter_complex \
"[0:v]split[bg][key]; \
 [bg]crop=720:576:0:0, format=gbrap,setsar=0:1[rgb]; \
 [key]crop=720:576:720:0,format=gray8,setsar=0:1,scale=720:576[alpha]; \
 [1:v]scale=720:576,format=yuv420p,setsar=0:1[video]; \
 [alpha]negate[neg_alpha]; \
 [video][neg_alpha]blend=all_mode='multiply':all_opacity=1[masked_video]; \
 [rgb][alpha]blend=all_mode='multiply':all_opacity=1[masked_3d]; \
 [masked_video][masked_3d]blend=all_mode='addition':all_opacity=1[out]" \
-map "[out]"-c:v mpeg2video -f avi - | ffplay -
Debe recortar su gráfico de filtro, si es posible, para mantener solo los filtros mínimos necesarios para que surja el problema. También debe incluir la salida completa de la consola de su comando.
Agregue un espacio antes de -c:v mpeg2video
¿Has probado para ver que esto funciona?

Respuestas (1)

filgergraph como se describe no puede funcionar, no puede usar [alfa] dos veces, debe dividirlo:

[0:v]split[bg][key]; [bg]crop=720:576:0:0, format=gbrap,setsar=0:1[rgb]; [key]crop=720:576:720:0,format=gray8,setsar=0:1,scale=720:576,split[alpha2][alpha]; [1:v]scale=720:576,format=yuv420p,setsar=0:1[video]; [alpha]negate[neg_alpha]; [video][neg_alpha]blend=all_mode='multiply':all_opacity=1[masked_video]; [rgb][alpha2]blend=all_mode='multiply':all_opacity=1[masked_3d]; [masked_video][masked_3d]blend=all_mode='addition':all_opacity=1