Comme cela a été suggéré ici J'utilise la commande cat
pour concaténer plusieurs fichiers .mp3 en un seul fichier .mp3.
Imaginez, 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
Je dois concaténer ces fichiers .mp3 en ordre croissant, c.-à-d. 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 c'est ce à quoi je m'attendais, mais je dois être sûr que la commande ci-dessus sélectionne les fichiers dans leur séquence ascendante.
Puis-je être sûr que la commande ci-dessus concatène toujours des fichiers dans l'ordre croissant?
Merci Monsieur !
cat
n'est pas le bon outil pour ce travail. Le format MP3 contient toutes sortes d’ordures qui peuvent se cacher à l’avant et à la fin du fichier et cela doit être supprimé. mp3wrap
est ce que vous voulez. Cela exclura toutes les métadonnées 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 initialement écrit cette réponse (il y a plus de six ans!), Les globs génériques ne se comportaient apparemment pas bien, mais je pense qu'ils le font maintenant.
Vous devrez peut-être renommer les fichiers si, par exemple, ils sont numérotés mais ne contiennent pas de zéros; {1-11}.mp3
serait trié par 1 10 11 2 3 4 5 6 7 8 9
. Cela peut être corrigé facilement .
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 la meilleure utilisation de mp3wrap est lorsque vous joignez des mp3 dans un fichier que vous voudrez scinder plus tard.
Je voulais simplement concaténer de façon permanente des mp3 ensemble. J'ai fini par utiliser ffmpeg pour concaténer les fichiers:
Tout d'abord, installez ffmpeg
Ubuntu 15.04+
Sudo apt install ffmpeg
Ubuntu 14.10 et inférieur
Allez à http://ffmpeg.org/download.html , téléchargez l’une des versions statiques, décompressez-la et copiez-la dans/usr/local/bin
ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy output.mp3
Plus d'infos: https://trac.ffmpeg.org/wiki/Concatenate#protocol
https://superuser.com/a/314245
Comme suggéré précédemment, mp3wrap
est une bonne solution. Cela peut ne pas fonctionner tout le temps cependant. Autant que je sache, mp3wrap
suppose que tous les fichiers d'entrée ont les mêmes caractéristiques, telles que VBR, CBR, bitrate, etc. Si cette hypothèse n'est pas respectée, il est probable qu'elle échoue. Dans ce cas, la seule solution serait de décoder tous les fichiers mp3 en un format brut tel que .wav
, de les concaténer avec un programme tel que sox
et de terminer en réencodant le tout en mp3.
Il effectue un tri alphabétique basé sur des caractères uniques. Cela signifie que "01" vient avant "1", puisque rien n'a une valeur inférieure à un.
Voici un exemple. J'ai un répertoire avec les fichiers nommés 1, 2, 3, 04, 05 et 06. Ce sont des fichiers texte qui contiennent leurs propres noms de fichier:
test$ cat *
04
05
06
1
2
3
Donc, oui ça va; mais vous devez vous assurer que tous vos fichiers sont correctement "rembourrés".
Cette ligne astucieuse de script bash vous permettra de comparer visuellement les noms de fichiers, ce qui facilitera la détection des erreurs:
for f in $(ls); do printf "%05s\n" "$f"; done
Sa sortie ressemblera à ceci:
04
05
06
1
2
3
Si ce n’est pas le cas, vous devrez tamponner les noms de fichier: script Bash pour tamponner les noms de fichier sur StackOverflow explique comment pour le faire.
Modifier. Votez pour la réponse d'Oli, c'est beaucoup mieux. : P
Je laisserai le mien car il ajoute quelque chose, mais vous devriez utiliser sa solution,
mp3wrap output.mp3 `ls -1 *.mp3 | sort`
Gardez à l'esprit que sort
va toujours trier les choses de la manière que j'ai décrite ci-dessus, vous aurez toujours besoin de tamponner les noms de fichiers s'ils ne sont pas égaux en longueur.
La plupart des gens suggèrent mp3wrap
, mais cela présente des inconvénients: le fichier généré n’indique pas sa longueur totale dans certains lecteurs et vous ne pouvez pas rechercher après ce point.
mp3cat
fait le travail vite et bien, autant que je sache. 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 cela semble très lent (peut-il décoder et réencoder l'audio?)
J'ai trouvé que le service en ligne audio-joiner fonctionnait très bien et conservait le bon horodatage (contrairement à mp3wrap).
Vous voudrez peut-être essayer d’utiliser un programme d’édition audio dédié (comme Audacity )
J'aime commentaire de bmaupin , mais il pourrait produire une sorte naturelle de nombres (version) en utilisant sort -V
:
find . -maxdepth 1 -iname '*.mp3' -print0 | sort -Vz | xargs -0 mp3wrap ../tmp.mp3
et vous n'avez pas à traiter avec des caractères spéciaux tels que ' " () [] {}
dans le nom du fichier.