У меня есть видеофайл, который я могу загрузить в AVAsset. Я хочу изменить скорость при воспроизведении этого видео и удвоить его скорость, чтобы, если видео было 10 секунд, оно ускорилось бы до 5 секунд.Как увеличить скорость видео при сохранении с помощью AVAssetExportSession
Вот код, который я пытаюсь использовать, может ли кто-нибудь сказать мне, где я буду не так?
Является ли продолжительность кадра собственностью, необходимой мне для достижения моей цели.
AVAsset *anAsset = self.moviePlayer.currentItem.asset;
NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:anAsset];
if ([compatiblePresets containsObject:AVAssetExportPreset640x480]) {
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]
initWithAsset:anAsset presetName:AVAssetExportPreset640x480];
// Implementation continues.
NSString *tmpStr = [[aclip selectedTakeUrl] stringByReplacingOccurrencesOfString:@".m4v" withString:@""];
NSString *filePath = [NSString stringWithFormat:@"%@_applied.m4v", tmpStr];
exportSession.outputURL = [NSURL fileURLWithPath:filePath];
AVMutableVideoComposition *vidcomp = [AVMutableVideoComposition videoCompositionWithPropertiesOfAsset:anAsset];
vidcomp.frameDuration = CMTimeMake(1, 24);
//self.moviePlayer.currentItem.videoComposition = vidcomp;
exportSession.videoComposition = vidcomp;
//exportSession.videoComposition.frameDuration = CMTimeMake(1, 50);
// what is the song URL before loading startRecordingViewController?
NSLog(@"From Save settgins Choose Song -Song URL : %@", exportSession.outputURL);
// NSLog(@"start time%f, end time %f", CMTimeGetSeconds(self.startTime),CMTimeGetSeconds(self.endTime));
exportSession.outputFileType = AVFileTypeMPEG4;
//CMTimeRange range = CMTimeRangeMake(CMTimeMake(0.0, 1), CMTimeMake(diffTime/currentround,1));
// startTime and endTime is the duration that we need to save.
//exportSession.timeRange = range;
[exportSession exportAsynchronouslyWithCompletionHandler:^{
switch ([exportSession status]) {
case AVAssetExportSessionStatusCompleted:
NSLog(@"Export Completed");
break;
case AVAssetExportSessionStatusWaiting:
NSLog(@"Export Waiting");
break;
case AVAssetExportSessionStatusExporting:
NSLog(@"Export Exporting");
break;
case AVAssetExportSessionStatusFailed:
{
NSError *error = [exportSession error];
NSLog(@"Export failed: %@", [error localizedDescription]);
break;
}
case AVAssetExportSessionStatusCancelled:
NSLog(@"Export canceled");
break;
default:
break;
}
dispatch_async(dispatch_get_main_queue(), ^{
//[activityIndicator stopAnimating];
//CMTime range = CMTimeSubtract(self.endTime, self.startTime);
//NSUInteger theLength = (int)CMTimeGetSeconds(range);
//[ self.songPickedDelegate songPickerDidMakeSelection:self.songTitle :self.audioPath :theLength];
});
//[exportSession release];
}];
}
уже сделано спасибо – Jatin
@ user3196356 У вас есть пример этого? для этого мало примеров, и чтение документов, похоже, не помогает. Если необходимо, дайте мне знать, и я поделюсь своим кодом, но он не работает вообще, поэтому нет смысла –
@PranoyC использовать этот код для запуска https://developer.apple.com/library/content/samplecode/AVSimpleEditoriOS/Introduction /Intro.html – thedeveloper3124