我这样创建带有CIFilters的AVVideoComposition:

 videoComposition = AVMutableVideoComposition(asset: asset, applyingCIFiltersWithHandler: {[weak self] request in  

            // Clamp to avoid blurring transparent pixels at the image edges  
            let source = request.sourceImage.clampedToExtent()  
            let output:CIImage  

            if let filteredOutput = self?.runFilters(source, filters: filters)?.cropped(to: request.sourceImage.extent) {  
                output = filteredOutput  
            } else {  
                output = source  
            }  

            // Provide the filter output to the composition  
            request.finish(with: output, context: nil)  
        })  

然后,为了正确处理旋转,我创建了传递指令,该指令在传递层上设置身份转换。

     let passThroughInstruction = AVMutableVideoCompositionInstruction()  
     passThroughInstruction.timeRange = CMTimeRangeMake(start: CMTime.zero, duration: asset.duration)  
     let passThroughLayer = AVMutableVideoCompositionLayerInstruction(assetTrack: videoTrack)  
            passThroughLayer.setTransform(CGAffineTransform.identity, at: CMTime.zero)   
     passThroughInstruction.layerInstructions = [passThroughLayer]  
            videoComposition.instructions = [passThroughInstruction]  

问题是它崩溃并显示错误:

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

我的问题是,如果我未指定此passThroughInstruction,则如果输入资产的视频轨道包含指定90度旋转的preferredTransform,则输出不正确。 如何将视频合成与可正确处理视频轨道的preferredTransform的Core Image滤镜一起使用?

编辑:该问题看起来相似,但不同于涉及播放的其他问题。 就我而言,回放很好,但渲染会产生失真的视频。

#1楼 票数:0

好吧,我找到了真正的问题。 问题是应用由AVMutableVideoComposition(asset :, ApplyingCIFiltersWithHandler :)函数返回的videoComposition隐式创建一个合成指令,该指令可物理旋转CIImage,以防在视频轨道上通过preferredTransform施加旋转变换的情况。 是否应该执行此操作尚有争议,因为preferredTransform是在播放器级别应用的。 作为解决方法,除了答案中建议的以外。 我必须调整通过videoSettings中的AVVideoWidthKey,AVVideoHeightKey传递给AVAssetReader / Writer的宽度和高度。

  ask by Deepak Sharma translate from so

未解决问题?本站智能推荐:

1回复

AVVideoComposition与CIFilters崩溃

我这样创建带有CIFilters的AVVideoComposition: 然后,为了正确处理旋转,我创建了传递指令,该指令在传递层上设置身份转换。 问题是它崩溃并显示错误: 我的问题是,如果我未指定此passThroughInstruction,则如果输入资产的视频轨道包
1回复

AVVideoComposition在iOS 8中不起作用

我正在开发App,我正在编写视频并导出到目录。 它在iOS 7中运行良好,但在iOS 8中失败。 以下是我的代码: 它给出了“媒体数据无法解码。它可能已损坏。” 在iOS 8上运行时出错。
5回复

应用AVVideoComposition后旋转视频

将AVVideoComposition应用到我的AVPlayerItem ,我应用的过滤器确实有效,但视频在AVPlayerLayer旋转。 我知道问题不在于过滤帧,因为如果我在UIImageView显示帧,则帧会100%正确呈现。 视频显示正确, 直到我应用videoComposi
1回复

使用AVVideoComposition产生Kens烧录效果吗?

我目前正在使用AV Foundation将图像导出为视频。 现在,当这些图像导出为视频时,我想为这些图像添加Kens Burn效果。 据我所知,这可以通过AVVideoComposition实现,但是我不确定如何开始。
1回复

Swift 3:如何使用AVVideoComposition导出文本视频

我正在尝试使用AVVideoComposition在视频顶部添加一些文本并保存视频。 这是我使用的代码: 我 创建一个AVMutableComposition and AVVideoComposition II 设置图层 三 。 使用AVMutbaleVideoComp
1回复

AVAssetExporter在设置videoComposition时崩溃

我正在使用AVFoundation裁剪和旋转视频,但是在设置AVAssetExporter的videoComposition属性时我收到了SIGABRT错误。 有任何想法吗? 谢谢,丹尼尔。
1回复

将CIFilters切换到视频

有人可以帮助我了解在不重新启动视频播放器的情况下切换CIFilter的正确方法吗? 我在视图中播放本地视频。 如果在集合视图中点击一个单元格,视频将更改CIFilter。 我的密码 代码效果很好,效果正确 但是我有很多CIFilters的collectionview。
4回复

如何在AVVideoComposition的applyCIFiltersWithHandler中触发重绘过滤器?

我正在使用Swift在视图的AVPlayerLayer中显示来自AVPlayer的内容。 关联的AVPlayerItem有一个videoComposition,并且用于创建它的代码的略微简化版本(没有错误检查等)如下所示: 当AVPlayer正在播放或寻找时,这一切都按预期工作。 如
2回复

AVVideoComposition应用过滤器处理程序不调用

我想在视频中添加叠加图像。 我使用AVVideoComposition和CIFilter来执行此操作,但是未调用AVAsynchronousCIImageFilteringRequest处理程序。 我放置了一些断点(debugPrint“ Here”行,request.finish),但是X
1回复

在 Swift 中从 UImage 数组创建视频时出现内存崩溃问题

我正在使用视频,我从 Uimage 数组创建视频。 它适用于少量图像,但大量(例如:100+ 个图像)由于内存问题而崩溃。 我在创建视频时进行了测试,内存越来越大,但在进程完成后,内存仍然是大小,而不是释放。 任何帮助将不胜感激谢谢 这是我的代码: //创建像素缓冲区