githud傳送門:NHAVEditor
基于 AVFoundation 框架封裝的 iOS視頻編輯工具,支持給視頻添加水印、特效、音樂、導出視頻、視頻轉gif
iOS: >= 8.0
preview.gif
使用方法:
-
導入頭文件:
#import "NHAVEditor.h" #import "NHAVEditorHeader.h" #import "NHGifWriter.h" #import "NHMediaWriter.h" #import "NHCaptureViewController.h"
-
初始化
- (NHAVEditor *)mediaEditor { if (!_mediaEditor) { _mediaEditor = [[NHAVEditor alloc] initWithVideoURL:[NSURL fileURLWithPath:kMp4Path]]; _mediaEditor.delegate = self; } return _mediaEditor; } - (NHGifWriter *)gifWriter { if (!_gifWriter) { _gifWriter = [[NHGifWriter alloc] initWithOutputURL:nil]; _gifWriter.loopCount = 0; _gifWriter.delayTime = 0.1; } return _gifWriter; } - (NHMediaWriter *)mediaWriter { if (!_mediaWriter) { _mediaWriter = [NHMediaWriter mediaWithVideoSize:_displayView.videoSize fileType:AVFileTypeQuickTimeMovie]; } return _mediaWriter; }
-
添加背景音樂
[self.mediaEditor addAudioWithAudioURL:url customConfig:^(NHAudioConfig * _Nonnull config) { // 開始的音量大小,結束的時音量大小,從開始到結束這段時間的一個音量線性變化 config.startVolume = 0.0; config.endVolume = 1.0; // 是否關閉視頻原聲,默認false // config.removeOriginalAudio = true; config.originalVolume = 0.1; } completedBlock:nil];
-
添加水印
// 先創建一個水印或者動效 layer 層 CGFloat x = _displayView.videoSize.width - [self logoImage].size.width; // CGFloat y = _displayView.videoSize.height - [self logoImage].size.height; _watermarkLayer.frame = CGRectMake(x, 0, [self logoImage].size.width, [self logoImage].size.height); if (_isOpenAnimation) { CABasicAnimation *keyAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; keyAnimation.duration = 2.0; keyAnimation.repeatCount = MAXFLOAT; keyAnimation.toValue = @(M_PI * 2.0); keyAnimation.beginTime = AVCoreAnimationBeginTimeAtZero; keyAnimation.removedOnCompletion = NO; [_watermarkLayer addAnimation:keyAnimation forKey:@"transform.rotation.z"]; } // 執行添加水印操作 [self.mediaEditor addWatermarkWithLayer:self.watermarkLayer customConfig:nil completedBlock:nil];
-
導出視頻
[self.mediaEditor exportMediaWithOutputURL:nil customConfig:^(NHExporyConfig * _Nonnull config) { config.presetName = AVAssetExportPreset1280x720; config.outputFileType = AVFileTypeQuickTimeMovie; } completedBlock:^(NSURL * _Nullable outputURL, NSError * _Nullable error) { // do ... }];
-
視頻轉 GIF
[self.gifWriter buildGifFromVideo:outputURL timeInterval:@(600) completion:^(NSURL * _Nullable url, NSError * _Nullable error) { NHLog(@"GIF生成完成:%@", url); }];
-
CMSampleBufferRef / CVPixelBufferRef 寫成音/視頻文件
// 1. 準備工作 [ws.mediaWriter prepareBuildMediaWithOutpurUrl:[ws OutUrl:@"mov"]]; // 2. 寫入 [ws.mediaWriter appendVideoSampleBuffer:bufferRef]; // 3. 完成寫入 [ws.mediaWriter finishWriteWithCompletionHandler:^(NSURL * _Nonnull fileUrl) { NHLog(@"%@",fileUrl); if (fileUrl) { } }];
更多操作,請查看工程內的
NHAVEditorExamples.xcodeproj
你可加入音視頻開發技術交流群,因微信群二維碼有時效,要更新文章麻煩,所以把交流群的二維碼放在公眾號:
微信搜索:浩浩影視文化
-> 關于我們
-> 技術交流
浩浩影視文化