Selecione aleatoriamente 10 segundos a partir de arquivos mp3

1

Eu tenho um diretório tracks com 3 arquivos track1.mp3 , track2.mp3 , track3.mp3 . Eu quero selecionar um pedaço aleatório de 10 segundos de cada arquivo e combinar esses pedaços em um novo arquivo chamado sample.mp3 . Como faço isso usando o ffmpeg?

Sou muito novo no ffmpeg e tudo que consegui fazer até agora é dividir um arquivo em partes

ffmpeg -i track1.mp3 -f segment -segment_time 10 -c copy out%03d.mp3

Alguém, por favor ajude. Estou no Mac OSX high sierra e bash shell

    
por Tony Vincent 27.03.2018 / 07:46

1 resposta

3

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.

    
por 27.03.2018 / 09:41