Concatenando vários arquivos .mp3 em um .mp3

32

Como foi sugerido aqui estou usando o comando cat para concatene vários arquivos .mp3 em um arquivo .mp3.

Imagine, tenho os seguintes arquivos .mp3 na pasta atual:

001001.mp3 001002.mp3 001003.mp3 001004.mp3 001005.mp3

ou, assim:

096001.mp3 096002.mp3 096003.mp3 096004.mp3

Eu preciso concatenar esses arquivos .mp3 nessa sequência crescente, ou seja, 001001.mp3+001002.mp3+001003.mp3+etc.

Para unir esses arquivos .mp3 em um, estou executando o seguinte comando na pasta atual:

cat *.mp3 > final.mp3

Eu testei o arquivo final .mp3 e é o que eu esperava, mas eu preciso ter certeza que o comando acima escolhe os arquivos em uma sequência crescente.

Posso ter certeza de que o comando acima sempre concatena arquivos na sequência ascendente?

Obrigado Senhor !

    
por Bakhtiyor 07.01.2011 / 20:04

8 respostas

35

cat não é a ferramenta certa para este trabalho. O formato MP3 tem todos os tipos de lixo que podem espreitar na frente e no final do arquivo e isso precisa ser removido. mp3wrap é o que você quer. Isso excluirá todos os metadados dos arquivos e unirá o áudio.

sudo apt-get install mp3wrap
mp3wrap output.mp3 *.mp3

Antes de fazer isso, execute ls *.mp3 para verificar se estão na ordem correta. Quando eu originalmente escrevi essa resposta (há mais de seis anos!), Os globos-curinga aparentemente não se comportavam bem, mas acho que eles fazem agora.

Pode ser necessário renomear os arquivos se, por exemplo, eles forem numerados, mas não preenchidos com zero, {1-11}.mp3 será classificado por 1 10 11 2 3 4 5 6 7 8 9 . Isso pode ser corrigido facilmente .

    
por Oli 07.01.2011 / 20:36
16

mp3wrap parece ser uma solução decente o suficiente, mas quando eu reproduzi o arquivo resultante, o timestamp não estava correto . Parece que mp3wrap é melhor usado quando você está juntando mp3s em um arquivo que você sabe que vai querer dividir depois.

Eu simplesmente queria concatenar permanentemente alguns mp3s juntos. Acabei usando o ffmpeg para concatenar os arquivos:

  1. Primeiro, instale o ffmpeg

    • Ubuntu 15.04 +

      sudo apt install ffmpeg
      
    • Ubuntu 14.10 e abaixo do
      Vá para link , baixe uma das compilações estáticas, descompacte e copie para / usr / local / bin

  2. ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy output.mp3

Mais informações: link
link

    
por bmaupin 31.07.2014 / 03:55
7

Como sugerido anteriormente, mp3wrap é uma boa solução. Pode não funcionar o tempo todo embora. Tanto quanto eu sei, mp3wrap assume que todos os arquivos de entrada têm as mesmas características, como VBR vs CBR, bitrate e assim por diante. Se essa suposição não for cumprida, é provável que ela falhe. Nesse caso, a única solução seria decodificar todos os arquivos mp3 para um formato bruto como .wav , concatená-los com um programa como sox e terminar recodificando todos para mp3.

    
por loevborg 08.01.2011 / 12:41
4

Ele faz uma classificação alfabética baseada em caracteres únicos. Isso significa que "01" vem antes de "1", já que nada tem um valor menor que um.

Aqui está um exemplo. Eu tenho um diretório com arquivos chamados 1, 2, 3, 04, 05 e 06. Eles são arquivos de texto que contêm seus próprios nomes de arquivo:

test$ cat *
04
05
06
1
2
3

Então, sim será; mas você precisa ter certeza de que todos os seus arquivos estão "preenchidos" corretamente.

Essa interessante linha de script bash permite comparar visualmente os nomes dos arquivos, facilitando a identificação de erros:

for f in $(ls); do printf "%05s\n" "$f"; done

A saída será assim:

   04
   05
   06
    1
    2
    3

Se não estiverem, você precisará preencher os nomes dos arquivos: Script Bash para agrupar nomes de arquivos no StackOverflow explica como fazer isso.

Editar. Vote na resposta de Oli, é muito melhor. : P
eu vou deixar o meu porque adicionar algo, mas você deve usar a solução dele,

mp3wrap output.mp3 'ls -1 *.mp3 | sort'

Lembre-se de que sort ainda ordenará as coisas da maneira que descrevi acima, você ainda precisará preencher nomes de arquivos se eles não forem iguais em tamanho.

    
por Stefano Palazzo 07.01.2011 / 20:33
3

Eu encontrei o serviço online audio-joiner para funcionar muito bem e preservar o carimbo de hora correto (ao contrário do mp3wrap).

    
por orschiro 21.01.2016 / 08:54
2

A maioria das pessoas está sugerindo mp3wrap , mas tem desvantagens: o arquivo gerado não reporta seu tamanho completo em alguns jogadores, e então você não pode procurar por esse ponto.

mp3cat faz o trabalho rápido e bem, até onde eu sei. Ele pode ser baixado no link e usado da seguinte forma:

mp3cat file1.mp3 file2.mp3 file3.mp3

outra possibilidade seria sox

sudo apt-get install sox libsox-fmt-mp3
sox file1.mp3 file2.mp3 target.mp3

mas parece muito lento (possivelmente decodifica e re-codifica o áudio?)

    
por josinalvo 23.12.2017 / 16:20
0

Você pode querer usar um programa de edição de áudio dedicado (como o Audacity )

    
por Lawand 07.01.2011 / 20:26
0

Eu adoro o comentário do bmaupin , ainda assim poderia produzir um tipo natural de números (versão) usando sort -V :

find . -maxdepth 1 -iname '*.mp3' -print0 | sort -Vz | xargs -0 mp3wrap ../tmp.mp3

e você não precisa lidar com caracteres especiais como ' " () [] {} no nome do arquivo.

    
por zhoux 19.02.2017 / 14:38