
Я пробовал FFmpeg по всем обучающим материалам, которые смог найти в Интернете, и немного озадачен тем, как объединить эффект масштабирования и панорамирования с плавным появлением и исчезновением серии изображений.
После объединения фрагментов найденных мной примеров я пришел к следующему результату, но, похоже, результат, который я получаю, последовательный, а не такой, каким я его себе представлял.
Буду признателен за любые подсказки, которые укажут мне правильное направление.
ffmpeg \
-loop 1 -t 5 -i input/slideshow/img0001.jpeg
-loop 1 -t 5 -i input/slideshow/img0002.jpeg \
-loop 1 -t 5 -i input/slideshow/img0003.jpeg \
-loop 1 -t 5 -i input/slideshow/img0004.jpeg \
-filter_complex \
"[0:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=out:st=4:d=1[v0]; \
[1:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
[2:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
[3:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
[v0][v1][v2][v3]concat=n=4:v=1:a=0,format=yuv420p[v]" -map "[v]" -s "800x450" -t 40 output/out_fade.mp4
решение1
Сочетание зума с затуханиемffmpeg
Приведенный вами пример ffmpeg
на самом деле работал с очень небольшими изменениями (сохранение -loop
вызвало ошибку сегментации: " Error in 'ffmpeg': double free or corruption (!prev): 0x0000000008dffa00
").
Итак, у нас есть:
ffmpeg \ -т 5 -и 1.jpg \ -т 5 -и 2.jpg \ -т 5 -и 3.jpg \ -т 5 -и 4.jpg \ -filter_complex \ "[0:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=out:st=4:d=1[v0]; \ [1:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \ [2:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \ [3:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \ [v0][v1][v2][v3]concat=n=4:v=1:a=0,format=yuv420p[v]" -map "[v]" -s "800x450" -t 40 ./out_fade.mp4
Пример вывода:
Качество картофеля - мне нужно лучше разобраться с gif
оптимизацией! Артефакты и искажения являются результатом попытки получить размер файла < 2 МБ и отсутствуют в исходном видеовыходе - этого должно быть достаточно, чтобы дать вам представление о том, подходит ли это для вашего варианта использования. Изображения мои собственные.
(дополнительный)Использование разнообразных или произвольных переходов
добавлено на основе комментариев
Даже с этим минимальным примером, он filtergraph
становится довольно сложным довольно быстро, и утомительно что-то менять. Другая библиотека может подойти лучше.
МЛТ / РАСПЛАВ
Например,MELT
для MLT Frameworkможет сделать:
Melt был разработан как тестовый инструмент для фреймворка MLT. Его можно рассматривать как мощный, хотя и несколько непонятный, многодорожечный видеоредактор, ориентированный на командную строку.
и часто предлагается.
MoviePy
Однако,MoviePy(Страница GitHub) может подойти вам больше, так как она немного более лаконична и (я бы сказал) более удобна для пользователя, насколько это вообще возможно для командного редактора видео.
Вас, вероятно, больше всего заинтересуют разделы, посвященныекомпозицияипереходы/эффекты
Я предлагаю два выше, основываясь на собственном опыте попыток вклиниться в переходы с помощью ffmpeg
; это выполнимо и способно производить некоторые очень приличные эффекты, но боль того не стоит. Скрипт выше должен ответить на ваш вопрос о непрерывном увеличении с плавным увеличением/уменьшением.