以下是的一些我们精选的视频加音乐:iOS 视频添加音乐 去除原声
如果是预览视频,添加音乐这个很简单,使用 AVAudioPlayer 来播放音乐,目前我所做的是播放导入在工程本地的音乐文件,在线网络音乐添加尚未涉及。视频播放使用 AVplayer。 下面是切换背景音乐的方法:
- ( void ) anotherMusic: ( NSURL * ) url withVolume: ( CGFloat ) volume{ _usingMusic = YES; _musicUrl = url; _musicPlayer = [ [ AVAudioPlayer alloc ] initWithContentsOfURL:url error:nil ] ; [ _musicPlayer setVolume:volume ] ; [ _musicPlayer prepareToPlay ] ; [ _musicPlayer play ] ;}
我的功能基本是仿照微博发布视频做的,也有声音大小控制。一行代码控制,超级简单。
- ( void ) changeMusic: ( CGFloat ) value{ [ _musicPlayer setVolume:value ] ; _musicVolume = value;}
如果要关闭背景音乐,调用 AVAudioPlayer 的 stop 方法就行。 如果要控制原声:(想要静音直接将声音的值设为 0)
AVURLAsset *asset = [ AVURLAsset URLAssetWithURL:_videoUrl options:nil ] ; NSArray *audioTracks = [ asset tracksWithMediaType:AVMediaTypeAudio ] ; if ( audioTracks.count>0 ) { AVAssetTrack *assetAudioTrack = audioTracks.firstObject; audioTrack = assetAudioTrack; AVMutableAudioMixInputParameters* audioInputParams = [ AVMutableAudioMixInputParameters audioMixInputParameters ] ; [ audioInputParams setVolume:value atTime:kCMTimeZero ] ; [ audioInputParams setTrackID: [ assetAudioTrack trackID ] ] ; NSArray* audioParams = [ NSArray arrayWithObject:audioInputParams ] ; AVMutableAudioMix* audioMix = [ AVMutableAudioMix audioMix ] ; [ audioMix setInputParameters:audioParams ] ; [ self.playItem setAudioMix:audioMix ] ;
上面都只是预览时可见的效果,这个时候并没有真正的将你要的背景音乐加到视频中去。我们获取视频的 videoTrack 和 audioTrack 进行相应地处理合成再导出,这样才算真正的控制了视频的一切。视频原声的控制(包括音量大小或者直接静音我是写在一个方法中,方便我控制,你也可以写两个方法,静音时不加入 audioTrack,但我觉得两个方法麻烦,一个方法简单点)
- ( void ) removeAudioTrack: ( AVAsset* ) asset{ self.mutableComposition = [ AVMutableComposition composition ] ; AVMutableCompositionTrack *compositionVideoTrack = [ self.mutableComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid ] ; AVAssetTrack *videoTrack = nil; AVAssetTrack *assetAudioTrack = nil; if ( [ asset tracksWithMediaType:AVMediaTypeVideo ] .count!=0 ) { videoTrack = [ [ asset tracksWithMediaType:AVMediaTypeVideo ] objectAtIndex:0 ] ; } CMTimeRange timeRange = CMTimeRangeMake ( kCMTimeZero, videoTrack.timeRange.duration ) ; if ( videoTrack!=nil ) { [ compositionVideoTrack insertTimeRange:timeRange ofTrack:videoTrack atTime:kCMTimeZero error:nil ] ; } // 测试改变原声 if ( [ [ asset tracksWithMediaType:AVMediaTypeAudio ] count ] != 0 ) { assetAudioTrack = [ asset tracksWithMediaType:AVMediaTypeAudio ] [ 0 ] ; } if ( assetAudioTrack != nil ) { AVMutableCompositionTrack *compositionAudioTrack = [ self.mutableComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid ] ; [ compositionAudioTrack insertTimeRange:CMTimeRangeMake ( kCMTimeZero, assetAudioTrack.timeRange.duration ) ofTrack:assetAudioTrack atTime:kCMTimeZero error:nil ] ; AVMutableAudioMixInputParameters *mixParameters = [ AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:compositionAudioTrack ] ; [ mixParameters setVolumeRampFromStartVolume:_sound toEndVolume:_sound timeRange:CMTimeRangeMake ( kCMTimeZero,assetAudioTrack.timeRange.duration ) ] ; self.mutableAudioMix = [ AVMutableAudioMix audioMix ] ; self.mutableAudioMix.inputParameters = @ [ mixParameters ] ; }// 导出 self.exportSession = [ [ AVAssetExportSession alloc ] initWithAsset: [ self.mutableComposition copy ] presetName:AVAssetExportPreset1280x720 ] ;// } self.exportSession.videoComposition = self.mutableVideoComposition; self.exportSession.audioMix = self.mutableAudioMix;self.exportSession.outputURL = [ NSURL fileURLWithPath:outputURL ] ;self.exportSession.outputFileType=AVFileTypeQuickTimeMovie; self.exportSession.shouldOptimizeForNetworkUse = YES; [ self.exportSession exportAsynchronouslyWithCompletionHandler:^ ( void ) {switch ( self.exportSession.status ) { case AVAssetExportSessionStatusCompleted:{ dispatch_async ( dispatch_get_global_queue ( DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0 ) , ^{ [ self writeVideoToPhotoLibrary: [ NSURL fileURLWithPath:outputURL ] ] ; } ) ;// Step 3// Notify AVSEViewController about export completion [ [ NSNotificationCenter defaultCenter ] postNotificationName:AVSEExportCommandCompletionNotification object:self ] ; }break;case AVAssetExportSessionStatusFailed:NSLog ( @" 导出失败:Failed:%@",self.exportSession.error ) ;break;case AVAssetExportSessionStatusCancelled:NSLog ( @" 导出取消:Canceled:%@",self.exportSession.error ) ;break;default:break;}} ] ;
添加本地音乐,传入 url。
- ( void ) addMusic: ( AVAsset* ) asset{ CMTimeRange timeRange = CMTimeRangeMake ( kCMTimeZero, [ asset duration ] ) ; AVMutableCompositionTrack *customAudioTrack = [ self.mutableComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid ] ; AVAssetTrack *assetAudioTrack = nil; if ( [ [ asset tracksWithMediaType:AVMediaTypeAudio ] count ] != 0 ) { assetAudioTrack = [ asset tracksWithMediaType:AVMediaTypeAudio ] [ 0 ] ; } AVAsset *audioAsset = [ [ AVURLAsset alloc ] initWithURL:_musicUrl options:nil ] ; AVAssetTrack *newAudioTrack = [ audioAsset tracksWithMediaType:AVMediaTypeAudio ] [ 0 ] ; [ customAudioTrack insertTimeRange:timeRange ofTrack:newAudioTrack atTime:kCMTimeZero error:nil ] ; AVMutableAudioMixInputParameters *mixParameters = [ AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:customAudioTrack ] ; [ mixParameters setVolumeRampFromStartVolume:_music toEndVolume:_music timeRange:CMTimeRangeMake ( kCMTimeZero,asset.duration ) ] ; NSMutableArray *mut = [ NSMutableArray arrayWithArray:self.mutableAudioMix.inputParameters ] ; [ mut addObject:mixParameters ] ; self.mutableAudioMix.inputParameters = mut;
对了,上面代码还有一个需要注意的地方,如果你只调用 addMusic 方法,记得 self.mutableAudioMix = [ AVMutableAudioMix audioMix ] ; 我上面的代码是音乐先调用了 removeAudioTrack 方法,self,mutableAudioMix 被初始化过了,后面就不用再初始化了。
微信扫一扫
订阅每日移动开发及 APP 推广热点资讯
公众号:CocoaChina
- 视频添加文字用什么软件
- 电脑视频打不开怎么办
- 怎样添加打印机到电脑
- 微信过期视频怎么恢复
- 怎么在桌面添加我的电脑
- 微信朋友圈背景视频怎么设置
- 王者荣耀安卓转ios
- 微信怎么看过期的视频
- 微信视频过期怎么还原
- 电脑显示无视频输入进去睡眠模式
- 网易云音乐加载失败
- 吻胸揉胸揉下面大全视频
- ios最新版本是多少
- 铁生锈了怎么去除
- 苹果微信视频怎么美颜
- 如何添加字体到电脑
- 苹果手机微信视频怎么美颜
- ios查看已连接wifi密码
- 床戏男人叉下面视频
- 跳跳蛋塞美女下面视频
- 王者荣耀IOS付费转安卓
- 恶心的笑话视频大全
- word制作会议记录视频
- 乐视视频的会议记录
- 音乐教研组会议记录
- 笑话大全上厕所超级恶心恶心视频
- 十万个冷笑话 视频太恶心
- 恶心的笑话视频
- 野鸡大学招生视频
- 男女洗澡叉下面的视频
- 威廉王子凯特王妃视频
- 凯特王妃威廉王子视频
- 女摸自己下面全看视频
- 女人下面自熨视频
- 最刺激男女摸下面视频
- 揉胸摸腿摸下面视频
- 男人吻你的下面(视频)
- 苹果微信视频能美颜吗
- 怎么添加微信好友
- 网易云音乐怎么设置桌面歌词
- ios屏蔽更新描述文件
- 视频加字幕软件哪个好
- 逗拍怎么制作视频
- b站电脑上怎么缓存视频
- pp助手ios安装
- 微信添加好友记录查找
- qq音乐绿钻和付费音乐包的区别
- 苹果组装机是ios系统吗
- 微信视频过期能恢复吗
- ios描述文件无法删除
- 如何彻底去除羊肉膻味
- 手机视频播放rmvb
- 微信视频打不开怎么回事
- 给视频加字幕的软件
- 如何添加微信好友
- 洗衣机转盘怎么拆视频
- 苹果微信视频怎样开美颜
- 微信怎么发6分钟视频
- 怎样去除彩笔印
- 微信视频怎么美颜苹果
- ps怎么添加字体
- 视频太大微信发不了怎么办
- 朱莉亚音乐学院
- 去除鱼腥味的最快方法
- 电脑无视频输入怎么回事
- 苹果微信视频怎么美颜在哪里
- 微信视频怎么美颜oppo
- 王者荣耀ios转安卓申请
- 优酷视频保存手机相册
- 怎样添加微信新朋友
- 吃蒜后怎样去除口气
- 论文脚注怎么添加
- 我真的很不错舞蹈视频
- 茱莉亚音乐学院
- 王者荣耀ios转安卓
- 手机视频怎样导入电脑
- 会议记录视频讲座
- 张大千擅长:下列哪一位著名画家擅长画虎A、张
- 中通400客服电话
- 怎么换身份证上的照片
- 专硕和学硕代码
- 中国法律还有死刑吗
- 在六点半用英语怎么说
- 主任医师是什么级别
- 知困下一句:人心齐泰山移人心散请问下一句是什么
- 怎么缩小电脑桌面图标
- 专业技术岗位:事业单位管理岗位如何转专业技术岗位
- 天龙八部中逍遥派
- 苹果平板忘记id及密码怎么办
- 可可以加什么偏旁
- 什么夺目成语四字词语
- 蛋挞底皮酥脆的诀窍
- 中国联通电话号码客服电话是
- 星星还是那颗星星歌曲
- 顺丰有单号查不到物流
- iphone设置短信中心号码失败
- oppo自动开关机在哪里设置
- 灭楚之战有多惨
- 迂回什么折成语
- 案件到法院多久能开庭
- 武汉人流俱佳都巿
- 春雨绵绵的意思
- b的大写字母怎么写
- 物什么什么什么成语
- 现任国家副主席都有谁
- 打印表格怎么铺满a4纸
- 一什么玻璃填量词