可以使用自定义分辨率的AVCaptureSession吗?

14

我正在使用AVCaptureSession来捕获和记录视频。

我需要以4:3的比例录制视频,并且分辨率要好。

在使用AVCaptureSession进行捕获时,有没有办法指定自定义分辨率?

我尝试了使用本地预设,但问题是我需要以4:3的比例进行捕获,而几乎所有的预设都是16:9。而那些4:3的预设分辨率非常低。

我找不到其他更改预设为自定义预设的方法,如果我需要以更高的分辨率捕获4:3视频怎么办?有什么想法吗?


你能提供更多信息吗?你尝试了哪些预设选项? - Teja Nandamuri
你尝试过AVCaptureSessionPreset640x480吗? - Teja Nandamuri
@Mr.T 我需要更好的分辨率。 - Eyal
@Eyal,这个问题是否实际存在?我知道如何使用GPUImage来完成这个问题,如果你想的话,我可以回答。https://github.com/BradLarson/GPUImage - Joe Hallenbeck
2个回答

9

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()
}

您可以通过苹果公司的编程指南和介绍设备格式的WWDC2013会议了解有关配置捕获会话的更多信息,其中介绍了使用AVCaptureDeviceFormat进行配置。 (大多数关于此主题的内容都是针对慢动作视频、在视频中拍摄高分辨率静止图像以及其他无法使用会话预设完成的操作,但这些不是捕获格式的唯一用途。)


1
嗨,感谢你的回答。在打印维度时,似乎没有新的维度,但有很多重复的维度。我找不到创建新格式的方法(不确定是否可能)。 - Eyal

1
只需按给定的宽高比进行录制,并使用 AVMutableComposition 剪裁输出视频到所需的宽高比:如果您将预览层调整为4:3的遮罩,这对用户来说将是无缝的。

这将会增加很多不必要的开销,特别是在进行图像处理时。 - Chewie The Chorkie
@ChewieTheChorkie 我不明白:如果你的硬件没有得到4:3的比例,那么自己进行转换是非常必要的。如果你正在进行图像处理,a) 你不需要视频源,b) 你会在管道中找到更多的瓶颈。 - davbryn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接