Вы можете использовать следующий скрипт bash:
numFiles=3 maxStart=10 idx=1 for randomStart in $(jot -r $numFiles 0 $maxStart); do ffmpeg -y -ss "$randomStart" -i "track$.mp3" -t 10 -c:a copy "track$-chunk.mp3" idx=$((idx + 1)) done
Здесь вы должны указать количество файлов ( track1
до track3
) и максимальную начальную позицию (например, если ваши файлы имеют длину всего 20 секунд, вы должны начинать самое большее с 00:00:10).
jot
Утилита используется для создания случайных чисел от 0 до $maxStart
(то есть, 10 в приведенном выше примере). В Linux jot
недоступен; вместо этого используйте shuf -n $numFiles -i 0-$maxStart
.
Затем объедините фрагменты (см. Запись в FFmpeg Wiki ):
ffmpeg -f concat -safe 0 -i <(for f in ./*-chunk.mp3; do echo "file '$PWD/$f'"; done) -c copy output.mp3
Он использует специальный синтаксис оболочки для создания временного файла конкатенации. Это скопирует битовые потоки, поэтому повторное кодирование не выполняется.