既存のビデオクリップをトリミングして、クリップを元のファイルと同じ場所に再保存しようとしています。ただし、アプリを実行すると、次のエラーが発生します。
キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '出力ファイルの種類が無効です'
推奨事項を見つけましたが、出力ファイル タイプを AVMediaTypeVideo から変更する必要があります。これは元のビデオ ファイルが保存されているものであるため、AVMediaTypeVideo を保持したいと思います。
これは私がこれまでに持っているものです:
AVMutableComposition *finalClip = [[AVMutableComposition alloc]init];
NSString *outputPath = [[NSString alloc] initWithFormat:@"%@%@", NSTemporaryDirectory(), @"output.mov"];
NSURL *outputURL = [[NSURL alloc] initFileURLWithPath:outputPath];
AVURLAsset *videoclip = [AVURLAsset URLAssetWithURL:outputURL options:nil];
AVMutableCompositionTrack *finalClipTrack = [finalClip addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
[finalClipTrack insertTimeRange:CMTimeRangeMake(CMTimeMake((duration*indexNum), 1), CMTimeMake(duration,1)) ofTrack:[[videoclip tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:kCMTimeZero error:nil];
NSString *outputPathwe = [[NSString alloc] initWithFormat:@"%@%@", NSTemporaryDirectory(), @"outputwe.mov"];
NSURL *outputURLwe = [[NSURL alloc] initFileURLWithPath:outputPathwe];
if ([[NSFileManager defaultManager] fileExistsAtPath:outputPathwe])
[[NSFileManager defaultManager] removeItemAtPath:outputPathwe error:nil];
AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:finalClip presetName:AVAssetExportPresetHighestQuality];
exporter.outputFileType = AVMediaTypeVideo;
exporter.outputURL=outputURLwe;
[exporter exportAsynchronouslyWithCompletionHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
[self exportDidFinish:exporter];
});
}];
見逃しているのは本当に簡単なことだと思います。AVFoundation を使用するのはこれが初めてなので、助けていただければ幸いです。