我使用AVCaptureSession
来捕获和录制视频。
我需要以4:3的比例录制视频,并且分辨率很高。
使用AVCaptureSession
进行捕获时,有没有办法指定自定义分辨率?
我尝试使用原生预设,但问题是我需要以4:3的比例捕捉,几乎所有的预设都是16:9。而那些4:3的分辨率非常低。
我无法以任何其他方式将预设更改为自定义预设,如果我需要以更高分辨率捕获4:3视频,该怎么办?有什么想法吗?
答案 0 :(得分:8)
AVCaptureSession
预设仅涵盖设备相机功能的一小部分(大多数应用需要快速,轻松访问的功能)。对于更精细的控制 - 例如选择会话预设未提供的捕获分辨率 - 您需要使用捕获格式。
查看捕获设备的formats
属性,即AVCaptureDeviceFormat
个对象的数组。枚举该数组,直到找到符合您需要的尺寸。要获取维度,请查看基础CMFormatDescription
:
let fdesc = format.formatDescription
let dims = CMVideoFormatDescriptionGetDimensions(fdesc)
NSLog("%d x %d", dims.width, dims.height)
找到所需格式后,请锁定设备以进行配置并设置其activeFormat
:
if try device.lockForConfiguration() {
device.activeFormat = myChosenFormat
// set up other things like activeVideoMinFrameDuration if you want
device.unlockForConfiguration()
}
您可以在Apple的programming guide和the WWDC2013 session中通过AVCaptureDeviceFormat
找到有关配置捕获会话的详细信息,该版本在iOS 7.0中引入了设备格式。 (你发现的关于这个主题的大部分内容都是针对慢动作视频,在视频中拍摄高分辨率的照片,以及其他你可以用会话预设做的事情,但那些并非如此。你可以用捕获格式做的唯一事情。)
答案 1 :(得分:1)
只需以给定的宽高比录制,然后使用AVMutableComposition
将输出视频裁剪为所需的宽高比:如果您将预览图层调整为4:3,则对用户来说这将是无缝的。