с 5 изображений, которые я должен создать видео 60 секунд в ffmpeg, каждое изображение должно отображаться в течение 15 секунд. после 15 секунд, первое изображение должно исчезать и 2 изображения исчезать, после этого 2-ое изображение должно исчезать, 3-й изображение должно исчезать..п. Пожалуйста, направьте меня, как я могу достичь этого с помощью команд ffmpeg.
Создание видео с 5 изображениями с эффектом fadeIn / out в ffmpeg
2 ответа
Dip to black
простой пример
пример, где каждое изображение отображается в течение 5 секунд и исчезают, что длится 1 секунду. каждый входной сигнал изображения имеет такие же ширину, высоту, и коэффициент сжатия образца. если они различаются по размеру см. Пример #3.
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
аудио
то же, что и выше, но со звуком:
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 \
-i audio.m4a \
-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]" -map 5:a -shortest out.mp4
для входных изображений с переменным или произвольным размеры
как в первом примере, но с входными изображениями, которые различаются по ширине и высоте. Они будут проложены для приспособления внутри коробка 1280x720:
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]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=out:st=4:d=1[v0]; \
[1:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
[2:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
[3:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
[4:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,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
- смотрите примеры в изменение размера видео, чтобы вписаться в статического размера игрока если вы хотите обрезать (заполнить экран) вместо pad (letterbox/pillarbox), или если вы хотите предотвратить масштабирование.
параметры и фильтры использовать:
-t
установить длительность в секундах каждого входа.scale
С pad для приспособления входных изображений в конкретных, одинакового размера (в Примере #3).fade
исчезать и выход.d
продолжительность исчезать.st
, когда он начинается.concat
объединить (или "присоединиться") каждый изображение.format
для вывода схемы цветности, совместимой с проигрывателями, не основанными на FFmpeg, при кодировании с libx264 (кодировщик по умолчанию для вывода MP4, если он поддерживается вашей сборкой).
Кроссфейд
используя 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 и Документация По Расплаву для получения дополнительной информации.
Я написал сценарий general bash, который берет путь к папка изображений, и выводит кроссфейд видео с ffmpeg:
https://gist.github.com/anguyen8/d0630b6aef6c1cd79b9a1341e88a573e
скрипт, по сути, смотрит на изображения в папке и выводит команду, похожую на ответ @LordNeckbeard выше, и выполняет команду. Этот скрипт помогает, когда у вас есть много изображений в папке и не хочу вручную введите депрессивно длинную команду.
Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]