63 votes

Concaténation de plusieurs fichiers .mp3 en un seul .mp3

Comme il a été suggéré aquí J'utilise cat pour concaténer plusieurs fichiers .mp3 en un seul fichier .mp3.

Imaginez que j'ai les fichiers .mp3 suivants dans le dossier actuel :

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

ou, comme ceci :

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

J'ai besoin de concaténer ces fichiers .mp3 dans leur ordre croissant, c'est à dire 001001.mp3+001002.mp3+001003.mp3+etc.

Afin de joindre ces fichiers .mp3 en un seul, j'exécute la commande suivante dans le dossier actuel :

cat *.mp3 > final.mp3

J'ai testé le fichier .mp3 final et il correspond à ce que j'attends, mais j'ai besoin d'être sûr que la commande ci-dessus choisit les fichiers dans l'ordre croissant.

Puis-je être sûr que la commande ci-dessus concatène toujours les fichiers dans l'ordre croissant ?

Merci. Sir ¡!

77voto

Mufaka Points 54

cat n'est pas le bon outil pour ce travail. Le format MP3 comporte toutes sortes d'éléments indésirables qui peuvent se cacher au début et à la fin du fichier et qui doivent être éliminés. mp3wrap est ce que vous voulez. Il exclura toute métadonnée dans les fichiers et collera l'audio ensemble.

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

Avant de faire cela, exécutez ls *.mp3 pour vérifier qu'ils sont dans le bon ordre. Lorsque j'ai écrit cette réponse à l'origine (il y a plus de six ans !), les jokers ne se comportaient apparemment pas bien, mais je pense qu'ils le font maintenant.

Il se peut que vous deviez renommer les fichiers si, par exemple, ils sont numérotés mais ne sont pas mis à zéro, {1-11}.mp3 seraient triés par 1 10 11 2 3 4 5 6 7 8 9 . Cela peut être corrigé facilement .

41voto

duncan Points 884

mp3wrap semble être une solution assez décente, mais lorsque j'ai lu le fichier résultant, l'horodatage n'était pas correct. Il semble que mp3wrap soit mieux utilisé lorsque vous joignez des mp3 dans un fichier que vous savez que vous voudrez diviser plus tard.

Je voulais simplement concaténer de façon permanente quelques mp3s ensemble. J'ai fini par utiliser ffmpeg pour concaténer les fichiers :

  1. Tout d'abord, installez ffmpeg

    • Ubuntu 15.04+.

      sudo apt install ffmpeg
    • Ubuntu 14.10 et inférieur
      Aller à http://ffmpeg.org/download.html téléchargez l'une des constructions statiques, décompactez-la et copiez-la dans /usr/local/bin.

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

Plus d'informations : https://trac.ffmpeg.org/wiki/Concatenate#protocol
https://superuser.com/a/314245

8voto

Donovan Woodside Points 1288

Comme suggéré précédemment, mp3wrap est une bonne solution. Mais elle ne fonctionne pas toujours. Pour autant que je sache, mp3wrap suppose que tous les fichiers d'entrée ont les mêmes caractéristiques telles que VBR vs CBR, le débit binaire, et ainsi de suite. Si cette hypothèse n'est pas respectée, il est probable qu'il échoue. Dans ce cas, la seule solution serait de décoder tous les fichiers mp3 vers un format brut tel que .wav et les concaténer avec un programme tel que sox et terminer en ré-encodant le tout en mp3.

6voto

josinalvo Points 6679

La plupart des gens suggèrent mp3wrap Cette méthode a toutefois des inconvénients : le fichier généré ne présente pas toute sa longueur sur certains lecteurs, et il est impossible de chercher au-delà de ce point.

mp3cat fait le travail rapidement et bien, pour autant que je puisse dire. Il peut être téléchargé dans http://mulholland.xyz/dev/mp3cat/ et utilisé comme suit :

mp3cat file1.mp3 file2.mp3 file3.mp3

une autre possibilité serait sox

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

mais il semble très lent (peut-être qu'il décode et réencode l'audio ?)

5voto

andybee Points 497

Il effectue un tri alphabétique basé sur des caractères uniques. Cela signifie que "01" vient avant "1", puisque zéro a une valeur inférieure à un.

Voici un exemple. J'ai un répertoire avec des fichiers nommés 1, 2, 3, 04, 05 et 06. Ce sont des fichiers texte qui contiennent leurs propres noms de fichiers :

test$ cat *
04
05
06
1
2
3

Donc, oui C'est possible, mais vous devez vous assurer que tous vos fichiers sont correctement "rembourrés".

Cette astucieuse ligne de bash script vous permettra de comparer visuellement les noms de fichiers, ce qui vous permettra de repérer très facilement toute erreur :

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

La sortie ressemblera à ceci :

   04
   05
   06
    1
    2
    3

Si ce n'est pas le cas, vous devrez compléter les noms de fichiers : Bash script pour rembourrer les noms de fichiers sur StackOverflow explique comment faire.


Edit. Votez pour la réponse d'Oli, elle est bien meilleure :P
Je vais laisser le mien parce qu'il ajoute quelque chose, mais vous devriez utiliser sa solution,

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

Gardez à l'esprit que sort triera toujours les choses de la manière que j'ai décrite ci-dessus, vous aurez toujours besoin de rembourrer les noms de fichiers s'ils ne sont pas de même longueur.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X