Concatenando varios archivos .mp3 en uno .mp3

46

Como se sugirió aquí , estoy usando el catcomando para concatenar varios archivos .mp3 en un solo archivo .mp3.

Imagínese, tengo los siguientes archivos .mp3 en la carpeta actual:

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

o así:

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

Necesito concatenar estos archivos .mp3 en su secuencia ascendente, es decir 001001.mp3+001002.mp3+001003.mp3+etc.

Para unir estos archivos .mp3 en uno, estoy ejecutando el siguiente comando en la carpeta actual:

cat *.mp3 > final.mp3

Probé el archivo .mp3 final y es lo que esperaba, pero tengo que estar seguro de que el comando anterior selecciona los archivos en su secuencia ascendente.

¿Puedo estar seguro de que el comando anterior siempre concatena archivos en la secuencia ascendente?

Gracias señor !

Bakhtiyor
fuente

Respuestas:

46

catNo es la herramienta adecuada para este trabajo. El formato MP3 tiene todo tipo de basura que puede acechar al frente y al final del archivo y esto debe ser eliminado. mp3wrapes lo que quieres Excluirá cualquier metadato en los archivos y unirá el audio.

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

Antes de hacer eso, corre ls *.mp3para verificar que estén en el orden correcto. Cuando originalmente escribí esta respuesta (¡hace más de seis años!), Los globos comodín aparentemente no se comportaron bien, pero creo que sí.

Puede que tenga que cambiar el nombre de los archivos si por ejemplo, se numeran pero no son rellena de ceros, {1-11}.mp3se pueden ordenar por 1 10 11 2 3 4 5 6 7 8 9. Esto se puede arreglar fácilmente .

Oli
fuente
2
Derecha: cat destruirá el formato de archivo mp3 "creando una matriz" (por así decirlo) de archivos mp3 dentro de un solo archivo mp3. Pero parece funcionar si el software del reproductor es lo suficientemente inteligente.
Esto funcionó mejor para mí, porque maneja mp3 con espacios en el nombre del archivo:find . -maxdepth 1 -iname '*.mp3' -print0 | sort -z | xargs -0 mp3wrap output.mp3
bmaupin
@bmaupin Un punto justo, pero no estoy seguro de por qué no estaba usando la expansión comodín de Bash. *.mp3debería ser suficiente (y funciona con espacios).
Oli
Disponible para mac desde brew package manager! $ brew install mp3wrap.
Rubens
1
En bash, *.mp3se garantiza preservar el orden alfabético. Si los archivos se denominan 09.mp3, 10.mp3, 11.mp3, eso es probablemente lo que quiere. Si los archivos se denominan 9.mp3, 10.mp3, 11.mp3, que probablemente no es lo que quiere, pero se puede hacer `ls *.mp3 | sort -n`.
Jo Liss
27

mp3wrap parece ser una solución lo suficientemente decente, pero cuando reproduje el archivo resultante, la marca de tiempo no era correcta. Parece que mp3wrap se usa mejor cuando unes mp3 en un archivo que sabes que querrás dividir más tarde.

Simplemente quería concatenar permanentemente algunos mp3 juntos. Terminé usando ffmpeg para concatenar los archivos:

  1. Primero, instala ffmpeg

    • Ubuntu 15.04+

      sudo apt install ffmpeg
    • Ubuntu 14.10 y versiones inferiores
      Vaya a http://ffmpeg.org/download.html , descargue una de las compilaciones estáticas, descomprímalo y cópielo en / usr / local / bin

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

Más información: https://trac.ffmpeg.org/wiki/Concatenate#protocol
https://superuser.com/a/314245

bmaupin
fuente
ffmpegfalta, pero lo avconvreemplaza: askubuntu.com/questions/432542/…
muru
2
Sí, usé avconv por un tiempo, pero luego necesitaba algunas características que ffmpeg tenía y avconv no, y no lo he usado desde entonces. En estos días parece una pérdida de tiempo verificar si avconv tiene las características que necesito cuando ya sé que ffmpeg las tiene.
bmaupin
Siéntase invitado a unirse a esta discusión de informe de errores.
orschiro
He intentado esto y no funciona muy bien; intente ejecutar a output.mp3través de a mp3valy verá todo tipo de errores que crearán problemas de reproducción en Chrome64 + (consulte bugs.chromium.org/p/chromium/issues/detail?id=794782 y bugs.chromium.org/p/chromium/ cuestiones / detalles? id = 806601 # c10 )
Nino Škopac
Impresionante solución. de todos modos para normalizar las canciones también?
ar2015
8

Como se sugirió anteriormente, mp3wrapes una buena solución. Sin embargo, puede que no funcione todo el tiempo. Hasta donde sé, se mp3wrapsupone que todos los archivos de entrada tienen las mismas características, como VBR vs CBR, bitrate, etc. Si no se cumple esta suposición, es probable que falle. En ese caso, la única solución sería decodificar todos los archivos mp3 en un formato sin formato .wav, como concatenarlos con un programa similar soxy terminar codificando todo en mp3.

loevborg
fuente
Tenga en cuenta que volver a codificar archivos mp3 (también conocido como "transcodificación") provocará una pérdida de calidad. Yo no lo recomendaría.
Martin Tournoij
5

Realiza una ordenación alfabética basada en caracteres individuales. Eso significa que "01" viene antes que "1", ya que nada tiene un valor menor que uno.

Aquí hay un ejemplo. Tengo un directorio con archivos llamados 1, 2, 3, 04, 05 y 06. Son archivos de texto que contienen sus propios nombres de archivo:

test$ cat *
04
05
06
1
2
3

Entonces, lo hará; pero debe asegurarse de que todos sus archivos estén 'rellenados' correctamente.

Esta ingeniosa línea de script bash le permitirá comparar visualmente los nombres de los archivos, lo que hace que sea muy fácil detectar cualquier error:

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

Su salida se verá así:

   04
   05
   06
    1
    2
    3

Si no lo están, deberá rellenar los nombres de archivo: la secuencia de comandos Bash para rellenar los nombres de archivo en StackOverflow explica cómo hacerlo.


Editar. Vote por la respuesta de Oli, es mucho mejor. : P
Dejaré el mío porque agrega algo, pero deberías usar su solución,

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

Tenga en cuenta que sortaún clasificará las cosas de la manera que describí anteriormente, aún necesitará rellenar los nombres de los archivos si no tienen la misma longitud.

Stefano Palazzo
fuente
4

La mayoría de la gente sugiere mp3wrap, pero tiene inconvenientes: el archivo generado no informa su longitud completa en algunos jugadores, y luego no puede buscar más allá de ese punto.

mp3cathace el trabajo rápido y bien, por lo que puedo decir. Se puede descargar en http://mulholland.xyz/dev/mp3cat/ , y se utiliza de la siguiente manera:

mp3cat file1.mp3 file2.mp3 file3.mp3

otra posibilidad sería sox

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

pero parece muy lento (¿posiblemente decodifica y vuelve a codificar el audio?)

josinalvo
fuente
3

Encontré que el servicio de audio en línea funciona muy bien y conserva la marca de tiempo correcta (al contrario que mp3wrap).

orschiro
fuente
0

Puede intentar usar un programa de edición de audio dedicado (como Audacity )

Ley y
fuente
0

Me encanta el comentario de bmaupin , sin embargo, podría producir una especie natural de (versión) números al usar sort -V:

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

y no tiene que tratar con caracteres especiales como ' " () [] {}en el nombre del archivo.

zhoux
fuente