Вариант 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> - точка поиска.