我环顾四周以实现慢动作视频录制。我发现我们可以通过配置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
注意:在手动替换值之前,请检查它。