实时视频稳定化

13
我买了一部谷歌Pixel,并尝试使用官方应用程序录制视频,发现有一个显着的内置稳定机制正在录制过程中运作,所以如果我手抖动一点,这种运动只会轻微地传递到录像中(即使视频预览也非常稳定)。
然而,我使用自己的视频录制应用程序时,这种稳定并未发生。
我当然尝试了在官方文档上使用setVideoStabilization()方法,但其结果不如内置的相机应用程序好。
我是否还有遗漏的问题?

1
我还有什么遗漏的吗?是的,它被称为千万美元的研发预算+一些厉害的专利所有权,以超越当前的竞争对手... 但说真的,你必须为记录的像素编写自己的稳定化算法(因为无法重新编程相机的成像传感器本身)。这里有一些鼓舞人心的搜索结果。基本上只需考虑所呈现的概念,并乐于将其实现为Java代码... - VC.One
1
Google应用程序使用的稳定代码很可能不是普通开发人员可以使用的相同稳定库。 - kris larson
@VC.One 抱歉,您真的是指在Java/Kotlin层面上编写自己的稳定性代码吗?您真的明白自己在谈论什么吗?这必须通过低级编程语言(在相机低级系统逻辑中某个地方,这对Android应用程序开发人员不可见)才能快速有效地完成(不会影响性能)。说真的... :) 如果您有Arduino、Raspberry Pi、Mini PC等设备,可以编写自己的算法。您拥有Linux,可以做任何想做的事情 :) - user924
3个回答

5
您可以考虑查看OpenSource.Android并找到一些稳定逻辑。另一个链接在这里platform_packages_apps_camera。从那里开始,您可以进行自己的研究和开发。
或者
等待谷歌像素相机稳定性API或类似代码对所有人都可用。未来更新的Android SDK可能会改进当前的稳定功能。

2
在相机的平台包中,这个 dbstabsmooth.cpp 看起来最有前途,可以提供逻辑启发,或者作为 Asker 自己实现的起点。 - VC.One
@Qamar,放松点,我只是认为也许我做错了什么,因为当前相机API确实支持稳定性。 - MichelReap
@MichelReap,这不是个人问题...答案也必须适用于未来需要相同信息的读者。 - VC.One
@两位说实话,我原以为这个稳定过程是在硬件本身进行的。我正在使用安卓手机进行直播,添加软件稳定很可能会影响我的编码性能,并降低我现在获得的稳定、清晰的30fps和1080p...感谢你们两位的回答。 - MichelReap
你不能轻易地为一般的Google Play应用程序和官方Android固件编写自己的稳定算法。 - user924

0
如果你不想等待,另一个选择是阅读利用加速计进行内容去抖动的惊人文章(附此处的源代码)。
这是为了去除手机内容的震动(例如在移动交通工具中方便阅读),但是这是您可以应用于来自相机的视频流的相同逻辑。
但是,不要期望获得与谷歌方法相同的结果。实际上,这只能进行软件稳定,会移动您的图像,从而裁剪它。为了避免裁剪和亮度变化,谷歌使用光学影像稳定,这会机械地移动镜头,从而避免任何裁剪。然而,并非所有手机都支持OIS,因此如果您在应用程序中使用Google的API,请考虑这一点。

0

等待Google在其API中发布它。

根据以往的经验,新功能通常需要一段时间才能通过API形式供我们所有人使用。

同时,请尝试引起这里专家的注意:https://code.google.com/p/android/issues/list。您可能会更早地将其推入更新中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接