iOS

最近更新时间:2025-03-20 11:13:02

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

1. 基础拼接功能

如果您只想将多个视频文件简单地前后拼接成一个视频文件,可以参见以下代码:
// 创建 TXVideoJoiner。TXPreviewParam为nil 表示这里不需要预览
TXVideoJoiner* _videoJoin = [[TXVideoJoiner alloc] initWithPreview:nil];

// 设置待拼接的视频文件组 _composeArray
[_videoJoin setVideoPathList:_composeArray];

// 设置回调,监听合并进度和合并完成事件
_videoJoin.joinerDelegate = self;

// 开始合并
[_videoJoin joinVideo:VIDEO_COMPRESSED_540P videoOutputPath:_outFilePath]

2. 预览拼接文件

如果您想在合并视频之前对要合并的视频进行预览,可以参见如下代码:
//准备预览 View
TXPreviewParam *param = [[TXPreviewParam alloc] init];
param.videoView = _videoPreview.renderView;
param.renderMode = PREVIEW_RENDER_MODE_FILL_EDGE;

// 创建 TXVideoJoiner 对象并设置预览 view
TXVideoJoiner* _videoJoin = [[TXVideoJoiner alloc] initWithPreview:param];
_videoJoin.previewDelegate = _videoPreview;

// 设置待拼接的视频文件组 _composeArray
[_videoJoin setVideoPathList:_composeArray];

// 开始预览
[_videoJoin startPlay]
设置好预览 view 同时传入待合成的视频文件数组后,可以开始播放预览,合成模块提供了一组接口来做视频的播放预览:
startPlay:表示视频播放开始。
pausePlay:表示视频播放暂停。
resumePlay:表示视频播放恢复。

3. 视频合演

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

[_videoJoin setVideoPathList:_composeArray];

_videoJoin.joinerDelegate = self;

// 设置合演画面参数
TXSplitScreenParams* splitScreenParams = [[TXSplitScreenParams alloc] init];
splitScreenParams.canvasWidth = 720 * 2; // 合演时的画面宽度
splitScreenParams.canvasHeight = 1280; // 合演时画面的高度
// 每个视频在画面中的位置和大小
splitScreenParams.rects = @[[NSValue valueWithCGRect:CGRectMake(0, 0, splitScreenParams.canvasWidth / 2,
splitScreenParams.canvasHeight)],
[NSValue valueWithCGRect:CGRectMake(splitScreenParams.canvasWidth / 2, 0,
splitScreenParams.canvasWidth / 2, splitScreenParams.canvasHeight)]];

splitScreenParams.durationMode = ALIGNS_TO_LONGEST; // // 指定合演视频的长度跟最长的视频一致
[_videoJoiner setSplitScreenList:splitScreenParams];

// 设置合演时,每个视频音频混合时的比重
[_videoJoiner setVideoVolumes:@[@0, @1]];

[_videoJoin joinVideo:VIDEO_COMPRESSED_540P videoOutputPath:_outFilePath]
当我们调用setSplitScreenListsetVideoVolumes设置合演时的画面参数和声音混合大小之后,不仅仅对调用splitJoinVideo生成视频生效,也对视频预览生效。