发布于2022年11月4日3年前 现如今,视频是用户记录生活最热门的方式,各种App在发布视频界面都提供了视频简单剪辑的功能。除了增加音乐、滤镜、贴纸这些基础功能以外,用户越来越追求镜头感,这往往需要通过专业的视频剪辑软件手动打上关键帧,进行放大、缩小、移动等操作才能实现,这增加了用户分享视频的门槛,不利于UGC内容的生产。 有没有可以把固定镜头视频自动生成随角色位移的动态追踪镜头视频的开放能力呢? HMS Core视频编辑服务面向开发者提供了快速构建人物追踪的能力,让用户在编辑视频时自动锁定中心位,轻松生成具有主角镜头感的专业视频。 功能介绍 人物追踪支持对用户输入的视频中某个特定人物进行自动锁定,轻松生成特定人物的主角视频。比如旅游出行场景下,用户在景区拍摄的视频往往背景杂乱、人员众多,但在剪辑时使用人物追踪功能,用户就可以稳站“C位”,无惧纷杂。 效果展示 使用人物追踪前后对比 开发步骤 1. 开发准备 详细准备步骤可参考华为开发者联盟官网 2. 编辑工程集成 2.1 设置应用的鉴权信息 可以通过api_key或者Access Token来设置应用鉴权信息。 通过setAccessToken方法设置Access Token,在应用启动时初始化设置一次即可,无需多次设置。 MediaApplication.getInstance().setAccessToken("your access token"); 通过setApiKey方法设置api_key,在应用启动时初始化设置一次即可,无需多次设置。 MediaApplication.getInstance().setApiKey("your ApiKey"); 2.2 设置唯一标识ID,即License ID License ID是进行管控的有效凭证,您要保证设置License ID的唯一性。 MediaApplication.getInstance().setLicenseId("License ID"); 2.2.1 初始化Editor运行环境 创建编辑工程,需要首先创建Editor对象并初始化其运行环境。当离开编辑工程时,应释放Editor实例。 创建Editor对象 HuaweiVideoEditor editor = HuaweiVideoEditor.create(getApplicationContext()); 指定预览窗口的布局位置 预览窗口负责视频图像画面的渲染,由视频编辑原子能力SDK内部创建SurfaceView来实现。在创建窗口之前,需要在您的App中指定预览窗口的布局位置。 <LinearLayout android:id="@+id/video_content_layout" android:layout_width="0dp" android:layout_height="0dp" android:background="@color/video_edit_main_bg_color" android:gravity="center" android:orientation="vertical" /> // 指定预览窗口 LinearLayout mSdkPreviewContainer = view.findViewById(R.id.video_content_layout); // 设置预览窗口承载的布局 editor.setDisplay(mSdkPreviewContainer); 初始化运行环境,如果License鉴权失败,会抛出LicenseException。 当Editor对象创建之后,此时还没有占用实际的系统资源,需要手动选择其环境初始化的时机,此时视频编辑原子能力SDK内部会创建必须的线程和定时器等。 try { editor.initEnvironment(); } catch (LicenseException error) { SmartLog.e(TAG, "initEnvironment failed: " + error.getErrorMsg()); finish(); return; } 2.2.2 添加视频、图片 创建一条视频泳道,然后往泳道上添加图片或者视频素材。图片和视频素材需要通过文件路径添加到泳道上。 // 获取时间线对象 HVETimeLine timeline = editor.getTimeLine(); // 创建视频泳道 HVEVideoLane videoLane = timeline.appendVideoLane(); // 在视频泳道的末尾,添加视频资源 HVEVideoAsset videoAsset = videoLane.appendVideoAsset("test.mp4"); // 在视频泳道的末尾,添加图片资源 HVEImageAsset imageAsset = videoLane.appendImageAsset("test.jpg"); 3. 人物追踪能力集成 // 初始化人物跟踪引擎 visibleAsset.initHumanTrackingEngine(new HVEAIInitialCallback() { @Override public void onProgress(int progress) { // 初始化进度 } @Override public void onSuccess() { // 初始化成功 } @Override public void onError(int errorCode, String errorMessage) { // 初始化失败 } }); // 通过坐标点选中指定的人物进行跟踪,返回人物的矩形轮廓坐标 List<Float> rects = visibleAsset.selectHumanTrackingPerson(bitmap, position2D); // 开启人物跟踪特效 visibleAsset.addHumanTrackingEffect(new HVEAIProcessCallback() { @Override public void onProgress(int progress) { // 处理进度 } @Override public void onSuccess() { // 处理成功 } @Override public void onError(int errorCode, String errorMessage) { // 处理失败 } }); // 中断人物跟踪 visibleAsset.interruptHumanTracking(); // 移除人物跟踪特效 visibleAsset.removeHumanTrackingEffect(); 了解更多详情>> 访问视频编辑服务开发者联盟官网 获取视频编辑服务开发指导文档 访问华为开发者联盟官网 获取开发指导文档 华为移动服务开源仓库地址:GitHub、Gitee 关注我们,第一时间了解 HMS Core 最新技术资讯~
创建帐户或登录后发表意见