Android

最近更新时间:2024-12-09 17:10:22

我的收藏
如果有多个视频需要拼接成一个视频,可以使用 TXVideoJoiner,可以将多个视频前后拼接成一个视频,也可以将多个视频画面叠加的形式进行拼接。

1. 基础拼接功能

如果您只想将多个视频文件简单地前后拼接成一个视频文件,可以参见以下代码:

mTXVideoJoiner = new TXVideoJoiner(mContext);

// 设置视频源,返回值 < 0 表示原始文件中有错误或者格式不支持
if (mTXVideoJoiner.setVideoPathList(videoSourceList) < 0) {
return
}

// 设置回调,监听合并进度和合并完成事件
mTXVideoJoiner.setVideoJoinerListener(new TXVideoJoinerListener() {
@Override
public void onJoinProgress(float progress) {}

@Override
public void onJoinComplete(TXJoinerResult result) {}
});

// 开始合并。参数传递合并视频的分辨率以及输出路径。
// 如果合并的多个文件格式和分辨率一致,可以快速完成视频的合并,如果格式和分辨率不一致,则需要重新编码,合并速度会比较慢
mTXVideoJoiner.joinVideo(TXVideoEditConstants.VIDEO_COMPRESSED_540P, mOutputPath);

2. 预览拼接文件

如果您想在合并视频之前对要合并的视频进行预览,可以参见如下代码:
mTXVideoJoiner = new TXVideoJoiner(mContext);

// 设置视频源,返回值 < 0 表示原始文件中有错误或者格式不支持
if (mTXVideoJoiner.setVideoPathList(videoSourceList) < 0{
return
}

// 设置回调,监听预览进度和预览完成事件
mTXVideoJoiner.setTXVideoPreviewListener(new TXVideoPreviewListener() {
@Override
public void onPreviewProgress(int time) {}

@Override
public void onPreviewFinished() {}
});

//准备预览View
TXVideoEditConstants.TXPreviewParam param = new TXVideoEditConstants.TXPreviewParam();
param.videoView = mVideoView;
param.renderMode = TXVideoEditConstants.PREVIEW_RENDER_MODE_FILL_EDGE;
mTXVideoJoiner.initWithPreview(param);

// 开始预览
mTXVideoJoiner.startPlay();
合成模块提供了一组接口来做视频的播放预览:
startPlay:表示视频播放开始。
pausePlay:表示视频播放暂停。
resumePlay:表示视频播放恢复。

3. 视频合演

TXVideoJoiner 不仅仅支持将多个视频前后拼接起来,还可以将多个视频的画面合并在一起进行拼接,参见如下代码:

mTXVideoJoiner = new TXVideoJoiner(mContext);

// 设置视频源,返回值 < 0 表示原始文件中有错误或者格式不支持
if (mTXVideoJoiner.setVideoPathList(videoSourceList) < 0{
return
}

// 设置回调,监听合并进度和合并完成事件
mTXVideoJoiner.setVideoJoinerListener(new TXVideoJoinerListener() {
@Override
public void onJoinProgress(float progress) {}

@Override
public void onJoinComplete(TXJoinerResult result) {}
});

// 设置合演画面参数
SplitScreenParam splitScreenParam = new SplitScreenParam();
splitScreenParam.canvasWidth = 720; // 合演时的画面宽度
splitScreenParam.canvasHeight = 1280; // 合演时画面的高度
splitScreenParam.durationControlMode = DurationControlMode.ALIGNS_TO_LONGEST; // 指定合演视频的长度跟最长的视频一致
// 用于指定每个视频在画面中的位置和大小
TXAbsoluteRect rect1 = new TXAbsoluteRect();
TXAbsoluteRect rect2 = new TXAbsoluteRect();
splitScreenParam.rects.add(rect1);
splitScreenParam.rects.add(rect2);
mTXVideoJoiner.setSplitScreenList(splitScreenParam);

// 设置合演时,每个视频音频混合时的比重
List<Float> volumes = new LinkedList<>();
volumes.add(1.0f);
volumes.add(0.0f);
mTXVideoJoiner.setVideoVolumes(volumes);

// 开始合并。参数传递合并视频的分辨率以及输出路径。
// 如果合并的多个文件格式和分辨率一致,可以快速完成视频的合并,如果格式和分辨率不一致,则需要重新编码,合并速度会比较慢
mTXVideoJoiner.splitJoinVideo(TXVideoEditConstants.VIDEO_COMPRESSED_540P, mOutputPath);
当我们调用setSplitScreenListsetVideoVolumes设置合演时的画面参数和声音混合大小之后,不仅仅对调用splitJoinVideo生成视频生效,也对视频预览生效。