DualCam

为什么两路摄像头录出来的视频会不同步

通常不会,但这个担心是有道理的,因为它来自真实的经验:两路摄像头各自成片——两台手机并排拍,或者一个 App 把前后两路存成两条独立的视频轨——长镜头拍下来确实会慢慢走偏。单个合成文件的双摄录制不会有这个问题,不是因为它更擅长防止走偏,而是因为根本没有第二个文件可以走偏——它从一开始就只有一个文件。

这个区别值得单独说清楚,因为它同时也指出了双摄录制里唯一真正可能出现同步问题的地方:音频。音频来自单独选定的一路输入,本身可能带着真实的延迟。

摄像头之间的「不同步」到底从哪来

两个各自独立的摄像头——不管是两台手机,还是把前后两路存成两条独立文件的 App 设计——各自跑在自己的时钟上。哪怕两边标称帧率只差一点点,长镜头拍下来也会累积:每分钟差出零点几帧,一开始看不出来,拍到第十分钟就相当明显了。这正是正规多机位制作要打场记板、接同一路时码,或者录一声同步音的原因——需要一个所有人都认的瞬间,让剪辑师拿去对齐两条素材,因为素材本身的时间轴是不可信的。

两台手机随手拍的反应视频通常省掉这一切,所以事后回看常常会觉得画面里的反应比声音早了或者晚了一点点。没有人能让两台手机在同一瞬间按下开始,事后也没有东西去纠正它。

为什么单个合成文件不会有这个问题

实时合成的双摄 App,并不是先录前摄、再单独录后摄。它是在两路画面各自到达的那一刻,就把它们一起画进 GPU 上的同一帧,然后把这一帧写进文件——就是你在取景框里看到的那一帧。等任何东西真正落到存储里的时候,两路画面早就已经合并了。不存在「A 摄像头的素材」和「B 摄像头的素材」并排放着、之后再慢慢分开的情况,因为合成录制自始至终只会产出一个文件,跑在一条共用的时间轴上,整条录制用同一个固定帧率。

这是结构上的事实,不是一句「表现不错」的说法。不是走偏很小、被很好地控制住了,而是「两个文件之间会走偏」这类问题,压根不适用于一个文件。

真正存在、但极小的一处差距

前后两个摄像头在被合成之前,走的仍然是两条各自独立的采集链路,没有什么东西会去协调它们——就像曝光那样,两颗摄像头各自只读自己看到的画面来决定曝光,谁也不管谁。所以在像素级别,同一个合成帧里的两幅画面,它们的传感器实际采样场景的那一刻,理论上可能差着不到一帧的时间。但这不会累积成看得出来的走偏,因为每一帧输出都是当场用「此刻两边各自最新的画面」现拼的——没有积压的素材会随着时间越拖越长,只有一个固定、极小的偏差,从第一秒到最后一秒基本不变。它是真实存在的,但不是逐帧对比之外能被你注意到的东西,跟真正两个独立文件那种能拖出几秒的走偏完全不是一回事。

真正可能出问题、也能被注意到的地方:音频

双摄录制依然只会写一条音轨,来自单独选定的一路输入,和合成好的画面放在一起。如果这路输入是手机自带的麦克风,它就贴在编码器旁边,不值得为此担心。如果是蓝牙麦克风或者 AirPods,音频进手机走的是一条更慢的路——压缩、经无线电传输、再解码——这会带来一个相对固定的延迟,在近景说话的镜头里,足够让人看出嘴型比声音先动一点。这是和两个摄像头完全无关的另一套机制,双摄收音和用 AirPods 双录那两篇里讲得更细。

真正掉帧的时候,发生的是什么

在真实的重负载下——发热、硬件预算不够——双摄录制宁可丢帧也不会晚交,因为一帧如果错过了自己该在的位置,只会把整条流水线往后拖得更远。这里值得记住的是:丢掉的是整个合成帧,两路画面一起丢,而不是某一路单独少一半。所以重负载下的长镜头会变短或者明显卡顿,但里面的两路画面永远不会彼此分开——卡顿不是走偏的开始。

DualCam 就是这样工作的:两路画面每一次都在 GPU 上合成进同一帧,一条音轨来自 iOS 当前选定的那一路输入,最终拿到的文件从第一帧到最后一帧都是同一份录制——事后没有什么需要再去对齐。

延伸问题

如果换成两台手机分别录,还能保持同步吗?

很难,也撑不了多久。两台独立设备各自跑在自己的时钟上,没有共同的同步信号——比如一个场记板瞬间、一路共用时码——两个文件在稍微长一点的镜头里就会慢慢走偏。这正是单个合成文件从根上避开的问题,因为它自始至终只产出一个文件。

事后剪辑会不会把同步搞乱?

只有在你把画面和声音拆开、分别重新编码或裁剪的时候才会。不去动它,文件保留的就是录制时画面和声音的原始关系。

发热掉帧会不会让某一路摄像头在文件里落后于另一路?

不会。丢的是整个合成帧——两路画面一起丢,不是某一路单独掉。不管卡成什么样,两路画面在文件里始终是配对的,变化的只是这段素材顺不顺、长不长。

想直接开录?

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

前往 App Store 下载