2

既存のビデオクリップをトリミングして、クリップを元のファイルと同じ場所に再保存しようとしています。ただし、アプリを実行すると、次のエラーが発生します。

キャッチされていない例外 '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 を使用するのはこれが初めてなので、助けていただければ幸いです。

4

1 に答える 1

5

AVMediaTypeVideo「出力ファイルタイプ」ではなく「メディアタイプ」です。元のビデオには、タイプが AVMediaTypeVideo のトラックがあります。元の動画のタイプは ではありませんAVMediaTypeVideo

outputFileTypeAVAssetExportSessionのは type の定数ですNSString。許可される値は、AVFoundation/AVMediaFormat.h にリストされています。ビデオの場合は、次のとおりです。

  • AVFileTypeQuickTimeMovie
  • AVFileTypeMPEG4
  • AVFileTypeAppleM4V

AVAssetExportSessionに使用できる値の1 つを選択する必要がありますoutputFileType

于 2014-09-24T13:47:53.557 に答える