我正在尝试将视频裁剪为一个框架,我将其缩放以匹配视频的自然尺寸比例。是否有直接的方法来裁剪视频而不处理各种疯狂的转换?
是否可以简单地裁剪AVVideoComposition(asset:applyingCIFiltersWithHandler:)
中的帧然后更改视频合成renderSize
?
如果没有,那么有什么替代方案?
答案 0 :(得分:0)
这完全取决于您呈现视频的方式。如果您使用AVSampleBufferDisplayLayer
,请设置其属性 - > videoGravity
至AVLayerVideoGravityResizeAspect
。
如果您使用CVImageBufferRef
,CVPixelBufferRef
或CIImage
进行渲染,那么我会这样做 - >
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)
希望确实回答了你的问题,只是澄清你想用什么玩家/方法实现的目标。
小心,
/安德斯