美摄SDK For Android  3.10.0
美摄画中画技术文档

1.创建时间线

2.添加与需求相匹配的视频轨道。

(例如两个视频/图片的画中画效果,时间线需要添加两个视频轨道。)

NvsVideoTrack mVideoTrack = mTimeline.appendVideoTrack();
NvsVideoTrack mPipVideoTrack = mTimeline.appendVideoTrack();

3.相关视频轨道分别添加素材。(这里以两个素材为例进行展示)

NvsVideoTrack mVideoTrack = mTimeline.getVideoTrackByIndex(0);
NvsVideoClip mVideoClip = mVideoTrack.appendClip(firstMediaPath);
//如果添加的素材是图片,可设置禁止图片运动,可根据需求决定是否添加
mVideoClip.setImageMotionAnimationEnabled(false);
NvsVideoTrack mPipVideoTrack = mTimeline.getVideoTrackByIndex(1);
NvsVideoClip mPipVideoClip = mPipVideoTrack.appendClip(secondMediaPath);
//如果添加的素材是图片,可设置禁止图片运动,可根据需求决定是否添加
mPipVideoClip.setImageMotionAnimationEnabled(false);

4.clip 片段添加"Transform 2D” 特效。

此特效针对需要移动的clip 来添加,这里以移动第二个clip 为例。如果第一个素材需要移动的话,那么第一个clip也需要添加"Transform 2D” 特效

NvsVideoFx mVideoFx = mPipVideoClip.appendBuiltinFx("Transform 2D");

5.针对具体需求对"Transform 2D” 特效对象设置相应属性值(这里以手势拖动第二个clip 为例)

*需要注意的是,偏移值需转换为时间线偏移

//视图坐标转换成时间线坐标
PointF pointF1 = mLiveWindow.mapViewToCanonical(currentPoint);
PointF pointF2 = mLiveWindow.mapViewToCanonical(previousPoint);
double transX = mVideoFx.getFloatVal("Trans X");
double transY = mVideoFx.getFloatVal("Trans Y");
mVideoFx.setFloatVal("Trans X", transX + (pointF1.x - pointF2.x));
mVideoFx.setFloatVal("Trans Y", transY + (pointF1.y - pointF2.y));
属性 含义
Trans X X 轴偏移
Trans Y Y 轴偏移
Scale X X 轴缩放
Scale Y Y 轴缩放
Rotation 旋转

上面属性表中其他属性均可根据需求按照偏移示例代码进行赋值和应用。