# 1 Для одновременного затухания аудио входа / выхода:
ffmpeg -i clip.mp4 -vf 'fade=in:0:30,fade=out:960:30'
-af 'afade=in:st=0:d=1,afade=out:st=32:d=1'
-c:v libx264 -crf 22 -preset veryfast fadeInOut.mp4
Время затухания в секундах .
# 2 автоматически? Нет. Но смотрите обходной путь ниже
Вы можете сначала запустить ffprobe, чтобы получить длительность.
ffprobe -i clip.mp4 -show_entries stream=codec_type,duration -of compact=p=0:nk=1
Вы получите что-то вроде этого:
video|13.556000
audio|13.816000
Затем вы можете использовать вышеупомянутое, чтобы разместить ваши угасания. Эти времена в секундах.
Временное решение
ffmpeg -i clip.mp4 -sseof -1 -copyts -i clip.mp4 -filter_complex
"[1]fade=out:0:30[t];[0][t]overlay,fade=in:0:30[v];
anullsrc,atrim=0:2[at];[0][at]acrossfade=d=1,afade=d=1[a]"
-map "[v]" -map "[a]" -c:v libx264 -crf 22 -preset veryfast -shortest fadeInOut.mp4
FFmpeg имеет sseof
опцию, которая позволяет искать вход с конца. Мы можем использовать это для достижения нашей цели. Таким образом, мы вводим данные дважды, причем во второй раз принимаем только последнюю секунду. Мы говорим FFmpeg сохранять временные метки, чтобы ffmpeg сохранял временную позицию этой хвостовой части.
Мы применяем замирание к этому хвосту , а затем наложить результат на полный ввод. Поскольку они представляют собой один и тот же мультимедийный файл, передний план полностью покрывает фон, и поскольку он copyts
был применен, наложение происходит на соответствующий идентичный кадр на входе фона.
Для аудио мы создаем пустой фиктивный звук длительностью 2 секунды, а затем применяем к этому фиктивному аудио кроссфейд из основного аудио. Так как 2-й звук пустой, это, по сути, затухание для основного входа. -shortest
Добавляют , чтобы оставить из частей фиктивного аудио после того , как произошла склейка.