2011-04-07 15 views
7

J'utilise l'outil sox et je voudrais fusionner deux fichiers audio, disons que long.ogg et short.ogg à la sortie d'un fichier output.ogg. Ceci est très facile en utilisant $ sox -m long.ogg short.ogg output.ogg.Sox: fusionner deux fichiers audio avec un tampon

La chose est, je voudrais que le short.ogg d'être joué au bout de n secondes (alors que long.ogg devrait commencer dès le début). Pour ce faire, j'ai trouvé l'effet . Mais je ne comprends pas la syntaxe pour retarder seulement le fichier d'entrée short.ogg, pas le long.ogg.

J'ai trouvé un (sale) façon de le faire (avec n = 6):

$ sox short.ogg delayed.ogg pad 6 
$ sox -m long.ogg delayed.ogg output.ogg 

Je voudrais ne pas avoir à créer un fichier intermédiaire. Merci d'avance pour votre aide.

Répondre

7

Grâce à icyrock, j'ai réussi à trouver une solution. J'utilise:

$ sox short.ogg -p pad 6 0 | sox - -m long.ogg output.ogg 

Pour les pistes multiples (crédits à Orlando):

$ sox starts-last.mp3 -p pad 2 0 | sox - -m starts-second.mp3 -p pad 2 0 | sox - -m starts-first.mp3 combined.mp3 
+2

comment cela avec plusieurs pistes? 3,4,5 pistes – Mike

+0

Pour plusieurs pistes: sox starts-last.mp3 -p pad 2 0 | sox - -m commence-second.mp3 -p pad 2 0 | sox - -m commence-premier.mp3 combiné.mp3 – Orlando

7

Vous devriez être capable de faire quelque chose comme: l'option

sox short.ogg -p pad 0 6|sox - long.ogg output.ogg 

-p SOX est utilisé pour la tuyauterie - essentiellement, il dit sox d'utiliser stdout comme la sortie. En utilisant - en tant qu'entrée du second sox, on dit en fait que l'entrée est stdin (ce qui se trouve être la sortie standard de la précédente sox, comme nous le faisons avec |). pad 0 6 indique au pad 0 seconde au début et 6 secondes à la fin.

Espérons que cela aide.

+0

Merci! J'ai dû ajouter l'option de mixage '-m' car sans elle, tout le son était retardé. S'il vous plaît voir mon edit. – zopieux

+0

Je n'ai pas lu la question - ce que j'ai écrit va jouer short.ogg, attendez 6 secondes, puis jouer long.ogg, en écrivant le résultat entier à output.ogg. Quoi qu'il en soit, heureux que vous ayez trouvé la solution! Je suggère de l'ajouter comme une réponse et de choisir officiellement comme solution - pour les autres avec le même problème. –

0

Voici une autre solution bénéficiant de l'utilisation des guillemets doubles. Il rend la commande beaucoup plus lisible et très facile à étendre:

sox −−combine sequence "|sox input/odin.wav -p pad 0 1" "|sox input/dva.wav -p pad 0 1" "|sox input/tri.wav -p pad 0 1" output/test.wav 

Ce serait concaténer les trois fichiers, avec une pause de 1 seconde après chaque ODIN (silence, DVA, le silence, le tri, le silence.)

Appliqué au poste d'origine, nous obtiendrions:

sox −−combine sequence "|sox long.ogg -p pad 0 6" "|sox short.ogg -p pad 0 1" newfile.ogg 

(. Testé sur OK SOX 14.4.1 sous Windows)

J'ai à peine vu aucun exemple SOX en utilisant des guillemets doubles, donc Je h ope cela aide quelqu'un!

0

Commande RAN across delay également.

Vous pouvez effectuer les opérations suivantes: sox.exe -m short.ogg long.ogg retard 6

Cela va fusionner les deux fichiers et short.ogg commencera 6 secondes en temps.ogg

0

Parce que je ne suis pas autorisé à commenter encore, je voudrais juste dire que j'aime la réponse de Fabien car il peut aussi être utilisé avec le « NULL » soundfile: par exemple,

sox --combine concatenate "|sox -n -p synth 1 sine 300" "|sox -n -p synth 1 sine 400" useful.wav 

Écrira 1 seconde d'un signal sinusoïdal à 300 Hz suivi de 1 seconde d'un signal sinusoïdal à 400 Hz et écriture dans le fichier "utile.wav".

sox -n -p synth 1 sine 300 | sox --combine concatenate - farts.wav synth 1 sine 400 

N'écrira que 1 seconde d'une onde sinusoïdale à 400 Hz dans le fichier "farts.wav". Le fichier manque la première onde sinusoïdale à 300 Hz.

Questions connexes