# 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
Добавляют , чтобы оставить из частей фиктивного аудио после того , как произошла склейка.
-report
добавленным и поделитесь отчетом.Это ужасный хак, но это может сработать, если все, что вы хотите сделать, это добавить / вывести звук, но не знаете точно, как долго будет длиться клип:
[edit 2019-07-24: обратите внимание, что это решение не подходит для потоковых решений, поскольку требует обработки полной дорожки до того, как первый байт может быть передан в поток]
Другой вариант, который я должен использовать
acrossfade
с тихой дорожкой:источник
Ответ на вопрос 2 - ДА! Я искал ту же функциональность, и в итоге я написал сценарий bash, который запрашивает продолжительность затухания в секундах и вычисляет начальный кадр для затухания:
Затухания требуют повторного кодирования, поэтому использование низкого
crf
значения дляlibx264
обеспечивает высокое качество повторного кодирования. Комментарии должны объяснить все остальное.источник
automatically figure out the duration
используетffprobe
, который устанавливается с помощьюffmpeg
. Кто нибудь говорил о каких-либо ограничениях на количество команд или*nix
? Похоже, что ОП использует версию UNIX. Нет.exe
вffmpeg
команде. Я сам использую то, наOS X
чем построен,UNIX
но нетUNIX
.ffprobe
является неотъемлемой частьюffmpeg
распределения. Вы выбираете гниды, чтобы сохранить лицо IMO.