Я нашел оба этих удивительных ответа на Superuser: один для преобразования серии изображений в видео с перекрестным слиянием между ними, а другой для преобразования видео в высококачественный GIF. Мой дополнительный вопрос к обоим из них: как мне сделать это одной командой для нескольких изображений (может быть 3 изображения или 20).

@LordNeckbeard и другие суперпользователи ffmpeg, вы можете мне помочь?

Вот ответы, которые помогли до сих пор:

Изображения для видео с перекрестным растворением:https://superuser.com/a/834035/523746

Видео в Gif:https://superuser.com/a/556031/523746

1 ответ1

1

Это, конечно, возможно, но команды не будут короткими. Адаптировано из примера кроссфейдера из « Создание видео с 5 изображениями с эффектом постепенного исчезновения» в ffmpeg.

1. Создать палитру

Использование фильтра palettegen создаст пользовательскую репрезентативную палитру, которая будет использоваться paletteuse для создания GIF.


Пример масштабированной палитры от palettegen.

ffmpeg \
-loop 1 -t 1 -i 001.png \
-loop 1 -t 1 -i 002.png \
-loop 1 -t 1 -i 003.png \
-loop 1 -t 1 -i 004.png \
-loop 1 -t 1 -i 005.png \
-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,fps=10,scale=320:-1:flags=lanczos,palettegen[v]" \
-map "[v]" palette.png

2. Создать GIF

кроссфейд zample

ffmpeg -loop 1 -t 1 -i 001.png -loop 1 -t 1 -i 002.png -loop 1 -t 1 -i 003.png -loop 1 -t 1 -i 004.png -loop 1 -t 1 -i 005.png -i palette.png \
-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,fps=10,scale=320:-1:flags=lanczos[c];[c][5:v]paletteuse[v]" \
-map "[v]" out.gif

Что изменить

  • -t контролировать продолжительность каждого изображения.
  • смешать значение фильтра , чтобы контролировать продолжительность перекрестной регулировки .
  • Фильтр fps для управления частотой кадров GIF (чем ниже скорость, тем меньше размер файла, но более резким; чем выше, тем лучше будет выглядеть).
  • масштаб, чтобы изменить размер кадра GIF.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .