如果有多个视频需要拼接成一个视频,可以使用 TXVideoJoiner,可以将多个视频前后拼接成一个视频,也可以将多个视频画面叠加的形式进行拼接。
1. 基础拼接功能
如果您只想将多个视频文件简单地前后拼接成一个视频文件,可以参见以下代码:
mTXVideoJoiner = new TXVideoJoiner(mContext);// 设置视频源,返回值 < 0 表示原始文件中有错误或者格式不支持if (mTXVideoJoiner.setVideoPathList(videoSourceList) < 0) {return}// 设置回调,监听合并进度和合并完成事件mTXVideoJoiner.setVideoJoinerListener(new TXVideoJoinerListener() {@Overridepublic void onJoinProgress(float progress) {}@Overridepublic 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() {@Overridepublic void onPreviewProgress(int time) {}@Overridepublic void onPreviewFinished() {}});//准备预览ViewTXVideoEditConstants.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() {@Overridepublic void onJoinProgress(float progress) {}@Overridepublic 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);
当我们调用
setSplitScreenList
和setVideoVolumes
设置合演时的画面参数和声音混合大小之后,不仅仅对调用splitJoinVideo
生成视频生效,也对视频预览生效。