以与预览图层相匹配的大小导出AVCaptureSessionvideo
我使用AVCaptureSession
录制video,会话预设为AVCaptureSessionPreset640x480
。 我正在使用非标准尺寸(300 x 300)的AVCaptureVideoPreviewLayer
,并在录制时将重力设置为方向填充。 它的设置是这样的:
self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession]; _previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; _previewLayer.frame = _previewView.bounds; // 300 x 300 [_previewView.layer addSublayer:_previewLayer];
录制video后,我想以快速格式将其写入文件。 在播放过程中,我再次以300 x 300的非标准尺寸图层播放video。 由于这些video最终将通过networking连接进行传输,因此保留完整的640x480video看起来很浪费。
导出video以匹配我的300 x 300预览图层的最佳方式是什么? 我是一个AVFoundation noob,所以如果我正在做这个错误的方式,请让我知道。 我只想在logging期间预览层中显示的录制video与磁盘上导出的video相匹配。
video分辨率和video大小是两回事。 分辨率代表清晰度,分辨率越高意味着越清晰。 而video大小是显示video的边界。 根据video的video分辨率和宽高比,video会在观看者看到时伸展或缩小。
现在,事实已经解释,你可以在这里find你的答案:
如何使用AVFoundation裁剪video
按以下顺序执行步骤:
- 将video录制到磁盘。
- 从磁盘保存到资产库。
- 从磁盘删除。
- 执行上述链接中提到的步骤。
注意:在录制video到资源库之后执行这些步骤, saveComposition
就是保存的资源。
并在此步骤中提供您的尺寸: videoComposition.renderSize = CGSizeMake(320, 240);
as videoComposition.renderSize = CGSizeMake(300, 300);
并build议。 由于将文件写入磁盘,然后到磁带库,然后再回到磁盘是一种漫长的操作。 尝试使用dispatch_queue
或operationBlock
asynchronous执行此operationBlock
干杯,玩得开心。