1

Как мы можем создать зацикленное аудио с помощью ffmpeg из аудиофайла

команда, используемая для зацикленного аудио

ffmpeg -lavfi "amovie=audio.wav:loop=3" out.wav

но это создает зацикленный файл всего аудио, а не его части

как бы я ни хотел

Если продолжительность аудиофайла составляет 4 минуты 30 секунд, я хочу получить часть аудио от 2 минут 25 секунд до 3 минут 55 секунд и зациклить его

как мы можем это сделать

1 ответ1

1

Вариант 1 - обрезка и зацикливание

Вы можете использовать фильтр atrim чтобы сначала подрезать ваш ввод до нужной части, а затем использовать фильтр aloop для зацикливания этого раздела.

ffmpeg -i input.m4a \
    -filter_complex " \
    [0:a] \
        atrim=0:3,asetpts=PTS-STARTPTS, \
        asetrate=48000,aloop=2:size=3*48000 \
    [outa]" \
    -map "[outa]" \
    -c:a aac \
    out.m4a

В приведенном выше примере обратите внимание на следующие параметры:

  • ввод сокращается от 0 до 3 секунд с помощью atrim
  • аудио зациклено на 3⨉ (aloop=2)
  • размер цикла задается с size=3*48000
  • аудиокодек AAC со стандартными параметрами качества (-c:a aac)

Если вы хотите другую продолжительность, например, от 5 до 10 секунд, измените atrim=5:10 и измените size=5*48000 .

К сожалению, в фильтре aloop требуется установить размер зацикленной части в сэмплах - в нашем случае это 3 секунды - 48 000 сэмплов. Поскольку вы не знаете входную частоту дискретизации, вы должны сначала установить ее на 48000 Гц с помощью фильтра asetrate .

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

Вариант 2 - зацикливание, затем остановка

Альтернативой может быть:

ffmpeg -ss 0 -i input.m4a \
    -filter_complex " \
    [0:a]asetrate=48000,aloop=1:size=3*48000[outa]" \
    -map "[outa]" \
    -t 6 \
    -c:a aac \
    out.m4a

Здесь вход не обрезается; это просто размер цикла, который определяет длину цикла. Но тогда вы должны указать общую продолжительность вывода (т.е. 6 секунд) с помощью -t . Если вы хотите другое смещение, используйте ffmpeg -ss <timestamp> -i input.m4a , где <timestamp> - точка поиска.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .