Можно ли вывести только ту часть кадра, которая отличается от последнего кадра, как изображение png с чем-то вроде ffmpeg?

0
Tobi 15 Сен 2018 в 22:41

2 ответа

Лучший ответ

Поскольку вы заявляете, что хотите « выводить только ту часть кадра, которая отличается от последнего кадра », вам понадобится фильтр tblend.

ffmpeg -i in -filter_complex "format=yuva444p,split[diff][out];[diff]tblend=all_expr='if(eq(A,B),0,A)',geq=lum='p(X,Y)':a='if(eq(lum(X,Y)+cb(X,Y)+cr(X,Y),0),0,255)',alphaextract[diff];[out]trim=start_frame=1[out];[out][diff]alphamerge" -vsync vfr out%d.png

Ограничение состоит в том, что если пиксель изначально равен 0 как в A, так и в B, то это будет ложным срабатыванием на выходе.

1
Gyan 18 Сен 2018 в 09:03

Вам нужно сделать некоторое различие пикселей. Это проще сделать с помощью цикла For , проверяющего пиксели обоих растровых изображений (кадров), где if same color = make transparent in output bitmap и, если значения не совпадают (цвет), то show as white in output bitmap. Это выходное растровое изображение затем может быть закодировано как новый / следующий кадр в выходном видео. Но вы не рассказали нам о своем языке программирования, поэтому никаких дополнительных советов по этому методу ...

Используя только FFmpeg, вы можете попробовать:

ffmpeg -i test1.mp4 -i test2.mp4 -filter_complex "blend=all_mode=difference" -pix_fmt yuv420p -c:v libx264 out_difference.mp4

Для некоторых людей он просто дает зеленый цвет (даже для меня), поэтому, если вы найдете решение этой проблемы (веб-исследование), то это ваше решение. Другие режимы наложения, например "blend=all_mode=screen", работают нормально

0
VC.One 17 Сен 2018 в 01:23