【问题标题】:Can AVCaptureSession use custom resolutionAVCaptureSession 可以使用自定义分辨率吗
【发布时间】:2016-01-06 18:50:51
【问题描述】:

我正在使用AVCaptureSession 来捕捉和录制视频。

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

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

我尝试使用原生预设,但问题是我需要以 4:3 的比例进行捕捉,而且几乎所有预设都是 16:9。而 4:3 的分辨率非常低。

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

【问题讨论】:

  • 你能提供更多信息吗?您尝试了哪些预设选项?
  • 你试过 AVCaptureSessionPreset640x480 了吗?
  • @Mr.T 我需要更好的分辨率
  • @Eyal,如果问题是真实的?我知道如何用 GPUImage 做到这一点,如果你想可以回答github.com/BradLarson/GPUImage

标签: ios avfoundation avcapturesession


【解决方案1】:

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 guidethe WWDC2013 session 中找到有关通过 AVCaptureDeviceFormat 配置捕获会话的更多信息,它们在 iOS 7.0 中引入了设备格式。 (你会发现关于这个主题的大部分内容都是针对慢动作视频、在视频过程中拍摄高分辨率静止图像以及其他你不能用会话预设做的事情,但这些并不是你唯一可以做的事情处理捕获格式。)

【讨论】:

  • 嗨,感谢您的回答,在打印暗淡时,它会显示没有新尺寸,但有很多重复。而且我没有找到创建新格式的方法(不确定是否可行)
【解决方案2】:

只需以给定的纵横比录制并使用AVMutableComposition 将输出视频裁剪为所需的纵横比:如果您将预览图层调整为 4:3,这对用户来说将是无缝的。

【讨论】:

  • 这会增加很多不必要的开销,尤其是在进行图像处理时。
  • @ChewieTheChorkie 我不明白:如果您没有从硬件获得 4:3,那么是的,非常有必要自己进行转换。如果您正在进行图像处理,您 a) 不想要视频源 b) 无论如何都会在管道中进一步发现瓶颈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 2016-09-09
  • 1970-01-01
相关资源
最近更新 更多