60 votes

Concaténation de plusieurs fichiers WAV à l'aide d'une seule commande, sans fichier supplémentaire

Je veux concaténer plusieurs fichiers WAV en un seul fichier WAV en utilisant FFMPEG.

J'ai utilisé la commande suivante et elle génère le fichier requis.

Commandement :

ffmpeg -f concat -i mylist.txt -c copy output.wav

Fichier :

#mylist.txt
file '1.wav'
file '2.wav'
file '3.wav'
file '4.wav'

Mais comme vous pouvez le constater, le problème est que je dois créer un fichier texte pour spécifier la liste des fichiers WAV à concaténer.

Je peux effectuer toutes ces tâches, mais je préférerais une commande unique qui ressemblerait à ceci

ffmpeg -i 1.wav -i 2.wav -i 3.wav -i 4.wav output.wav 

ou

ffmpeg -i "concat:1.wav|2.wav|3.wav|4.wav" -c copy output.wav

J'ai essayé ces deux commandes simples mais elles ne renvoient que la voix de 1.wav Aidez-moi à écrire une seule commande (ou à corriger les deux commandes ci-dessus) qui permette d'obtenir le résultat souhaité.

Je vous prie de ne pas suggérer d'autres encodeurs/éditeurs de médias, je veux utiliser uniquement FFMPEG, car il est déjà installé et utilisé à d'autres endroits.

56voto

evilsoup Points 12077

Vous pouvez essayer d'utiliser le concat filtre Cela nécessite un réencodage, et donc plus de ressources système (une quantité assez minime sur n'importe quel ordinateur vaguement moderne dans ce cas particulier), mais l'audio PCM -> PCM devrait être mathématiquement sans perte. Dans votre cas, vous utiliseriez quelque chose comme :

ffmpeg -i input1.wav -i input2.wav -i input3.wav -i input4.wav \
-filter_complex '[0:0][1:0][2:0][3:0]concat=n=4:v=0:a=1[out]' \
-map '[out]' output.wav

Par exemple, si vous avez cinq fichiers d'entrée, utilisez n=5 et ajouter [4:0] .

36voto

Je pense que la meilleure option pour le wav est d'utiliser sox et non pas ffmpeg :

$ sox short1.wav short2.wav short3.wav long.wav

La solution vient de Comment puis-je ajouter un groupe de fichiers .wav tout en conservant l'ordre numérique (non paginé à zéro) ?

19voto

slhck Points 209720

En Mentions du wiki FFmpeg en utilisant le concat n'est pas possible avec tous les types de fichiers. Il fonctionne bien avec la plupart des conteneurs et flux binaires MPEG, mais évidemment pas avec les fichiers WAV avec audio PCM.

Vous ne devez pas nécessairement créer un fichier temporaire et l'utiliser. Avec Bash (ou d'autres interpréteurs de commandes qui prennent en charge la fonction substitution de processus ), vous pouvez tout faire en une seule commande :

ffmpeg -f concat -i <( for f in *.wav; do echo "file '$(pwd)/$f'"; done ) output.wav

Le processus de substitution <( ) crée un fichier - ou, plus précisément, un descripteur de fichier - à la volée. ffmpeg peut lire. Ce fichier contiendra le chemin d'accès à chaque .wav dans le répertoire courant. Nous devons le préfixer avec $(pwd) pour obtenir le chemin correct relatif à votre répertoire courant, et non relatif au descripteur de fichier.

Bien sûr, la commande dans la substitution peut être changée en quelque chose d'autre.

2voto

Guest Points 1

Une autre option consiste à utiliser concat

ffmpeg -i "concat:fichier1.mp3|file2.mp3|file3.mp3" -acodec copy out.mp3

1voto

bevhoward Points 1

Dans le Cmd.EXE .BAT de Win8 script :

Rem Get number of source files
For /F %%A In ('Dir *.3gp /B /A-D ^| Find /C /V ""') Do      Set FilCnt=%%A

Rem Build list of source filenames
Set Lst=
For    %%A In (     *.3gp                          ) Do Call Set Lst=%%Lst%% -i %%A

Rem Concat and Convert sources to target
FFMPeg.EXE %Lst% -filter_complex concat=n=%FilCnt%:v=0:a=1 -vn Output.OGG

De cette façon, vous n'avez pas à vous soucier des noms des fichiers sources ou du paramètre concat-count.

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