FFmpeg: как заменить цвет фона видео прозрачностью? (при захвате)

Я хочу захватить окно и наложить его на другое видео.

Это моя команда:

ffmpeg -i MainVideo.avi 
-f gdigrab -framerate 25 -video_size 300x200 -i title="MyWindow" 
-filter_complex "[0]setpts=PTS-STARTPTS[b];[b][1:v]overlay=(main_w-overlay_w):main_h-overlay_h[v]"
-map "[v]" -c:v libx264 -r 25  out.mp4

фон моего окна черный.

Как я могу заменить этот черный цвет прозрачностью?

это возможно с помощью ffmpeg? (Я думаю, что это возможно с помощью фильтров хромакея/цветового ключа, но я не уверен и не знаю, как использовать эти фильтры)

Спасибо.

ОБНОВИТЬ:

Предположим, это кадр видео, который я хочу:введите описание изображения здесь

GDIgrab предоставляет RGB-поток, поэтому цветовая клавиша может работать здесь, но если вы поделитесь образцом кадра захвата, тогда я смогу увидеть, возможен ли более эффективный альтернативный метод.
@Mulvya, привет, мой вопрос обновлен.
Смотрите здесь . Но вставьте format=yuv444pфильтр перед geqи вместо 16, возможно, вам придется использовать значение 0 или близкое к 0

Ответы (1)

GDIgrab предоставляет канал RGB, поэтому здесь может работать фильтр цветового ключа.

Пытаться

ffmpeg -i 1.mp4 -f gdigrab -framerate 25 -video_size 300x200 -i title="MyWindow"
-filter_complex
"[1]split[m][a];
 [a]format=yuv444p,geq='if(gt(lum(X,Y),0),255,0)',hue=s=0[al];
 [m][al]alphamerge[ovr];
 [0][ovr]overlay=(main_w-overlay_w):main_h-overlay_h[v]"
-map "[v]" -c:v libx264 -r 25 out.mp4

Возможно, вам придется использовать значение, близкое к 0, если 0 не захватывает всю прозрачную область.

Большое спасибо! , у меня работает с 16 вместо 0. ( ...(X,Y),16),255,0...вместо...(X,Y),0),255,0...
@Gyan Можете ли вы поделиться командой, которая только меняет цвет фона на другой цвет. В моем случае нет масштаба видео, заголовка и т. д.