Создание видео с 5 изображениями с эффектом fadeIn / out в ffmpeg

С 5 изображениями я должен создать видео 60 секунд в ffmpeg, каждое изображение должно отображаться в течение 15 секунд. Через 15 секунд первое изображение должно исчезнуть, и второе изображение должно исчезнуть, после того, как второе изображение должно исчезнуть, третье изображение должно исчезнуть в .etc. Прочтите, как я могу достичь этого, используя команды ffmpeg.

Погружение в черный

Пример затухания

Это не так тривиально, как вы, вероятно, ожидаете, но это определенно возможно. Пример, где каждое изображение отображается в течение 5 секунд, и каждый из них имеет затухание, которое длится 1 секунду.

ffmpeg \ -loop 1 -t 5 -i input0.png \ -loop 1 -t 5 -i input1.png \ -loop 1 -t 5 -i input2.png \ -loop 1 -t 5 -i input3.png \ -loop 1 -t 5 -i input4.png \ -filter_complex \ "[0:v]fade=t=out:st=4:d=1[v0]; \ [1:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \ [2:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \ [3:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \ [4:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v4]; \ [v0][v1][v2][v3][v4]concat=n=5:v=1:a=0,format=yuv420p[v]" -map "[v]" out.mp4 

Используемые опции и фильтры:

  • -t чтобы установить продолжительность в секундах каждого входа.

  • fade исчезают и исчезают. d – длительность затухания. Когда он начинается.

  • concat для объединения (или объединения) каждого изображения.

  • format для вывода схемы субсэмплирования цветности, которая совместима с игроками, не поддерживающими FFmpeg, при кодировании с помощью libx264 (по умолчанию для выхода MP4, если он поддерживается вашей сборкой).

Crossfade

Пример кроссфейда

Использование ffmpeg

Необработанный пример с использованием фильтра blend . Crossfade устанавливается на 0,5 секунды.

 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,format=yuv420p[v]" -map "[v]" out.mp4 
  • Вероятно, вы можете устранить «прокладки» изображения, используя более подходящее выражение в blend .

Использование melt

Использование melt из MLT Multimedia Framework может быть проще для этой задачи:

 melt -verbose \ -profile atsc_720p_25 \ 001.png out=50 \ 002.png out=75 -mix 25 -mixer luma \ 003.png out=75 -mix 25 -mixer luma \ 004.png out=75 -mix 25 -mixer luma \ 005.png out=75 -mix 25 -mixer luma \ -consumer avformat:output.mp4 vcodec=libx264 an=1 
  • Используйте профиль, который соответствует вашим входным файлам. Вы можете перечислить профили с профилями melt -query profiles и получить информацию о конкретном профиле, таком как melt -query "profile=atsc_720p_25" .

  • out устанавливает продолжительность каждого изображения. Значение находится в кадрах. В этом примере используется профиль, который устанавливает частоту кадров 25, поэтому 25 кадров равны 1 секунде.

  • mix устанавливает длительность выцветания. Значение находится в кадрах.

  • mixer устанавливает тип смеси.

  • Для получения дополнительной информации см. Документацию MLT и документацию о расплавлении .

Я написал общий сценарий bash, который берет путь к папке изображений и выводит видео с кроссфейдом с ffmpeg:

https://gist.github.com/anguyen8/d0630b6aef6c1cd79b9a1341e88a573e

Скрипт по существу смотрит на изображения в папке и выводит команду, похожую на ответ от @LordNeckbeard выше, и выполняет эту команду. Этот скрипт помогает, когда у вас много изображений в папке и вы не хотите вручную вводить команду с депрессией.

  • Почему первое изображение меняется так быстро при создании видео с изображений через FFmpeg?
  • Gpaste получить как STDIN для youtube-dl
  • Вырезать последние 30 секунд концы видео с помощью ffmpeg в пакетном файле в Windows
  • Как добавить мой логотип в течение первых 30 секунд в видео с помощью ffmpeg?
  • Ffmpeg приостанавливает видео каждые 10 секунд в течение 3 секунд
  • Может ли FFmpeg использоваться в качестве библиотеки вместо автономной программы?
  • FFMPEG конвертирует flv в mp4 без потери качества
  • Как сохранить аудиофайлы asf / asx / mms на диск (предыдущие предложения не работают)
  • Видео, созданное с помощью изображений, воспроизводится только в VLC, но нет других игроков
  • Как перевести опции HandbrakeCLI в опции FFmpeg?
  • Неизвестный кодер 'libmp3lame' в Ubuntu 14.04
  • Давайте будем гением компьютера.