Você pode usar o seguinte script:
numFiles=3
maxStart=10
idx=1
for randomStart in $(jot -r $numFiles 0 $maxStart); do
ffmpeg -y -ss "$randomStart" -i "track${idx}.mp3" -t 10 -c:a copy "track${idx}-chunk.mp3"
idx=$((idx + 1))
done
Aqui, você tem que especificar o número de arquivos ( track1
a track3
) e a posição inicial máxima (por exemplo, se seus arquivos tiverem apenas 20 segundos, você deve começar no máximo a partir de 00:00:10 ).
O utilitário jot
é usado para criar números aleatórios entre 0 e $maxStart
(ou seja, 10 no exemplo acima). No Linux, jot
não está disponível; Em vez disso, use shuf -n $numFiles -i 0-$maxStart
.
Em seguida, concatene os fragmentos (consulte a entrada do Wiki do FFmpeg ):
ffmpeg -f concat -safe 0 -i <(for f in ./*-chunk.mp3; do echo "file '$PWD/$f'"; done) -c copy output.mp3
Ele usa a sintaxe especial do shell para construir um arquivo de concatenação temporário. Isso irá copiar os fluxos de bits, portanto, nenhuma recodificação é feita.