当前位置: 首页 > 知识库问答 >
问题:

如何指定视频录制的曝光、焦距和白平衡?

楚威
2023-03-14

我有一个用默认参数拍摄视频的程序,当我移动相机时,曝光、焦距和白平衡会自动调整。我想在程序中添加两个按钮:锁定和预设。按下锁定按钮时,曝光、焦距和白平衡将固定,其值将存储为用户设置。预设按钮用于设置相机的用户设置,以确保我们可以拍摄具有相同曝光、焦距和白平衡值的所有视频。

锁定部分很简单,我只需要更改模式,所以我想知道是否有任何方法可以获取和设置曝光、焦距和白平衡的值。

以曝光为例,默认情况下,exposureMode设置为AVCaptureExposureModeContinuousAutoExposure,这意味着,当我手持iPhone拍摄视频时,曝光将自动调整,以确保我们可以在明亮或黑暗的环境中清晰地看到场景。

AVCaptureDevice* pCaptureDevice = [self videoDeviceWithPosition:AVCaptureDevicePositionBack];
[pCaptureDevice lockForConfiguration:nil];
[pCaptureDevice setExposureMode:AVCaptureExposureModeContinuousAutoExposure];
[pCaptureDevice unlockForConfiguration];

当按下LOCK按钮时,我将exposureMode更改为AVCapture ExposureModeLocked,因此不会再更改当前曝光值。

[pCaptureDevice lockForConfiguration:nil];
[pCaptureDevice setExposureMode:AVCaptureExposureModeLocked];
[pCaptureDevice unlockForConfiguration];

但是,当按下按钮时,如何获得曝光值?更重要的是,按下预设时,如何将曝光值设置回AVCaptureDevice。

我在论坛搜索,只找到Michael Grinich的帖子:访问iOS相机曝光和快门速度的6个新API。我按照他的发现,尝试使用私有API来获取和设置exposureGain和exposureDuration,但我发现在AVCapture ExposureModeContinuousAutoExposure模式下,当我将相机从黑暗环境移动到明亮环境时,这两个值从未改变(exposureGain=1.0和exposureDuration={1, 30, 1, 0})。设置它们根本不会改变曝光。

[pCaptureDevice lockForConfiguration:nil];
[pCaptureDevice setExposureMode:AVCaptureExposureModeLocked];
[pCaptureDevice setManualExposureSupportEnabled:YES];
NSLog(@"exposure gain: %f", [pCaptureDevice exposureGain]);
[pCaptureDevice setExposureGain:3.0];
NSLog(@"exposure gain: %f", [pCaptureDevice exposureGain]);
[pCaptureDevice unlockForConfiguration];

有人能帮我解决这个问题吗?提前非常感谢!

共有2个答案

狄宜然
2023-03-14

要设置手动固定曝光值和ISO,您现在可以这样做:

[Device lockForConfiguration:nil];
[Device setExposureModeCustomWithDuration:CMTimeMake(5, 100) ISO:AVCaptureISOCurrent completionHandler:nil]; //currently set to 50ms for example
[Device unlockForConfiguration];

你可以在这里参考留档:https://developer.apple.com/reference/avfoundation/avcapturedevice/1624646-setexposuremodecustomwithduratio?language=objc

暨弘毅
2023-03-14

我添加了一个答案,它可能会帮助您访问iOS 6的新API,用于相机曝光和快门速度。我可以在这里补充更多细节。。。

手动设置焦距完全遵循我为设置曝光而概述的相同结构。即:

#define AVCaptureFocusModeManual     3
NSError*    error = nil;
if ([captureDevice lockForConfiguration:&error]) {
    captureDevice.manualFocusSupportEnabled = YES;
    if ([captureDevice isFocusModeSupported:AVCaptureFocusModeManual]) {
        captureDevice.focusMode = AVCaptureFocusModeManual;
        // this is a value [0..1]
        captureDevice.focusPosition = ...;
    }
    [captureDevice unlockForConfiguration];
}

白平衡似乎没有曝光和聚焦那样的特殊模式。不要将WhiteBalanceMode设置为locked,否则您似乎可以只设置色温:

// this is also a value [0..1]
captureDevice.whiteBalanceTemperature = ...;
 类似资料:
  • 我能够在MediaCodec和MediaMuxer的帮助下录制(编码)视频。接下来,我需要在MediaCodec和MediaMuxer的帮助下处理音频部分和带视频的mux音频。 我面临两个问题: > 如何将音频和视频数据传递给MediaMuxer(因为writeSampleData()方法一次只接受一种类型的数据)? 我提到了MediaMuxerTest,但它使用的是MediaExtractor。

  • 我正在尝试开发一个应用程序,允许我在录制视频时绘制视频,然后将录制的视频和视频保存在一个mp4文件中供以后使用。另外,我想使用camera2库,特别是我需要我的应用程序在高于API 21的设备上运行,我总是避免使用不推荐的库。 我尝试了很多方法,包括FFmpeg,其中我放置了TextureView的覆盖层。getBitmap()(来自摄影机)和从画布获取的位图。它工作正常,但由于它的功能很慢,视频

  • 我是gstreamer的新手,我想录制音频和视频并将其保存到。mp4格式,使用网络摄像头录制视频,使用麦克风录制音频这是我的管道 gst-launch-1.0-e v4l2src!队列x264enc!H264解析!队列qtmux0.alsasrc!'音频/x-raw,速率=44100,深度=24’!音频转换!音频重采样!voaacenc!aacparse!qtmux!filesink locati

  • 问题内容: 我需要一种在录制视频的同时在Android设备上控制照相机闪光灯的方法。我正在制作频闪灯应用,使用频闪灯闪烁的视频拍摄视频将能够记录高速移动的物体,例如风扇叶片。 只能通过启动视频预览并在相机参数中设置FLASH_MODE_TORCH来启用闪光灯。看起来像这样: 预览开始后,我可以来回翻转该参数以打开和关闭灯光。在尝试录制视频之前,此方法效果很好。麻烦的是,为了将摄像机提供给Media

  • 本文向大家介绍Android自定义录制视频功能,包括了Android自定义录制视频功能的使用技巧和注意事项,需要的朋友参考一下 Android录制视频MediaRecorder+SurfaceView的使用方法,供大家参考,具体内容如下 先看效果图: <1>将视频动画显示到SurfaceView控件上 <2>使用MediaRecorder类进行视频的录制 常用的方法: 下面看代码: 以上就是本文的