Вопрос или проблема
У меня возникли проблемы со следующей командой ffmpeg:
ffmpeg -i 20s.wav -af "afade=t=out:st=2:d=1:silence=0.07, afade=t=in:st=5:d=1" out.wav
Что я ожидаю от этого: на 2 секунде уменьшить громкость до 0.07 за 1 секунду. Затем на 5 секундной метке вернуть громкость обратно к единице (значение по умолчанию 1.0) за 1 секунду.
Вместо этого результат начинается с уровня громкости 0.0. Затем на 5 секундах громкость увеличивается до 0.07 и остается на этом уровне на протяжении файла.
Есть идеи, как добиться желаемого результата? Спасибо!
Вы можете сделать это без конкатенации, используя фильтры с редактированием временной шкалы
https://ffmpeg.org/ffmpeg-filters.html#Timeline-editing
обновленная команда
ffmpeg -i 20s.wav -af "afade=enable="between(t,2,3)":t=out:st=2:d=1:silence=0.07,volume=enable="between(t,3,5)":volume=0.07,afade=enable="between(t,5,6)":t=in:st=5:d=1:silence=0.07" out.wav
фильтр для ограничения затухания между 2 и 3 секундам
afade=enable="between(t,2,3)":t=out:st=2:d=1:silence=0.07
фильтр для обеспечения того, чтобы время между затуханиями было 0.07 вместо 1
volume=enable="between(t,3,5)":volume=0.07
фильтр для ограничения появления звука между 5 и 6 секундами
afade=enable="between(t,5,6)":t=in:st=5:d=1:silence=0.07
Ответ или решение
Для достижения желаемого эффекта изменения уровней громкости с помощью FFmpeg, вам необходимо использовать корректные параметры фильтров, которые позволяют точно определить временные рамки для каждого эффекта. Ваша задача заключается в создании равномерного перехода громкости от полной громкости к 0,07 дБ за одну секунду, а затем возвращения к полной громкости за 1 секунду на 5-й секунде.
Ваш первоначальный командный вызов не учитывает временные рамки, из-за чего и возникает проблема. Вместо этого, вы можете использовать следующие фильтры и настройки:
ffmpeg -i 20s.wav -af "afade=enable='between(t,2,3)':t=out:st=2:d=1:silence=0.07,volume=enable='between(t,3,5)':volume=0.07,afade=enable='between(t,5,6)':t=in:st=5:d=1:silence=0.07" out.wav
Объяснение параметров:
-
afade:
afade=enable='between(t,2,3)':t=out:st=2:d=1:silence=0.07
- Этот фильтр отвечает за затухание звука. Он будет активирован между 2-й и 3-й секундой (
between(t,2,3)
), уменьшает громкость до 0 в течение 1 секунды (с 2 до 3 секунд).
- Этот фильтр отвечает за затухание звука. Он будет активирован между 2-й и 3-й секундой (
-
volume:
volume=enable='between(t,3,5)':volume=0.07
- Находясь между 3-й и 5-й секундами, этот фильтр устанавливает уровень громкости на 0.07. Это говорит о том, что на этой временной шкале звук будет звучать на фиксированном уровне громкости.
-
afade (второй раз):
afade=enable='between(t,5,6)':t=in:st=5:d=1:silence=0.07
- Этот фильтр активируется между 5-й и 6-й секундами и восстанавливает громкость обратно до полной (1) в течение 1 секунды.
Заключение:
Эти изменения обеспечивают плавный переход уровня громкости по вашему запросу. После запуска команды, вы получите файл out.wav
, который будет иметь ожидаемые вами изменения громкости в заданные моменты времени.
Если у вас возникнут дальнейшие вопросы или потребуется помощь с другими аспектами работы в FFmpeg, не стесняйтесь спрашивать!