ffmpeg filter_complex проблема

Я пытаюсь добиться сложного эффекта с помощью ffmpeg, но, похоже, я где- -filter_complexто ошибаюсь в синтаксисе.

Цель состоит в том, чтобы захватить часть экрана (с помощью устройства прямого показа UScreenCapture), где я показываю два изображения рядом (называемые [bg]и [key] или [rgb]и [alpha]в цепочке фильтров). Слева само изображение, справа его альфа-канал, показанный в черно-белом цвете. Затем я хочу скомпоновать это поверх другого входа (какого-то видеовхода из файла или другого устройства захвата... но в данном случае файла, вызываемого [video]в цепочке фильтров).

Чтобы составить три вместе, сначала я смешиваю «умножение» альфы с видео, превращая в черное все, что находится за пределами белой альфы (сбрасывается в [out1]), и смешиваю «умножаю» фон изображения с отрицательной альфой (сбрасывается в [out2]). Чтобы закончить цепочку, я добавляю два выхода с добавлением режима наложения... и выгружаю их в трубу.

Теоретически это должно работать, но он продолжает жаловаться на то, что спецификатор потока 'alpha' не соответствует потоку:

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 -
Вы должны обрезать свой filtergraph, если это возможно, чтобы оставить только минимальное количество фильтров, необходимых для возникновения проблемы. Вы также должны включить полный консольный вывод вашей команды.
Добавьте пробел перед -c:v mpeg2video
Вы проверили, чтобы убедиться, что это работает?

Ответы (1)

filgergraph, как описано, не может работать, вы не можете использовать [альфа] дважды, вам нужно разделить его:

[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