私の頭を壁に何回か打ち、処理に時間がかかりすぎるさまざまな方法を試した後(MP3ファイルを別の音量に変更する)答えを持つ人を見つけることを願う。AVMutableCompositionでトラックの音量を変更するには
私はAVMutableCompositionを持っており、オーディオとビデオ用のAVMutableCompositionTrackがいくつか入っています。ミキシングは正常に機能しますが、オーディオトラックの音量の調整は機能していません。ここで
は、私が使用するコードは次のとおりです。
AVMutableComposition* mixComposition = [AVMutableComposition composition];
AVURLAsset *soundTrackAsset = [[AVURLAsset alloc]initWithURL:trackTempProcessedURL options:nil];
//ADDING AUDIO
AVMutableCompositionTrack *compositionAudioSoundTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:trackIDSoundTrack];
[compositionAudioSoundTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, audioAsset.duration)
ofTrack:[[soundTrackAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]
atTime:CMTimeAdd(cmTimeDifference,startTime) error:nil];
NSArray *tracksToDuck = [mixComposition tracksWithMediaType:AVMediaTypeAudio];
NSMutableArray *trackMixArray = [NSMutableArray array];
for (NSInteger i = 0; i < [tracksToDuck count]; i++) {
AVMutableAudioMixInputParameters *trackMix = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:[tracksToDuck objectAtIndex:i]];
[trackMix setVolume:volume atTime:kCMTimeZero];
[trackMixArray addObject:trackMix];
}
audioMix = [AVMutableAudioMix audioMix];
audioMix.inputParameters = trackMixArray;
//ADDING VIDEO
AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:frontAssetURL options:nil];
[compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration)
ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]
atTime:startTime error:nil];
//EXPORTING
_assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName: AVAssetExportPresetPassthrough];
_assetExport.outputFileType = AVFileTypeQuickTimeMovie;
_assetExport.outputURL = exportUrl;
_assetExport.shouldOptimizeForNetworkUse = YES;
_assetExport.audioMix = audioMix;
[_assetExport exportAsynchronouslyWithCompletionHandler:
^(void) {
...
すべては、オーディオミキサーなしで罰金ミックスが、私は、ボリュームを変更しようとすると、輸出は私にエラーを与える:
AVFoundationErrorDomain Error: 11822
ハックで作業することができました。ビデオなしでオーディオファイルをまとめてから、2回目のパスを実行してビデオをマージします。私は良い方法があることを願っています。 – Dex
ありがとうDex私はそれを試みます。 –
あなたはこれを動作させました..? –