1

В моем приложении я записываю видео с помощью камеры устройства и AVCaptureSession для сохранения. Короче говоря, мне нужно сначала вырезать x секунд этого записанного клипа. Я не хочу, чтобы у пользователя было представление «редактирование видео», и это не «фиксированное» количество времени для каждого слова, но в конце дня я остаюсь здесь с CMTime со значением от того, сколько я должен вырезать с начала клипа. Я смотрел на AVAssetWriter и т. Д., Но не повезло. Для воспроизведения, я думаю, [player seekToTime:time]; будет делать, но мне нужно, чтобы фактическое видео было time длительность короче, вырезанная с самого начала. Какой метод или где я могу получить документацию для этого?Сократите/отредактируйте видео, записанное как AVCaptureMovieFileOutput с фиксированным временем

ответ

0

Вы пробовали AVMutableComposition? Тем не менее, у него будет время обработки. Что-то вроде:

// get your asset 
AVAsset *asset = [AVAsset assetWithURL:yourURL]; 

// get asset tracks 
AVAssetTrack *assetTrackVideo = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; 

AVAssetTrack *assetTrackAudio = [[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]; 

// create composition 
AVMutableComposition *composition = [AVMutableComposition composition]; 

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

AVMutableCompositionTrack *trackAudio = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; 

// YOUR_DURATION is something like CMTimeSubstruct(asset.duration, YOURTIME_START); 
[trackVideo insertTimeRange:CMTimeRangeMake(YOURTIME_START, YOUR_DURATION) 
        ofTrack:assetTrackVideo 
        atTime:kCMTimeZero 
         error:nil]; 

[trackAudio insertTimeRange:CMTimeRangeMake(YOURTIME_START, YOUR_DURATION) 
        ofTrack:assetTrackAudio 
        atTime:kCMTimeZero 
         error:nil]; 

// do the orientation change if needed 

NSString* filename = [NSString stringWithFormat:@"videoFileName-%d.mov",arc4random() % 1000]; 
NSString* path = [NSTemporaryDirectory() stringByAppendingPathComponent:filename]; 

NSURL *exporterURL = [NSURL fileURLWithPath:path]; 

// Create exporter 
AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetHighestQuality]; 
exporter.outputURL = exporterURL; 
exporter.outputFileType = AVFileTypeQuickTimeMovie; 
exporter.shouldOptimizeForNetworkUse = YES; 

[exporter exportAsynchronouslyWithCompletionHandler:^{ 

     // NSLog(@"Finished Output composition with error '%@' reason '%@'", exporter.error.localizedDescription,exporter.error.localizedFailureReason); 
    }]; 
+1

Спасибо. Не было необходимости в всех дорожках и т. Д., Хотя, только актив и AVAssetExportSession, он имеет переменную 'timeRange', и я мог бы легко ввести начальные и конечные позиции. – Sti

+0

Полезно знать;) спасибо – Laz

 Смежные вопросы

  • Нет связанных вопросов^_^