Извлечь только часть кадра, которая изменилась - PullRequest
0 голосов
/ 15 сентября 2018

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

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Поскольку вы заявляете, что вы хотите " выводить только часть кадра, которая отличается от последнего кадра ", вам понадобится фильтр 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, то это будет ложно-положительный результат на выходе.

0 голосов
/ 17 сентября 2018

Вы должны сделать некоторые различия пикселей. Это проще сделать с помощью For-loop , проверяющего пиксели обоих растровых изображений (кадров), где 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" отлично работают

...