我环顾四周以实现慢动作视频录制。我发现我们可以通过配置AVCaptureDevice's activeFormat属性来做到这一点。

我有获得最高帧速率的代码。但是,如果我想固定分辨率怎么办,以便慢动作会发生,但仅在特定分辨率以上才会发生。我不要低分辨率的慢动作视频。

我在5s上进行了测试,它给出了以下最高帧速率:

Format: <AVCaptureDeviceFormat: 0x174006680 'vide'/'420v' 1280x 720, { 3-120 fps}, fov:58.080, binned, supports vis, max zoom:52.00 (upscales @1.16), AF System:1, ISO:34.0-1088.0, SS:0.000012-0.333333>

Range: <AVFrameRateRange: 0x17400a5a0 3 - 120>

问题1:如何检查当前设备是否支持慢动作录制?

问题2:如果我想将1280x720作为阈值怎么办?因此,如果将来苹果制造的设备支持相同的3-120 fps,但分辨率较低?我不希望我的视频质量受到影响。

Question3:设置了activeFormat属性后,如何回滚到默认帧速率?

这是代码:
- (void)configureCameraForHighestFrameRate:(AVCaptureDevice *)device
{
    AVCaptureDeviceFormat *bestFormat = nil;
    AVFrameRateRange *bestFrameRateRange = nil;
    for ( AVCaptureDeviceFormat *format in [device formats] ) {
        for ( AVFrameRateRange *range in format.videoSupportedFrameRateRanges ) {
            if ( range.maxFrameRate > bestFrameRateRange.maxFrameRate ) {
                bestFormat = format;
                bestFrameRateRange = range;
            }
        }
    }
    if ( bestFormat ) {
        if ( [device lockForConfiguration:NULL] == YES ) {
            device.activeFormat = bestFormat;
            device.activeVideoMinFrameDuration = bestFrameRateRange.minFrameDuration;
            device.activeVideoMaxFrameDuration = bestFrameRateRange.minFrameDuration;
            [device unlockForConfiguration];
        }
    }
}

最佳答案

您将在至少120fps的范围内获得高质量的慢动作视频。
所以你可以通过

device.activeVideoMaxFrameDuration.timescale >= 120

注意:在手动替换值之前,请检查它。

10-08 06:29