Я пытаюсь добиться сложного эффекта с помощью 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 -
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
Логан
пользователь6898
Доктор Мэйхем