2010-11-01 6 views
4

J'ai mélangé avec succès une vidéo et une piste audio ensemble et l'ai exporté dans un nouveau fichier .m4v.AVMutableComposition - deux pistes audio parallèles sont-elles possibles?

Mon problème est maintenant, que je veux mélanger le même fichier vidéo et 2 fichiers audio, qui sont deux AVAssetTrack et ont les mêmes lignes de temps, ensemble. Comme vous le faites dans un éditeur audio où vous pouvez faire un mixage de deux fichiers audio ou plus, et vous obtenez un fichier fusionné.

Est-ce possible? Si oui, comment dois-je procéder? À l'heure actuelle, je n'entends qu'un seul fichier sonore, mais pas les deux. A propos: ma cible est d'inclure "simplement" un fichier son supplémentaire à une vidéo qui a déjà du son et de le mixer avec le nouveau fichier son ensemble. Mais il semblerait qu'un AVAssetTrack permette seulement l'audio ou la vidéo, donc j'ai fait un nouveau AVAssetTrack audio hors de la vidéo originale. Peut-être que c'est faux ...

Merci d'avance!

Répondre

8

Eh bien c'est difficile de vous aider sans voir votre code. Peut-être que ce code pourrait aider:

AVMutableComposition* composition = [AVMutableComposition composition]; 

    AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:videoURL options:nil]; 
    AVURLAsset* audioAsset1 = [[AVURLAsset alloc]initWithURL:audioURL1 options:nil]; 
    AVURLAsset* audioAsset2 = [[AVURLAsset alloc]initWithURL:audioURL1 options:nil]; 

    AVMutableCompositionTrack *compositionVideoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; 

     NSError* error = NULL; 

     [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero,videoAsset.duration) 
             ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo]objectAtIndex:0] 
             atTime:kCMTimeZero 
AVMutableCompositionTrack *compositionAudioTrack1 = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; 

     [compositionAudioTrack1 insertTimeRange:CMTimeRangeMake(kCMTimeZero,audioAsset1.duration) 
             ofTrack:[[audioAsset1 tracksWithMediaType:AVMediaTypeAudio]objectAtIndex:0] 
             atTime:kCMTimeZero 
             error:&error]; 

AVMutableCompositionTrack *compositionAudioTrack2 = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; 

     [compositionAudioTrack2 insertTimeRange:CMTimeRangeMake(kCMTimeZero,audioAsset2.duration) 
             ofTrack:[[audioAsset2 tracksWithMediaType:AVMediaTypeAudio]objectAtIndex:0] 
             atTime:kCMTimeZero 
             error:&error]; 

Maintenant, juste exporter cette composition avec AVExportSession. Et n'oubliez pas de libérer les actifs.

+0

Salut, merci pour la réponse. Je vais essayer ce week-end. – Micko

+0

Salut Steve, j'ai essayé avec le code. Lorsque j'essaie d'exécuter le "[[audioAsset1 tracksWithMediaType: AVMediaTypeAudio] objectAtIndex: 0]", il donne une erreur (index 0 au-delà des limites du tableau vide). Mais lorsque j'essaie d'imprimer l'audioAsset1 dans la console, il affiche "". J'ai vérifié avec le chemin, ce fichier est là. quelle est mon erreur? s'il vous plaît dites-moi. – jfalexvijay

+0

Je reçois ces erreurs lorsque le fichier que j'ai charger à l'actif n'a pas de type de données pris en charge si ce type, essayez de vérifier le fichier – Steve

Questions connexes