8

我正在使用AVCaptureSession会话预设录制视频AVCaptureSessionPreset640x480。我AVCaptureVideoPreviewLayer在录制时使用非标准尺寸(300 x 300)的重力设置为纵横比填充。它的设置是这样的:

self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession];
_previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
_previewLayer.frame = _previewView.bounds; // 300 x 300
[_previewView.layer addSublayer:_previewLayer];

录制视频后,我想将其写入 quicktime 格式的文件。在播放过程中,我再次以 300 x 300 非标准大小的图层播放视频。因为这些视频最终将通过网络连接传输,所以保留完整的 640x480 视频似乎很浪费。

导出视频以匹配我的 300 x 300 预览层的最佳方式是什么?我是一个 AVFoundation 菜鸟,所以如果我以错误的方式处理这个问题,请告诉我。我只希望录制期间在预览层中显示的录制视频与磁盘上导出的视频相匹配。

4

1 回答 1

13

视频分辨率和视频大小是两个不同的东西。分辨率代表清晰度,更高的分辨率意味着更高的清晰度。而视频大小是显示视频的范围。根据视频的分辨率和视频的纵横比,在查看器中观看时,视频会拉伸或缩小。

现在已经解释了事实,您可以在这里找到答案:

如何使用 AVFoundation 裁剪视频

按此顺序执行步骤:

  1. 将视频录制到磁盘。
  2. 从磁盘保存到资产库。
  3. 从磁盘中删除。
  4. 执行上述链接中提到的步骤。

注意:在录制视频并将其写入资产库(saveComposition已保存的资产)后执行这些步骤。

并在此步骤中提供您的尺寸:videoComposition.renderSize = CGSizeMake(320, 240);asvideoComposition.renderSize = CGSizeMake(300, 300);

和一个建议。由于将文件写入磁盘,然后写入库,然后再写入磁盘,这是一个漫长的操作。尝试使用dispatch_queueor异步执行所有操作operationBlock

干杯,玩得开心。

于 2013-02-11T08:42:09.337 回答