以下是的一些我们精选的视频添加音乐: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纸
 - 一什么玻璃填量词
 
