¿Cómo unir / fusionar muchos archivos mp3?

59

Al buscar en Google cómo unir / fusionar muchos archivos mp3, sugiere que debería simplemente catjuntarlos.

Eso podría "funcionar", pero claramente no es la forma correcta de hacerlo, ya que cada encabezado y conjunto de etiquetas IDv3 también se concatenarán.

¿Existe un programa Linux que pueda ser programado para unir / fusionar muchos mp3?

¿Puede hacerlo mplayer / mencoder / ffmpeg?

Sandra
fuente

Respuestas:

79

Esto concatenará dos archivos mp3, y los metadatos resultantes serán los del primer archivo:

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

Esto se debe a que, para ffmpeg, toda la parte "concat:" es un solo "archivo de entrada", y sus metadatos serán del primer archivo concatenado. Si desea utilizar metadatos del segundo archivo, debe agregarlo como un archivo de entrada ficticio y asignar sus metadatos al de la salida:

ffmpeg -i "concat:file1.mp3|file2.mp3" -i file2.mp3 -acodec copy test.mp3 -map_metadata 0:1

Si desea construir sus metadatos a partir de los dos metadatos, deberá hacerlo a mano. Puede volcar los metadatos de un archivo con

ffmpeg -i file1.mp3 -f ffmetadata file1.metadata

Después de volcar los metadatos y construir nuevos metadatos, puede agregarlos al archivo de salida con -metadata, y puede deshabilitar la copia de metadatos configurando una -map_metadataasignación a partir de un número de archivo de entrada negativo. Esto establece un valor de nombre y ningún otro metadato:

ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy -metadata "title=Some Song" test.mp3 -map_metadata 0:-1
Ambroz Bizjak
fuente
FYI esto requiere una cierta versión de ffmpeg. Si dice que el archivo no se encuentra concat ... intente actualizarlo y ejecutarlo nuevamente
Sameer
Funciona bien en ffmpeg 0.10.4 en Gentoo. ¿Que estas usando? ¿Estás seguro de que no has escrito mal el comando?
Ambroz Bizjak
1
Solo quería aclarar algunas cosas para otros: -acodecsignifica que se usará códec de audio y copysignifica que solo habrá muxing y demuxing, pero no codificación / transcodificación (es decir, muy rápido y sin pérdida de calidad)
Housemd
1
Sería genial si hubiera un programa GUI donde pueda arrastrar y soltar múltiples archivos (por ejemplo, ordenados cronológicamente para grabaciones grabadas secuencialmente, y tal vez algunos archivos editados) y luego generará un archivo.
James Ray
1
Esta es una buena respuesta, sin embargo, en casi todos los casos, el archivo MP3 resultante tiene una brecha corta (sub-segundo) entre el lugar donde se unieron los archivos. Entonces, si está tratando de fusionar pistas MP3 para crear un álbum / set de reproducción sin problemas / lo que sea, esto no funciona del todo bien.
The Lizard
13

Mp3Wrap : utilidad de línea de comandos que envuelve múltiples archivos MP3 en un solo MP3 reproducible, sin perder nombres de archivos o información ID3, y sin volver a codificar. También admite archivar datos que no son de audio, como listas de reproducción, archivos de información e imágenes de portada dentro del MP3. Estos archivos pueden descomprimirse más tarde (usando mp3splt, por ejemplo); Los decodificadores de MP3 normales pueden reproducir toda la transmisión de audio como una sola pista larga.

lig
fuente
1
Gracias por esta recomendación ... una solución mucho más liviana / simple que ffmpeg, ya que combinaba más de 100 mp3 y quería la opción de volver a los originales.
joshbaptiste
Esto ya no funciona: intente concatenar algunos archivos e inspeccione el archivo de salida mp3val; informará errores de sincronización. Esto significa que no se reproducirá después del primer fragmento en Chrome 64+ (consulte bugs.chromium.org/p/chromium/issues/detail?id=794782 y bugs.chromium.org/p/chromium/issues/detail?id = 806601 # c10 )
Housemd
No parece funcionar en Windows. No se conservan los metadatos.
Gruber
9

Esto concatenará una carpeta llena de MP3 en un solo archivo MP3:

1) Guarde una lista de los archivos MP3 para concatenar, por ejemplo,

$ cat mylist.txt
file '/tmp/01.mp3'
file '/tmp/02.mp3'
file '/tmp/03.mp3'
file '/tmp/04.mp3'
file '/tmp/05.mp3'
file '/tmp/06.mp3'
file '/tmp/07.mp3'

2) Ejecute el siguiente comando ( no-safe 0 es necesario si mylist.txt usa rutas relativas en su lugar ):

$ ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp3
Miles Wolbe
fuente
3

Si desea concat todos los archivos mp3 del directorio actual:

function join_by { local IFS="$1"; shift; echo "$*"; }
files=(*.mp3)
ffmpeg -i "concat:`join_by "|" $files`" -acodec copy output.mp3
hansaplast
fuente
0

Si necesita secuencias de comandos, probablemente sea mejor usar la solución ffmpeg. Sin embargo, si alguna vez necesita una aplicación para hacer cosas como esa, puede probar Audacity . Es de código abierto y multiplataforma. No lo he usado para unir mp3, pero lo he usado para recortar secciones de un mp3 y desvanecerlas al final. Estoy dispuesto a apostar que puedes unir mp3 y fundirlos entre ellos también.

Brandon
fuente
44
Audacity, hasta donde yo sé, trabaja en los datos de sonido sin procesar, y la concatenación de mp3 con ellos provocará una degradación debido a la transcodificación.
Ambroz Bizjak
0

zsh:

audio-join() ffmpeg -i "concat:${(j:|:)@[2,-1]}" -acodec copy $1

audio-join output.mp3 *.mp3
Cara feliz
fuente
Esperamos que las respuestas incluyan explicaciones. (No todas las respuestas en esta página son buenos ejemplos.)
Scott
0

Basado en la respuesta de Miles Wolbe, aquí hay una frase que funcionó para mí:

ls *.mp3 | \
    sed -e "s/\(.*\)/file '\1'/" | \
    ffmpeg -protocol_whitelist 'file,pipe' -f concat -i - -c copy output.mp3
Andy Balaam
fuente