5

ビデオとオーディオ トラックをうまくミックスし、新しい .m4v ファイルにエクスポートしました。

私の問題は、同じビデオ ファイルと 2 つのオーディオ ファイル (2 つの AVAssetTrack であり、同じタイム ラインを持つ) を一緒にミックスしたいということです。2 つ以上のサウンド ファイルのミックスダウンを作成できるオーディオ エディターで行うように、1 つのマージされたファイルが得られます。

これは可能ですか?はいの場合、どのように進めればよいですか?

現時点では、先に進んだ後に 1 つのサウンド ファイルだけが聞こえます。両方ではありません。

ところで、私の目標は、既にサウンドが含まれているビデオに追加のサウンド ファイルを「単純に」含めて、新しいサウンド ファイルと一緒にミックスすることです。しかし、AVAssetTrack はオーディオまたはビデオのみを許可しているようです。そのため、元のビデオから新しいオーディオ AVAssetTrack を作成しました。多分これは間違っている...

前もって感謝します!

4

1 に答える 1

11

コードを見ずにあなたを助けるのは難しいです。たぶん、このコードが役立つかもしれません:

    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];

このコンポジションを AVExportSession でエクスポートするだけです。資産を解放することを忘れないでください。

于 2010-11-11T18:06:19.873 に答える