![Как передать аргументы в фильтр смешивания FFMPEG](https://rvso.com/image/1493956/%D0%9A%D0%B0%D0%BA%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%82%D1%8C%20%D0%B0%D1%80%D0%B3%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D0%B2%20%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%20%D1%81%D0%BC%D0%B5%D1%88%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%20FFMPEG.png)
Я пытаюсь объединить 5 изображений и создать мигающее видео после их объединения. Я успешно применил к ним эффект постепенного появления и исчезновения. FFMPEG для меня пока еще довольно новый.
Вот команда, которую я выполнил:
"-loop 1 -i "+path+"images_001.jpg " +
"-loop 1 -i "+path+"images_002.jpg " +
"-loop 1 -i "+path+"images_003.jpg " +
"-loop 1 -i "+path+"images_004.jpg " +
"-loop 1 -i "+path+"images_005.jpg " +
"-filter_complex " +
"[1:v][0:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b1v];" +
"[2:v][1:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b2v];" +
"[3:v][2:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b3v];" +
"[4:v][3:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b4v];" +
"[0:v][b1v][1:v][b2v][2:v][b3v][3:v][b4v][4:v]concat=n=9:v=1:a=0,format=yuv420p[v] -map [v] "+path+"out.mp4"
При выполнении этой команды процесс продолжает работать вечно. Вот мой скриншот этой штуки:
Я знаю, что я упускаю что-то глупое; Поскольку я новичок, ffmpeg
было бы здорово, если бы я мог получить некоторое представление о том, где я здесь ошибаюсь. Что я упускаю?
решение1
После каждого -loop 1
вставьте , -t x
где x — длительность в секундах.
решение2
Ваше выражение для blend не имеет для меня смысла. Что вы хотите сделать? Blend делает что-то вроде этого для каждого пикселя: компонент пикселя = функция(компонент пикселя входа A, компонент пикселя входа B). Так что должна делать ваша функция? Она могла бы сделать (A + B) / 2, что является очень простым случаем...