Ffmpeg может манипулировать любым цветом и его оттенками. Цвет в командную строку подается в виде 0x[номер цвета]. Номер цвета можно определить в любом графическом редакторе или на специальных сайтах наподобие такого, где можно загрузить один кадр и выбрать цвет.

Зеленый фон нашего видео очень неравномерный, постараемся выбрать тот зеленый цвет, оттенки которого присутствуют в кадре.

Так же понадобиться фон для нового видео. Фоном может служить картинка, того же размера, что и видео. Так же может быть другое видео, имеющие одинаковые свойства с обрабатываемым видео. Возьмем просто красный фон.

Командная строка выглядит так:

ffmpeg -i adom.png -i dog.mp4 -filter_complex «[1:v:0]chromakey=0x00e18a:0.07:0.3[vuhod1];[0:v:0][vuhod1]overlay[vuhod2]»  -map «[vuhod2]»  dog_ch_0.07_0.3.mp4

-i adom.png — фоновое изображение. Вход номер 1.

-i dog.mp4 видео с которого мы хотим убрать зеленый фон. Вход номер 2.

-filter_complex запускаем фильтры.

Дальше идут параметры фильтров:

«[1:v:0]chromakey=0x00e18a:0.07:0.3[vuhod1];[0:v:0][vuhod1]overlay[vuhod2]» 

[1:v:0] – указ для ffmpeg взять нулевой поток (а это всегда видео) из входа номер 1 (-i dog.mp4). Напоминание, нумерация входов начинается с нуля.

00e18a номер нашего выбранного цвета. К нему добавляем chromakey=0x.

0.07similarity, цифра в процентах, назначает отклонение от выбранного цвета. Нужно, чтобы выбрать оттенки близкие к цвету 00e18a. Параметр изменяется от 0.01 (соответствует выбранному цвету) до 1 (обозначает просто все цвета).

0.3blend, заведует полупрозрачностью пикселей. 0.0 делает пиксели либо полностью прозрачными, либо полностью не прозрачными. Чем выше значение, тем больше пиксели становятся прозрачными или цвет будет приближаться к основному.

Эти цифры подбираются опытным путем.

[vuhod1] имя, которое мы даем на выходе из этого фильтра. Пригодится для следующего действия – наложение (overlay).

[0:v:0][vuhod1]overlay[vuhod2] – фильтр наложения

[0:v:0] — с нулевого входа (-i adom.png) взять нулевой поток (видео), в нашем случае красный кадр.

[vuhod1] взять результат работы фильтра chromakey, которому мы присвоили это имя.

overlay[vuhod2] – наложить один на другой и выходу присвоить имя vuhod2.

-map «[vuhod2]»  dog_ch_0.07_0.3.mp4 – в конечное видео по имени dog_ch_0.07_0.3.mp4 запустить результат по имени vuhod2.

В этом примере отсутствует звук. Если нужен звук в конечный файл надо указать из какого потока его взять.