DualCam

为什么 iPhone 自带的相机 App 不能前后摄像头同时录像

这是个很自然会去找的东西:打开相机 App,翻遍设置想找一个能让前后摄像头一起工作的开关或模式,结果什么都没有。这个缺失不是疏忽,也不是苹果留着以后再更新的功能。前后同时录像用的是一种和相机 App 所依赖的完全不同的采集会话,而这种不同的会话带着一整套单摄像头 App 从来不用考虑的规则。

搞清楚这些规则到底是什么,既能解释相机 App 为什么做不到这件事,也能解释一个真能做到这件事的 App 为什么会长成现在这样——分辨率选项比单摄像头少、一按下录制分辨率就锁死、预览画面根本不是"预览",而就是正在写进文件的那一帧。

相机 App 只跑一路采集会话,双摄录像是两路喂给一路

任何 iPhone 相机 App 底层都是一个 AVFoundation 采集会话,而普通版本——也就是相机 App 所依赖的那种——是围绕单一活动输入设计的。你可以切换当前在用的是前摄还是后摄,也可以在不同镜头之间切换,但任何时刻都只有一路画面在流动。这不是谁刻意选择的限制,而是一个普通相机 App 所依赖的那套 API 本身的整体形状。

前后同时录像需要一种不同的会话类型,专门为同时跑多路输入而设计,每一路都各自连到各自的输出。这是一套独立的 API,带着一整套独立的规则,不是在相机 App 已有的会话上多加一个选项那么简单。一个 App 要么从一开始就是照着这种多摄像头会话写的,要么就不是——没有哪个开关能把前者直接升级成后者。

多摄像头会话没法用单摄像头依赖的那些预设

在相机 App 里选"4K"或者"高质量",系统会替你挑好一个合适的格式——一个便捷预设,悄悄帮你处理好分辨率、帧率和编码这些细节。这些预设之所以存在,是因为单一输入只需要满足自己:系统可以在那颗摄像头支持的所有格式里随便挑。

同时跑两路摄像头的会话没法靠这个捷径。里面每一路输入都必须用一个明确标记为支持多摄像头的格式,这份格式清单本来就比那颗摄像头自己能提供的全部格式要窄,而且这个选择必须是主动做出来的,不能交给某个预设代劳。这也是为什么双摄 App 的分辨率列表看起来比单摄 App 短——不是它小气,而是它只给你看真正够资格的那几个格式。

两路实时画面共用一份硬件上限,不是各自一份

跑一颗摄像头要花一定的算力。同时跑两颗,再实时合成成一帧,花的远不止两倍——而系统卡的是这两路加起来的总量上限,不是给每颗摄像头单独留一份配额。两颗摄像头各自用一个很轻松的分辨率,加在一起也完全可能超出硬件能承受的总预算。

这份共用的上限,正是双摄录像只给到 720p 或 1080p、而不像单摄那样能冲到 4K 的真正原因,也是为什么两路都上 1080p 是更吃硬件的那个选择——有些机型在长时间录制中确实会因为这个而降档。这也是为什么一开始录制分辨率就锁死:录到一半改分辨率,意味着要在会话已经在跑的时候重新协商这份共用的预算,而这恰恰是一段正在进行的录制承担不起的风险。

预览画面必须当场就是最终成片

单摄像头 App 可以容忍你看到的画面和最终存下来的东西之间有个落差——裁切、滤镜、导出设置都能留到事后再套,因为只有一路源画面可供处理。双摄录像没有这种从容:两路实时画面正在 GPU 上被实时合并成一帧,而这一帧合并完的结果,就是真正写进视频文件里的东西。

这是选择直接产出一个成片文件、而不是两个事后还得在剪辑软件里对齐的原始素材,所带来的直接后果。这也是为什么版式、画中画的角落和滤镜能在录制中随意切换、不会有任何代价——它们只影响这同一次实时合成每一帧怎么画;而那些需要改动文件本身结构的东西,比如分辨率,就做不到。

为什么苹果不干脆把这个加进相机 App

相机 App 得在每一台还在接收更新的 iPhone 上表现一致,而这里面大多数机型根本没有多摄像头采集所需要的那代芯片。要围绕一个只有部分机型才有的能力,去设计一个统一的界面——而即便是支持的那部分机型,硬件预算还会因具体型号、涉及哪几颗镜头、以及手机当下有多热而各不相同——这比一个只存在于已知支持该能力的机型上的专用 App,要难上不止一个量级。

一个只做这一件事的双摄 App,也承担得起做出固定的、提前锁定的选择——一小份分辨率清单、一开录就锁死、不去追求在所有机型上都做到面面俱到——而一个必须让所有人都觉得简单、一致的通用 App,其实没有这份自由。相机 App 里没有这个功能,是一个合理的产品边界,不是苹果还没顾得上解决的技术难题。

延伸问题

iPhone 设置里有没有一个隐藏开关能打开相机 App 的双摄同录?

没有。这不是一个等着被打开的设置——相机 App 依赖的采集会话本来就只跑一路活动输入。前后同时录像从一开始就需要一种不同的会话类型,而相机 App 根本不是照着这种会话写的。

双摄 App 能不能像相机 App 拍单摄那样给到 4K?

在同样的硬件条件下做不到。同时跑的两颗摄像头共用一份合计的硬件预算,而不是各自拥有一份——这正是双摄录像只给到 1080p 上限、并如实提示部分机型会因此降档的原因,够不到单摄独自能达到的那些分辨率。

既然我的 iPhone 支持双摄录像,为什么分辨率列表比相机 App 里的短?

多摄像头会话没法用单摄像头会话依赖的那些便捷预设。里面每一路输入都必须用一个明确标记为支持多摄像头的格式,这份清单本来就比那颗摄像头全部格式的清单要窄——列表短,反映的是真正够资格的有哪些,不是有什么设置被藏起来了。

想直接开录?

DualCam 让 iPhone 前后摄像头同时工作,边拍边合成为一个 MP4。免费、无需注册、无广告,素材不出手机。

前往 App Store 下载