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 ¡!

3voto

orschiro Points 12167

J'ai trouvé le service en ligne audio-jointeur fonctionne très bien et préserve l'horodatage correct (contrairement à mp3wrap).

0voto

zhoux Points 1

J'aime Commentaire de bmaupin Pourtant, il peut produire des nombres naturels (de version) à l'aide de la fonction sort -V :

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

et vous n'avez pas à vous occuper des caractères spéciaux tels que ' " () [] {} dans le nom du fichier.

0voto

MacMartin Points 283
perl -E'say qq(file '\''$_'\'') for <*>' * > file.list && ffmpeg -f concat -safe 0 -i file.list -c copy mybigfile.mp3'
  1. copier cette ligne dans un terminal (où vous avez perl y ffmpeg disponible) après avoir accédé au dossier contenant tous les fichiers que vous souhaitez concaténer.
  2. cela provoquera une erreur à propos de "file.list" (parce que "file.list" sera écrit dans le fichier "file.list") mais peu importe, cela fonctionne quand même
  3. Dans l'ensemble, cela ne fait qu'écrire le contenu du dossier dans le fichier "file.list" et le formater.
  4. après cela, il fusionnera les fichiers en un seul fichier mp3 avec ffmpeg

0voto

Metamorphic Points 101

Permettez-moi de résumer les autres réponses :

  • mp3wrap joint les fichiers mp3 dans un format spécial "fichier mp3 concaténé", qui est plus rapide parce qu'il ne nécessite pas de ré-encodage, mais a l'inconvénient de ne pas être un fichier mp3 normal avec une longueur et ainsi de suite.

  • ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy output.mp3 est lourd à taper, mais devrait bien fonctionner, car c'est une commande standard à utiliser pour joindre des fichiers vidéo par exemple. Cependant, dans mes tests, elle introduit des glitchs lors des transitions entre les fichiers d'entrée.

  • sox file1.mp3 file2.mp3 target.mp3 devrait fonctionner parfaitement, certainement beaucoup plus facile à taper, mais il introduit également des problèmes dans mes tests.

  • Même lorsque j'utilise sox pour d'abord convertir chaque fichier .mp3 en .wav, et ensuite sox file1.wav file2.wav target.wav la sortie contient des parasites audibles.

  • Cependant, si j'utilise mpg123 pour décoder les fichiers mp3 en .wav, je peux alors joindre les fichiers .wav avec Sox et ne pas entendre de parasites. Cela suggère que le problème avec sox (et peut-être ffmpeg ) est dans le décodage des fichiers mp3.

  • mp3cat fonctionne apparemment très bien mais j'ai été trop paresseux pour le tester, car il ne se trouve pas dans le dépôt de ma distribution.

C'est curieux que personne n'ait mentionné mpg123 encore. Bien que troublé par problèmes de sécurité et de licence Au début de son histoire de plus de 20 ans, il est l'un des premiers lecteurs mp3 et devrait être assez stable. Comme il concatène automatiquement ses arguments mp3 (sans problème) avant de les envoyer à la carte son, il suffit d'utiliser la fonction -w pour lui demander de produire un fichier Wave à la place. Ensuite, lame encode le tout en mp3. Voici un script qui accomplit ceci :

#!/bin/bash
FILES=("$@")
OUTPUT=$(mktemp -t mp3-concat.XXXXXX.mp3 -u)
WAVE=$(mktemp -t mp3-concat.XXXXXX.wav -u)
mpg123 -w $WAVE ${FILES[@]}
lame $WAVE $OUTPUT
cat $OUTPUT
rm $WAVE $OUTPUT

Exemple d'utilisation :

$ mp3-concat file1.mp3 file2.mp3 > joined.mp3

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