音频剪切
1.音频剪切比较简单传入音频文件和剪切的时间段就可以了
NSString *url = "音频源文件路径";
NSString *outPutPath = "音频前切完成输出文件路径";
NSURL *audioFileOutput = [NSURL fileURLWithPath:outPutPath];
[[NSFileManager defaultManager] removeItemAtURL:audioFileOutput error:NULL];
AVAsset *asset = [AVAsset assetWithURL:url];
AVAssetExportSession *exportSession = [AVAssetExportSession exportSessionWithAsset:asset
presetName:AVAssetExportPresetAppleM4A];
CMTimeRange exportTimeRange = CMTimeRangeFromTimeToTime(startTime, endTime);
exportSession.outputURL = audioFileOutput;
exportSession.outputFileType = AVFileTypeAppleM4A;
exportSession.timeRange = exportTimeRange;
[exportSession exportAsynchronouslyWithCompletionHandler:^{
if (AVAssetExportSessionStatusCompleted == exportSession.status) {
NSLog(@" FlyElephant \n %@", outPutPath);
} else if (AVAssetExportSessionStatusFailed == exportSession.status) {
NSLog(@"FlyElephant error: %@", exportSession.error.localizedDescription);
}
}];
音频的合成
1.音频的合成这里的背景是有一段录音需要加一个背景音乐,视频合成的也是一样的道理把音频源文件改成视频,然后相应的配置改成文件就好了。
NSString *exportPath = @"导出文件路径";
NSString *url = @"音频源文件路径";
NSURL *audioUrl = [NSURL fileURLWithPath:url];
NSURL *backPathUrl = [NSURL fileURLWithPath:backPath];
NSURL *exporAudiotPath = [NSURL fileURLWithPath:exportPath];
unlink([exportPath UTF8String]);
AVMutableComposition *mixComposition = [AVMutableComposition composition];
AVURLAsset *audioAsset = [[AVURLAsset alloc] initWithURL:audioUrl options:nil];
AVURLAsset *audioBack = [[AVURLAsset alloc] initWithURL:backPathUrl options:nil];
CMTimeRange audio_timeRange = CMTimeRangeMake(kCMTimeZero,audioAsset.duration);
AVAssetTrack *audioTrack = [[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
AVAssetTrack *audioBackTrack = [[audioBack tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
AVMutableCompositionTrack *audioCompositionTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
AVMutableCompositionTrack *audioCompositionBackTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[audioCompositionTrack insertTimeRange:audio_timeRange ofTrack:audioTrack atTime:kCMTimeZero error:nil];
[audioCompositionBackTrack insertTimeRange:audio_timeRange ofTrack:audioBackTrack atTime:kCMTimeZero error:nil];
AVMutableAudioMix *exportAudioMix = [AVMutableAudioMix audioMix];
AVAssetTrack *mixCompositionTrack = [[mixComposition tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:1];
AVMutableAudioMixInputParameters *exportAudioMixInputParameters = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:mixCompositionTrack];
[exportAudioMixInputParameters setVolumeRampFromStartVolume:0 toEndVolume:[AVAudioSession sharedInstance].outputVolume * 0.6 timeRange:audio_timeRange];
NSArray *audioMixParameters = @[exportAudioMixInputParameters];
exportAudioMix.inputParameters = audioMixParameters;
AVAssetExportSession* assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetAppleM4A];
assetExport.outputURL = exporAudiotPath;
assetExport.outputFileType = @"com.apple.m4a-audio";
assetExport.shouldOptimizeForNetworkUse = YES;
assetExport.audioMix = exportAudioMix;
[assetExport exportAsynchronouslyWithCompletionHandler:
^(void ) {
NSLog(@"?$");
NSLog(@"完成!输出路径==%@",exportPath);
if(completion)completion(exportPath);
}];
音频的淡入淡出
1.音频的淡入只需要设置音频音轨开始的音量从0到正常的音量,淡出只需要设置音轨音量从淡出时间到结束从正常音量到0就行了。
NSString *exportPath = @"音频导出文件路径";
NSString *exportPath = @"音频源文件路径";
NSInteger fadeInTime = 5;
NSInteger fadeOutTime = 5;
NSURL *audioUrl = [NSURL fileURLWithPath:url];
NSURL *exporAudiotPath = [NSURL fileURLWithPath:exportPath];
unlink([exportPath UTF8String]);
CMTime nextClipStartTime = kCMTimeZero;
AVMutableComposition *mixComposition = [AVMutableComposition composition];
AVURLAsset *audioAsset = [[AVURLAsset alloc] initWithURL:audioUrl options:nil];
CMTimeRange audioTimeRange = CMTimeRangeMake(kCMTimeZero,audioAsset.duration);
AVAssetExportSession* assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetAppleM4A];
assetExport.outputURL = exporAudiotPath;
assetExport.outputFileType = @"com.apple.m4a-audio";
assetExport.shouldOptimizeForNetworkUse = YES;
AVAssetTrack *audioTrack = [[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
AVMutableCompositionTrack *audioCompositionTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[audioCompositionTrack insertTimeRange:audioTimeRange ofTrack:audioTrack atTime:nextClipStartTime error:nil];
AVMutableAudioMix *exportAudioMix = [AVMutableAudioMix audioMix];
AVAssetTrack *mixCompositionTrack = [[mixComposition tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
AVMutableAudioMixInputParameters *exportAudioMixInputParameters = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:mixCompositionTrack];
CGFloat volume = [AVAudioSession sharedInstance].outputVolume;
if(fadeInTime > 0){
CMTime continueFadeInTime = CMTimeMakeWithSeconds(fadeInTime, 1);
[exportAudioMixInputParameters setVolumeRampFromStartVolume:0 toEndVolume:volume timeRange:CMTimeRangeMake(CMTimeMakeWithSeconds(0, 1), continueFadeInTime)];
}
if(fadeOutTime > 0){
CMTime continueFadeOutTime = CMTimeMakeWithSeconds(fadeOutTime, 1);
CMTime fadeOutStartTime = CMTimeSubtract(audioAsset.duration, continueFadeOutTime);
[exportAudioMixInputParameters setVolumeRampFromStartVolume:volume toEndVolume:0 timeRange:CMTimeRangeMake(fadeOutStartTime, continueFadeOutTime)];
}
NSArray *audioMixParameters = @[exportAudioMixInputParameters];
exportAudioMix.inputParameters = audioMixParameters;
assetExport.audioMix = exportAudioMix;
[assetExport exportAsynchronouslyWithCompletionHandler:
^(void ) {
NSLog(@"?$");
NSLog(@"完成!输出路径==%@",exportPath);
if(completion)completion(exportPath);
}];