Concatenando vários arquivos .mp3 em um .mp3

46

Como foi sugerido aqui , estou usando o catcomando para concatenar vários arquivos .mp3 em um arquivo .mp3.

Imagine, eu 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

Preciso concatenar esses arquivos .mp3 na sequência crescente, ou seja, 001001.mp3+001002.mp3+001003.mp3+etc.

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

cat *.mp3 > final.mp3

Testei o arquivo .mp3 final e é o que eu esperava, mas preciso ter certeza de que o comando acima seleciona os arquivos na sequência crescente.

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

Obrigado senhor !

Bakhtiyor
fonte

Respostas:

46

catnão é a ferramenta certa para este trabalho. O formato MP3 tem todos os tipos de lixo que podem ser encontrados na frente e no final do arquivo e isso precisa ser eliminado. mp3wrapé o que você quer. Ele excluirá quaisquer metadados nos arquivos e juntará o áudio.

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

Antes de fazer isso, execute ls *.mp3para verificar se estão na ordem correta. Quando escrevi originalmente esta resposta (há mais de seis anos!), Os globs curinga aparentemente não se comportaram bem, mas acho que agora.

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

Oli
fonte
2
O Right-cat irá alterar o formato do arquivo mp3 "criando uma matriz" (por assim dizer) de arquivos mp3 em um único arquivo mp3. Mas parece funcionar se o software do player for inteligente o suficiente.
Isso funcionou melhor para mim, porque ele lida com mp3s com espaços no nome do arquivo:find . -maxdepth 1 -iname '*.mp3' -print0 | sort -z | xargs -0 mp3wrap output.mp3
bmaupin
@bmaupin Um argumento justo, mas não sei por que não estava usando a expansão curinga de Bash. *.mp3deve ser suficiente (e funciona com espaços).
Oli
Disponível para mac a partir do gerenciador de pacotes brew ! $ brew install mp3wrap.
Rubens #
1
No bash, *.mp3é garantido preservar a ordem alfabética. Se os seus arquivos são nomeados 09.mp3, 10.mp3, 11.mp3, isso é provavelmente o que você quer. Se os seus arquivos são nomeados 9.mp3, 10.mp3, 11.mp3, que provavelmente não é o que você quer, mas você pode fazer `ls *.mp3 | sort -n`.
Jo Liss
27

O mp3wrap parece ser uma solução decente o suficiente, mas quando reproduzi o arquivo resultante, o carimbo de data e hora não estava correto. Parece que o mp3wrap é melhor usado quando você está juntando mp3s em um arquivo que você sabe que deseja dividir mais tarde.

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
      Vá para http://ffmpeg.org/download.html , baixe uma das construções estáticas, descompacte-a e copie para / usr / local / bin

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

Mais informações: https://trac.ffmpeg.org/wiki/Concatenate#protocol
https://superuser.com/a/314245

bmaupin
fonte
ffmpegestá ausente, mas o avconvsubstitui: askubuntu.com/questions/432542/…
muru
2
Sim, eu usei o avconv por um tempo, mas então eu precisava de alguns recursos que o ffmpeg tinha e o avconv não, e não o uso desde então. Hoje em dia parece uma perda de tempo verificar se o avconv possui os recursos necessários quando eu já sei que o ffmpeg possui.
bmaupin
Sinta-se convidado a participar desta discussão sobre o relatório de erros.
Orschiro
Eu tentei isso e não funciona muito bem; tente executar output.mp3através de um mp3vale você verá todos os tipos de erros que criarão problemas de reprodução no Chrome64 + (consulte bugs.chromium.org/p/chromium/issues/detail?id=794782 e bugs.chromium.org/p/chromium/ ? questões / detalhes id = 806601 # c10 )
Nino Škopac
solução incrível. de qualquer maneira para normalizar as músicas também?
ar2015 24/06
8

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

Loevborg
fonte
Observe que a recodificação de arquivos mp3 (também conhecidos como "transcodificação") resultará em perda de qualidade. Eu não recomendaria.
Martin Tournoij
5

Faz uma classificação alfabética com base em caracteres únicos. Isso significa que "01" vem antes de "1", pois nada tem um valor menor que um.

Aqui está um exemplo. Eu tenho um diretório com arquivos nomeados 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 garantir que todos os seus arquivos sejam preenchidos corretamente.

Essa linha bacana de script bash permitirá comparar visualmente os nomes dos arquivos, facilitando a detecção de erros:

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

Sua saída ficará assim:

   04
   05
   06
    1
    2
    3

Se não estiverem, você precisará preencher os nomes dos arquivos: O script Bash para preencher os nomes dos arquivos no StackOverflow explica como fazê-lo.


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

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

Lembre-se de que sortainda classificará as coisas da maneira descrita acima, você ainda precisará preencher os nomes dos arquivos se eles não tiverem o mesmo comprimento.

Stefano Palazzo
fonte
4

A maioria das pessoas está sugerindo mp3wrap, mas tem desvantagens: o arquivo gerado não informa todo o seu comprimento em alguns players e, portanto, não é possível procurar além desse ponto.

mp3catfaz o trabalho rápido e bem, tanto quanto eu posso dizer. Pode ser baixado em http://mulholland.xyz/dev/mp3cat/ e usado da seguinte maneira:

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?)

josinalvo
fonte
3

Eu achei o marceneiro de serviço on - line muito bem e preservei o carimbo de data / hora correto (ao contrário do mp3wrap).

orschiro
fonte
0

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

Lawand
fonte
0

Adoro o comentário de bmaupin , mas ele pode produzir tipos naturais de (versão) números 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.

zhoux
fonte