https://github.com/CoderHenry66/WAVideoBox
秒级! 三行代码实现iOS视频压缩、变速、混音、合并、GIF水印、旋转、换音、裁剪 ! 支持不同分辩率,支持你能想到的各种混合操作! 扩展性强...更多功能不断增加中... iOS 8.0 + 有需要的功能或错误欢迎issue,笔者会及时更新
https://github.com/CoderHenry66/WAVideoBox
avfoundation compression gearbox gif remix rotate video watermark
Last synced: 5 days ago
JSON representation
秒级! 三行代码实现iOS视频压缩、变速、混音、合并、GIF水印、旋转、换音、裁剪 ! 支持不同分辩率,支持你能想到的各种混合操作! 扩展性强...更多功能不断增加中... iOS 8.0 + 有需要的功能或错误欢迎issue,笔者会及时更新
- Host: GitHub
- URL: https://github.com/CoderHenry66/WAVideoBox
- Owner: CoderHenry66
- License: apache-2.0
- Created: 2019-01-10T11:41:19.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-09-15T08:17:22.000Z (over 5 years ago)
- Last Synced: 2024-08-03T18:21:48.959Z (9 months ago)
- Topics: avfoundation, compression, gearbox, gif, remix, rotate, video, watermark
- Language: Objective-C
- Homepage:
- Size: 17.9 MB
- Stars: 815
- Watchers: 17
- Forks: 178
- Open Issues: 21
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- Awesome-iOS - WAVideoBox - 秒级! 三行代码实现iOS视频压缩、变速、混音、合并、GIF水印、旋转、换音、裁剪 ! 支持不同分辩率,支持你能想到的各种混合操作! (Media)
README
# WAVideoBox
秒级! 三行代码实现iOS视频压缩、变速、混音、合并、GIF水印、旋转、换音、裁剪 ! 支持不同分辩率,支持你能想到的各种混合操作! 扩展性强...更多功能不断增加中...
iOS 8.0 +
有需要的功能或错误欢迎issue,笔者会及时更新WAVideoBox是一款基于AVFoundation视频操作框架,用短短几行代码就可完成各种简单及至复杂的视频操作命令。使用简单,性能高超~
尤其是不同分辩率视频的组合操作,如,给A视频变速,给B视频加水印,把C视频旋转...把ABC..视频合并,再操作合并视频...循环...
用WAVideoBox能快速高效实现上述功能。PS :支持多线程处理
iOS 8.0 ++
V 1.0.2 更新
=====================
- 支持编辑进度回调
- 支持动态水印合成使用指导
=====================常规操作: append一个视频 + 操作命令 + finish
组合操作:将所有视频append,操作命令 * n,finish
骚操作:参照文尾
下列代码均跑于6s 12.0系统
常规操作: 三行代码
=====================// 压缩:将19秒的视频进行压缩, 耗时<1秒, 成果 : 6.7M -> 335KB (有损压缩,高清压缩可设置ratio videoQuality)
// 第一种:自动压缩,分low ,medium , high 三档
[_videoBox appendVideoByPath:_videoPath];
_videoBox.ratio = WAVideoExportRatioLowQuality;//有损压缩
[_videoBox asyncFinishEditByFilePath:filePath complete:^(NSError *error) {
// do it
}];
// 第二种:通过自行设定分辩率,实现高清压缩
[_videoBox appendVideoByPath:_videoPath];
_videoBox.ratio = WAVideoExportRatio640x480;
// _videoBox.vidoQuality = 6;还可以通过设置videoQuality进行精准压缩
[_videoBox asyncFinishEditByFilePath:filePath complete:^(NSError *error) {
// do it
}];

// 拼接:将两个不同分辨率视频拼接(17秒的视频), 耗时<3秒 ,如果是相同分辩率的视频耗时<1秒[_videoBox appendVideoByPath:_testThreePath];
[_videoBox appendVideoByPath:_testTwoPath];
[_videoBox asyncFinishEditByFilePath:filePath progress:^(float progress) {
// do it 长时间的操作可以添加进度监控
} complete:^(NSError * error) {
// do it
}];
// 混音:给视频混上其他视频/音乐的声音 (19秒视频), 耗时 < 1秒[_videoBox appendVideoByPath:_videoPath];
[_videoBox dubbedSoundBySoundPath:_testThreePath];
[_videoBox asyncFinishEditByFilePath:filePath complete:^(NSError *error) {
// do it
}];
// 旋转、裁剪、换音、变速、水印....更多操作见demo组合操作
=====================// 将1号拼接到video,用2号的音频替换,给视频加一个水印,旋转180度,混上3号的音,速度加快两倍
// 把生好的视频裁6-12秒,压缩
// 耗时 < 2秒[_videoBox appendVideoByPath:_videoPath];
[_videoBox appendVideoByPath:_testThreePath];
[_videoBox replaceSoundBySoundPath:_testTwoPath];
[_videoBox appendWaterMark:[UIImage imageNamed:@"waterMark"] relativeRect:CGRectMake(0.7, 0.7, 0.2, 0.1)];[_videoBox rotateVideoByDegress:180];
[_videoBox dubbedSoundBySoundPath:_testOnePath];
[_videoBox gearBoxWithScale:2];[_videoBox rangeVideoByTimeRange:CMTimeRangeMake(CMTimeMake(2400, 600), CMTimeMake(3600, 600))];
[_videoBox asyncFinishEditByFilePath:filePath progress:^(float progress) {
// do it 长时间的操作可以添加进度监控
} complete:^(NSError * error) {
// do it
}];骚操作
=====================// 放入原视频,换成1号的音,再把3号视频放入混音,剪其中8秒
// 拼1号视频,给1号水印,剪其中8秒
// 拼2号视频,给2号变速
// 拼3号视频,旋转180,剪其中8秒
// 把最后的视频再做一个变速
// 耗时<3秒,如果都是分辩率一致的视频,将更快[_videoBox appendVideoByPath:_videoPath];
[_videoBox replaceSoundBySoundPath:_testOnePath];
[_videoBox dubbedSoundBySoundPath:_testThreePath];
[_videoBox rangeVideoByTimeRange:CMTimeRangeMake(kCMTimeZero, CMTimeMake(3600, 600))];[_videoBox appendVideoByPath:_testOnePath];
[_videoBox appendWaterMark:[UIImage imageNamed:@"waterMark"] relativeRect:CGRectMake(0.7, 0.7, 0.2, 0.12)];
[_videoBox rangeVideoByTimeRange:CMTimeRangeMake(CMTimeMake(3600, 600), CMTimeMake(3600, 600))];[_videoBox appendVideoByPath:_testTwoPath];
[_videoBox gearBoxWithScale:2];[_videoBox appendVideoByPath:_testThreePath];
[_videoBox rotateVideoByDegress:180];
[_videoBox rangeVideoByTimeRange:CMTimeRangeMake(kCMTimeZero, CMTimeMake(3600, 600))];[_videoBox commit];
[_videoBox gearBoxWithScale:2];[_videoBox asyncFinishEditByFilePath:filePath progress:^(float progress) {
// do it 长时间的操作可以添加进度监控
} complete:^(NSError * error) {
// do it
}];
Box分析
=====================PS:为了灵活的调用、任意使用,效果与代码的调用顺序有关
比如先变速,再换音轨,明显后面才换的音轨不会有变速效果WAVideoBox的工作区域:
----缓存区,appedVideo后缓存区域
----工作区,视频指令区域,只有在这区域的视频才是有效操作
----合成区,完成视频指令后待合成区域1、appendVideo:会将视频加入到缓存区,将工作区内容合成一个视频(无法再拆散),并移到合成区,清空工作区
2、视频操作指令:缓存区视频放到工作区,视频操作只对工作区视频有效
3、commit:合成区域,将缓存区,合成区的视频移到工作区,视频操作对所有视频有效tip:线程安全,适用于短视频处理