首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将筛选器应用于AVVideoComposition时崩溃

将筛选器应用于AVVideoComposition时崩溃
EN

Stack Overflow用户
提问于 2017-10-27 17:58:48
回答 3查看 1.6K关注 0票数 0

我想对AVVideoComposition by function应用过滤器:

init(asset: AVAsset, applyingCIFiltersWithHandler: (AVAsynchronousCIImageFilteringRequest) -> Void)

其中,assetAVComposition。当AVPlayerItem使用videoComposition播放此组合时,应用程序崩溃并出现错误:

reason: '*** -[AVCoreImageFilterCustomVideoCompositor startVideoCompositionRequest:] Expecting video composition to contain only AVCoreImageFilterVideoCompositionInstruction'

我想知道如何修复崩溃。

PS:我在组合中有两个videoTracks,每个timeRange都有它的指令

EN

回答 3

Stack Overflow用户

发布于 2017-11-16 20:51:16

我猜您正在尝试将AVVideoCompositionLayerInstruction添加到AVVideoComposition中。

首先尝试简单的方法,看看是否需要进行任何更改:

代码语言:javascript
复制
AVURLAsset *asset = [AVURLAsset assetWithURL:videoURL];
CIFilter *filter = [CIFilter filterWithName:@"CIHueAdjust"]; // the filter you want to add: https://developer.apple.com/library/content/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/
AVMutableVideoComposition *videoComposition = [AVMutableVideoComposition videoCompositionWithAsset:asset applyingCIFiltersWithHandler:^(AVAsynchronousCIImageFilteringRequest * _Nonnull request) {
    // set filter input image
[filter setDefaults];
    [filter setValue:sourceImage forKey:kCIInputImageKey];

    // hue
    NSNumber *angle = [NSNumber numberWithFloat:0.8];
    [filter setValue:angle forKey:kCIInputAngleKey];

    CIImage *outputImage = filter.outputImage;
    [request finishWithImage:outputImage context:nil];
}];

AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPreset1920x1080];
exportSession.outputFileType = AVFileTypeQuickTimeMovie;
exportSession.outputURL = outputURL;
exportSession.videoComposition = videoComposition;

// export the session async
[exportSession exportAsynchronouslyWithCompletionHandler:^{
    switch (exportSession.status) {
        case AVAssetExportSessionStatusCompleted:
            NSLog(@"Yeah!");
            break;

        default:
            NSLog(@"Nooo!");
            break;
    }
}];
票数 1
EN

Stack Overflow用户

发布于 2019-01-31 10:26:05

您不能同时使用AVVideoCompositionLayerInstructionapplyingCIFiltersWithHandler

因此,您需要在过滤器中直接应用变换。

这可以通过将其应用于源图像来完成。

request.sourceImage.transformed(by: transform)

票数 1
EN

Stack Overflow用户

发布于 2018-06-11 15:54:07

AVMutableVideoComposition:videoCompositionWithAsset:applyingCIFiltersWithHandler只支持iOS 9+,如果你只需要用CIFilter导出视频,也没问题。

配置更多的videoComposition指令就会变现,比如给AVAssetTrack添加一种roateLayerInstruction。

我在这种情况下也有同样的问题,自定义AVVideoCompositing可能是更好的解决方案。一些关于如何自定义videoCompositor demo1 demo2的很好的演示。

这周我正在解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46972399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档