105 votes

Comment joindre/fusionner plusieurs fichiers mp3 ?

En cherchant sur Google comment joindre/fusionner plusieurs fichiers mp3, il me semble que je devrais juste cat ensemble.

Cela pourrait "fonctionner", mais il est clair que ce n'est pas la bonne façon de procéder, car chaque en-tête et chaque ensemble de balises IDv3 seront également concaténés.

Existe-t-il un programme Linux qui peut être programmé pour joindre/fusionner plusieurs mp3 ?

Est-ce que mplayer/mencoder/ffmpeg peut le faire ?

131voto

Ambroz Bizjak Points 4595

Cela va concaténer deux fichiers mp3, et les métadonnées résultantes seront celles du premier fichier :

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

C'est parce que, pour ffmpeg, toute la partie "concat :" est un seul "fichier d'entrée", et ses métadonnées seront celles du premier fichier concaténé. Si vous voulez utiliser les métadonnées du second fichier à la place, vous devez l'ajouter comme un fichier d'entrée fictif et faire correspondre ses métadonnées à celles de la sortie :

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

Si vous voulez construire vos métadonnées à partir des deux métadonnées, vous devrez le faire à la main. Vous pouvez vider les métadonnées d'un fichier avec

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

Après avoir vidé les deux métadonnées et construit de nouvelles métadonnées, vous pouvez les ajouter au fichier de sortie avec -metadata et vous pouvez désactiver la copie des métadonnées en définissant un paramètre de type -map_metadata mappage à partir d'un numéro de fichier d'entrée négatif. Cela définit une valeur de nom et aucune autre métadonnée :

ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy -metadata "title=Some Song" test.mp3 -map_metadata 0:-1

38voto

Miles Wolbe Points 736

Cela permettra de concaténer un dossier rempli de MP3 en un seul fichier MP3 :

1) Enregistrez une liste des fichiers MP3 à concaténer, par exemple,

$ 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) Exécutez la commande suivante ( -safe 0 でございます non nécessaire si mylist.txt utilise des chemins relatifs à la place ) :

$ ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp3

15voto

lig Points 276

Mp3Wrap - Utilitaire en ligne de commande qui regroupe plusieurs fichiers MP3 en un seul fichier MP3 lisible, sans perdre les noms de fichiers ou les informations ID3, et sans réencodage. Il permet également d'archiver des données non audio telles que des listes de lecture, des fichiers d'information et des images de couverture à l'intérieur du MP3. Ces fichiers peuvent être décompressés plus tard (en utilisant mp3splt, par exemple) ; les décodeurs MP3 ordinaires peuvent lire le flux audio entier comme une longue piste.

13voto

HappyFace Points 741

Zsh :

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

audio-join output.mp3 *.mp3

6voto

Greg Cain Points 2933

Sur la base de la réponse de Miles Wolbe, voici une phrase qui a fonctionné pour moi :

ls *.mp3 | \
    sed -e "s/\(.*\)/file '\1'/" | \
    ffmpeg -protocol_whitelist 'file,pipe' -f concat -i - -c copy output.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