Ajoutez 1 seconde de silence à l'audio via FFmpeg

14

J'ai un fichier audio AC3 5.1 dans lequel j'aimerais insérer x secondes d'audio silencieux au début. Cela n'a rien à voir avec le multiplexage vidéo, donc son décalage est inutile car il semble ne fonctionner qu'avec un flux audio accompagnant un flux vidéo. Je voudrais y parvenir avec ffmpeg. Des idées?

Makaveli84
la source
ffmpeg ajoutera ou joindra le même codec au même débit?
Psycogeek
Je suppose ... @Psycogeek
Makaveli84
Et est-il capable de générer un fichier audio silencieux du même taux de codec et du même canal? ffmpeg.org/ffmpeg-filters.html#Examples-34 ? Moi-même, j'utilise des méthodes GUI, mais faire ce que votre demande devrait être assez facile et très rapide, tant que les paramètres sont tous les mêmes. Voici où il est affiché en l'ajoutant à un Mov. stackoverflow.com/questions/12368151/… dans les réponses
Psycogeek
Utilisez Ardour pour ajouter tout ce que vous voulez. Si vous voulez aussi des effets, téléchargez les plugins Calf ..
tableau de bord

Réponses:

23

Utilisation du démultiplexeur concat (ajouter du silence au début et / ou à la fin)

Utilisez le démultiplexeur concat si vous voulez éviter de ré-encoder le segment principal. Cette méthode fonctionne pour ajouter du silence au début ou à la fin (ou aux deux).

  1. Utilisez le filtre de source audio anullsrc pour créer l'audio silencieux. Vous devrez faire correspondre le format, la disposition des canaux et la fréquence d'échantillonnage du fichier audio principal. Exemple pour faire un 5.1 canaux, 48000 Hz d'échantillonnage, 1 seconde de fichier audio AC3 silencieux (car c'était le format dans la question):

    ffmpeg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 1 silence.ac3
    
  2. Maintenant, créez un fichier texte nommé input.txtqui répertorie les fichiers à concaténer:

    file 'silent.ac3'
    file 'main.ac3'
    

    Si vous voulez le silence à la fin, changez simplement l'ordre des fichiers input.txt.

  3. Vous pouvez maintenant concaténer les fichiers à l'aide du démultiplexeur concat :

    ffmpeg -f concat -i input.txt -codec copy output.ac3
    

Utilisation du filtre concat (ajouter du silence au début et / ou à la fin)

Utilisez le filtre concat si vous voulez tout faire en une seule commande, ou si vous voulez sortir dans un format différent de l'entrée (puisque cette méthode recode de toute façon). Cette méthode fonctionne pour ajouter du silence au début ou à la fin ou aux deux.

Exemple pour ajouter 1 seconde de silence au début d'une entrée de fréquence d'échantillonnage stéréo à 44100 Hz:

ffmpeg -f lavfi -t 1 -i anullsrc=channel_layout=stereo:sample_rate=44100 -i audio.oga -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" output.m4a
  • Le filtrage entraînera un ré-encodage, contrairement au démultiplexeur concat.

  • Dans anullsrc, il est recommandé de faire correspondre la disposition des canaux et la fréquence d'échantillonnage de l'entrée.

  • Si vous voulez ajouter le silence à la fin au lieu simplement changer l'ordre des entrées données au filtre concat: [1:a][0:a]concat=n=2:v=0:a=1.


Utilisation du filtre Adelay (ajoutez du silence au début)

Utilisez le filtre audio adelay si vous voulez tout faire en une seule commande, ou si vous voulez sortir en un format différent de l'entrée (puisque cette méthode recode de toute façon). Cela ne fonctionne que pour ajouter du silence au début d'un fichier.

Cet exemple ajoutera 1 seconde de silence au début d'une entrée stéréo:

ffmpeg -i input.flac -af "adelay=1000|1000" output.opus
  • Le filtrage entraînera un ré-encodage, contrairement au démultiplexeur concat.
  • La valeur est en millisecondes. Les utilisateurs de versions récentes (git master actuel ou quelque chose de plus récent que FFmpeg 4.1) peuvent à la place utiliser 1spendant une seconde.
  • Chaque canal a besoin de son propre retard. Par exemple, une entrée mono utiliserait adelay=1000, tandis qu'une entrée 5.1 utiliserait adelay=1000|1000|1000|1000|1000|1000.

Utilisation du filtre apad (ajoutez du silence à la fin)

Utilisez le filtre audio apad si vous souhaitez tout faire en une seule commande, ou si vous souhaitez sortir vers un format différent de celui de l'entrée (puisque cette méthode recode de toute façon). Cela ne fonctionne que pour ajouter du silence à la fin d'un fichier.

Cet exemple ajoutera 1 seconde de silence à la fin:

ffmpeg -i input.wav -af "apad=pad_dur=1" output.m4a
  • Le filtrage entraînera un ré-encodage, contrairement au démultiplexeur concat.

  • L' pad_duroption a été ajoutée après la sortie de FFmpeg 4.1, vous devrez donc utiliser une version récente de la branche git master ou attendre FFmpeg 4.2.

llogan
la source
5
[Parsed_aevalsrc_0 @ 000000000195fec0] This syntax is deprecated. Use '|' to sep arate the list items.La nouvelle syntaxe est-i "aevalsrc=0|0|0|0|0|0:d=1"
Steven Penny
Puis-je faire cela pour plusieurs fichiers à la fois?
Aaron Franke
@AaronFranke Oui, mais ffmpeg n'a pas une telle fonctionnalité en soi. Vous devez utiliser votre shell ou un langage de script pour boucler la commande. Votre système d'exploitation est inconnu, donc je ne peux pas vous donner une solution clé en main, mais voir Comment convertir un répertoire entier avec ffmpeg? pour quelques informations générales (sautez la réponse acceptée car elle est inutilement complexe et inefficace).
llogan