将视频裁剪为帧

Posted

技术标签:

【中文标题】将视频裁剪为帧【英文标题】:Crop video to frame 【发布时间】:2017-08-31 03:21:26 【问题描述】:

我正在尝试将视频裁剪为一个帧,我会对其进行缩放以匹配视频的自然大小比例。有没有一种直接的方法来裁剪视频而无需处理各种疯狂的转换?

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

如果没有,那还有什么选择?

【问题讨论】:

【参考方案1】:

这完全取决于您如何渲染视频。如果您使用AVSampleBufferDisplayLayer,则将其属性-> videoGravity 设置为AVLayerVideoGravityResizeAspect

如果你从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)

希望确实回答了您的问题,否则只是明确说明您想使用什么播放器/方法实现什么。

保重,

/安德斯

【讨论】:

我想导出这个裁剪到正确尺寸的文件。这个语境从何而来?我可以将其设置为 AVVideoConpositionInruction 吗?这是否考虑了横向视频以及它们可能是纵向但带有​​一些图层蒙版的情况? 您要求的内容很复杂,通常是不必要的,因为您可以在播放期间轻松裁剪和操作,这很简单。如果您裁剪视频然后想将其保存为新文件,您需要先解码,然后裁剪然后编码,然后保存为新文件。我会看看developer.apple.com/library/content/samplecode/… 这是一个关于如何抓取像素的例子.. 然后使用我上面提到的裁剪计算。然后编码例如 -> github.com/manishganvir/ios-h264Hw-Toolbox。为什么需要保存裁剪的视频?为什么不只是在播放时裁剪? 我需要裁剪,以便将视频导出到多种类型的设备和操作系统。 videoRect 可以简单地为我做这件事吗? 这也不是实时视频处理。这是在视频完全捕获之后。

以上是关于将视频裁剪为帧的主要内容,如果未能解决你的问题,请参考以下文章

08mmaction2 行为识别商用级别自定义ava数据集 之 将视频裁剪为帧

如何将视频裁剪为特定大小?

在 Android 中使用 FFmpeg 将视频裁剪为方形格式

有没有免费的视频剪辑软件?快来看看这些视频裁剪软件

在 MATLAB 中裁剪视频?

Objective-C 如何将视频裁剪为捕获视图的大小?