裁剪视频到框架

问题描述:

我试图裁剪视频到一个框架,我缩放以匹配视频的自然尺寸比例。是否有直接的方式来裁剪视频而不处理各种疯狂的转换?裁剪视频到框架

是否可以简单地裁剪AVVideoComposition(asset:applyingCIFiltersWithHandler:)中的帧,然后更改视频合成renderSize

如果没有,那么还有什么替代方案?

这一切都取决于你如何渲染你的视频。如果您使用AVSampleBufferDisplayLayer,则将其属性设置为 - >videoGravityAVLayerVideoGravityResizeAspect

如果从CVImageBufferRefCVPixelBufferRefCIImage渲染那么我这样做 - >

 CGFloat w = self.videoPreviewView.drawableWidth; 
     CGFloat h = self.videoPreviewView.drawableHeight; 
     CGFloat previewAspect = w/h; 
     CGRect drawRect = rect; 
     drawRect.origin.y += (drawRect.size.height - drawRect.size.width/previewAspect)/2.0; 
     drawRect.size.height = drawRect.size.width/previewAspect; 

然后渲染使用[self.ciContext drawImage:image inRect:CGRectMake(0, 0, w, h) fromRect:drawRect];

您也可以使用该方法AVMakeRect(Swift3,忘了Obj- C的名字) - >

let yourDrawableFrame:CGRect = AVMakeRect(aspectRatio: video.size, insideRect: theViewToRenderIn.frame) 

希望没有回答你的问题,其他的只是澄清w你想用什么玩家/方法实现的帽子。

保重,

/安德斯

+0

我要导出该文件裁剪成合适的尺寸。这种情况来自哪里?我可以将其设置为AVVideoConpositionInruction吗?这是否考虑了风景视频以及它们如何可能是肖像,但是有一些图层蒙版? – IHaveAQuestion

+0

由于您在播放过程中轻松裁剪和操作,因此您要求的内容很复杂且通常不必要,这很简单。如果您裁剪视频,然后想要将其保存为新文件,则需要先解码,然后剪裁然后进行编码,然后另存为新文件。我会看看https://developer.apple.com/library/content/samplecode/AVBasicVideoOutput/Introduction/Intro.html#//apple_ref/doc/uid/DTS40013109-Intro-DontLinkElementID_2这是一个关于如何抓住像素.. –

+0

然后使用上面提到的作物计算。然后编码例如 - > https://github.com/manishganvir/iOS-h264Hw-Toolbox。 为什么你需要保存裁剪的视频?为什么不在播放时裁剪? –