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

잘 알고 있습니다;) thanks – Laz