将视频裁剪为帧
Posted
技术标签:
【中文标题】将视频裁剪为帧【英文标题】:Crop video to frame 【发布时间】:2017-08-31 03:21:26 【问题描述】:我正在尝试将视频裁剪为一个帧,我会对其进行缩放以匹配视频的自然大小比例。有没有一种直接的方法来裁剪视频而无需处理各种疯狂的转换?
是否可以简单地裁剪AVVideoComposition(asset:applyingCIFiltersWithHandler:)
中的帧,然后更改视频构图renderSize
?
如果没有,那还有什么选择?
【问题讨论】:
【参考方案1】:这完全取决于您如何渲染视频。如果您使用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)
希望确实回答了您的问题,否则只是明确说明您想使用什么播放器/方法实现什么。
保重,
/安德斯
【讨论】:
我想导出这个裁剪到正确尺寸的文件。这个语境从何而来?我可以将其设置为 AVVideoConpositionInruction 吗?这是否考虑了横向视频以及它们可能是纵向但带有一些图层蒙版的情况? 您要求的内容很复杂,通常是不必要的,因为您可以在播放期间轻松裁剪和操作,这很简单。如果您裁剪视频然后想将其保存为新文件,您需要先解码,然后裁剪然后编码,然后保存为新文件。我会看看developer.apple.com/library/content/samplecode/… 这是一个关于如何抓取像素的例子.. 然后使用我上面提到的裁剪计算。然后编码例如 -> github.com/manishganvir/ios-h264Hw-Toolbox。为什么需要保存裁剪的视频?为什么不只是在播放时裁剪? 我需要裁剪,以便将视频导出到多种类型的设备和操作系统。 videoRect 可以简单地为我做这件事吗? 这也不是实时视频处理。这是在视频完全捕获之后。以上是关于将视频裁剪为帧的主要内容,如果未能解决你的问题,请参考以下文章
08mmaction2 行为识别商用级别自定义ava数据集 之 将视频裁剪为帧