iOS視訊新增背景音樂同時保留原音
IOS視訊新增背景音樂同時保留原音
//抽取原視訊的音訊與需要的音樂混合
-(void)addmusic:(id)sender
{
[MBProgressHUDshowHUDAddedTo:self.viewanimated:YES];
AVMutableComposition *composition =[AVMutableCompositioncomposition];
audioMixParams =[[NSMutableArrayalloc]initWithObjects:nil];
//錄製的視訊
NSURL *video_inputFileUrl =[NSURLfileURLWithPath:self .videoPath];
AVURLAsset *songAsset =[AVURLAssetURLAssetWithURL:video_inputFileUrloptions:nil];
CMTime startTime =CMTimeMakeWithSeconds(0,songAsset.duration.timescale);
CMTime trackDuration =songAsset.duration;
//獲取視訊中的音訊素材
[selfsetUpAndAddAudioAtPath:video_inputFileUrltoComposition:compositionstart:startTimedura:trackDurationoffset:CMTimeMake(14 *44100,44100)];
//本地要插入的音樂
NSString *bundleDirectory =[[NSBundlemainBundle]bundlePath];
NSString *path = [bundleDirectorystringByAppendingPathComponent:@"30secs.mp3"];
NSURL *assetURL2 =[NSURLfileURLWithPath:path];
//獲取設定完的本地音樂素材
[selfsetUpAndAddAudioAtPath:assetURL2toComposition:compositionstart:startTimedura:trackDurationoffset:CMTimeMake(0 ,44100)];
//建立一個可變的音訊混合
AVMutableAudioMix *audioMix =[AVMutableAudioMixaudioMix];
audioMix.inputParameters =[NSArrayarrayWithArray:audioMixParams];//從數組裡取出處理後的音訊軌道引數
//建立一個輸出
AVAssetExportSession *exporter =[[AVAssetExportSessionalloc]
initWithAsset:composition
presetName:AVAssetExportPresetAppleM4A];
exporter.audioMix = audioMix;
exporter.outputFileType[email protected]"com.apple.m4a-audio";
NSString* fileName =[NSStringstringWithFormat:@"%@.mov",@"overMix"];
//輸出路徑
NSString *exportFile =[NSStringstringWithFormat:@"%@/%@",[selfgetLibarayPath], fileName];
if([[NSFileManagerdefaultManager]fileExistsAtPath:exportFile]) {
[[NSFileManagerdefaultManager]removeItemAtPath:exportFileerror:nil];
}
NSLog(@"是否在主執行緒1%d",[NSThreadisMainThread]);
NSLog(@"輸出路徑===%@",exportFile);
NSURL *exportURL =[NSURLfileURLWithPath:exportFile];
exporter.outputURL = exportURL;
self.mixURL =exportURL;
[exporterexportAsynchronouslyWithCompletionHandler:^{
int exportStatus =(int)exporter.status;
switch (exportStatus){
caseAVAssetExportSessionStatusFailed:{
NSError *exportError =exporter.error;
NSLog(@"錯誤,資訊: %@", exportError);
[MBProgressHUDhideHUDForView:self.viewanimated:YES];
break;
}
caseAVAssetExportSessionStatusCompleted:{
NSLog(@"是否在主執行緒2%d",[NSThreadisMainThread]);
NSLog(@"成功");
//最終混合
[selftheVideoWithMixMusic];
break;
}
}
}];
}
//最終音訊和視訊混合
-(void)theVideoWithMixMusic
{
NSError *error =nil;
NSFileManager *fileMgr =[NSFileManagerdefaultManager];
NSString *documentsDirectory =[NSHomeDirectory()
stringByAppendingPathComponent:@"Documents"];
NSString *videoOutputPath =[documentsDirectorystringByAppendingPathComponent:@"test_output.mp4"];
if ([fileMgrremoveItemAtPath:videoOutputPatherror:&error]!=YES) {
NSLog(@"無法刪除檔案,錯誤資訊:%@",[error localizedDescription]);
}
//聲音來源路徑(最終混合的音訊)
NSURL *audio_inputFileUrl =self.mixURL;
//視訊來源路徑
NSURL *video_inputFileUrl = [NSURLfileURLWithPath:self.videoPath];
//最終合成輸出路徑
NSString *outputFilePath =[documentsDirectorystringByAppendingPathComponent:@"final_video.mp4"];
NSURL *outputFileUrl = [NSURLfileURLWithPath:outputFilePath];
if([[NSFileManagerdefaultManager]fileExistsAtPath:outputFilePath])
[[NSFileManagerdefaultManager]removeItemAtPath:outputFilePatherror:nil];
CMTime nextClipStartTime =kCMTimeZero;
//建立可變的音訊視訊組合
AVMutableComposition* mixComposition =[AVMutableCompositioncomposition];
//視訊採集
AVURLAsset* videoAsset =[[AVURLAssetalloc]initWithURL:video_inputFileUrloptions:nil];
CMTimeRange video_timeRange =CMTimeRangeMake(kCMTimeZero,videoAsset.duration);
AVMutableCompositionTrack*a_compositionVideoTrack = [mixCompositionaddMutableTrackWithMediaType:AVMediaTypeVideopreferredTrackID:kCMPersistentTrackID_Invalid];
[a_compositionVideoTrackinsertTimeRange:video_timeRangeofTrack:[[videoAssettracksWithMediaType:AVMediaTypeVideo]objectAtIndex:0]atTime:nextClipStartTimeerror:nil];
//聲音採集
AVURLAsset* audioAsset =[[AVURLAssetalloc]initWithURL:audio_inputFileUrloptions:nil];
CMTimeRange audio_timeRange =CMTimeRangeMake(kCMTimeZero,videoAsset.duration);//聲音長度擷取範圍==視訊長度
AVMutableCompositionTrack*b_compositionAudioTrack = [mixCompositionaddMutableTrackWithMediaType:AVMediaTypeAudiopreferredTrackID:kCMPersistentTrackID_Invalid];
[b_compositionAudioTrackinsertTimeRange:audio_timeRangeofTrack:[[audioAssettracksWithMediaType:AVMediaTypeAudio]objectAtIndex:0]atTime:nextClipStartTimeerror:nil];
//建立一個輸出
AVAssetExportSession* _assetExport =[[AVAssetExportSessionalloc]initWithAsset:mixCompositionpresetName:AVAssetExportPresetMediumQuality];
_assetExport.outputFileType =AVFileTypeQuickTimeMovie;
_assetExport.outputURL =outputFileUrl;
_assetExport.shouldOptimizeForNetworkUse=YES;
self.theEndVideoURL=outputFileUrl;
[_assetExportexportAsynchronouslyWithCompletionHandler:
^(void ) {
[MBProgressHUDhideHUDForView:self.viewanimated:YES];
//播放
NSURL*url = [NSURLfileURLWithPath:outputFilePath];
MPMoviePlayerViewController *theMovie =[[MPMoviePlayerViewControlleralloc]initWithContentURL:url];
[selfpresentMoviePlayerViewControllerAnimated:theMovie];
theMovie.moviePlayer.movieSourceType=MPMovieSourceTypeFile;
[theMovie.moviePlayerplay];
}
];
NSLog(@"完成!輸出路徑==%@",outputFilePath);
}
//通過檔案路徑建立和新增音訊素材
- (void)setUpAndAddAudioAtPath:(NSURL*)assetURLtoComposition:(AVMutableComposition*)composition start:(CMTime)startdura:(CMTime)duraoffset:(CMTime)offset{
AVURLAsset *songAsset =[AVURLAssetURLAssetWithURL:assetURLoptions:nil];
AVMutableCompositionTrack *track =[compositionaddMutableTrackWithMediaType:AVMediaTypeAudiopreferredTrackID:kCMPersistentTrackID_Invalid];
AVAssetTrack *sourceAudioTrack =[[songAssettracksWithMediaType:AVMediaTypeAudio]objectAtIndex:0];
NSError *error =nil;
BOOL ok =NO;
CMTime startTime = start;
CMTime trackDuration = dura;
CMTimeRange tRange =CMTimeRangeMake(startTime,trackDuration);
//設定音量
//AVMutableAudioMixInputParameters(輸入引數可變的音訊混合)
//audioMixInputParametersWithTrack(音訊混音輸入引數與軌道)
AVMutableAudioMixInputParameters *trackMix =[AVMutableAudioMixInputParametersaudioMixInputParametersWithTrack:track];
[trackMixsetVolume:0.8fatTime:startTime];
//素材加入陣列
[audioMixParamsaddObject:trackMix];
//Insert audio into track //offsetCMTimeMake(0, 44100)
ok = [trackinsertTimeRange:tRangeofTrack:sourceAudioTrackatTime:kCMTimeInvaliderror:&error];
}
#pragma mark - 儲存路徑
-(NSString*)getLibarayPath
{
NSFileManager *fileManager =[NSFileManagerdefaultManager];
NSArray* paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString* path = [pathsobjectAtIndex:0];
NSString *movDirectory = [pathstringByAppendingPathComponent:@"tmpMovMix"];
[fileManagercreateDirectoryAtPath:movDirectorywithIntermediateDirectories:YESattributes:nilerror:nil];
return movDirectory;
}
相關推薦
iOS視訊新增背景音樂同時保留原音
IOS視訊新增背景音樂同時保留原音 //抽取原視訊的音訊與需要的音樂混合 -(void)addmusic:(id)sender { [MBProgressHUDshowHUDAddedTo:self.viewanimated:YES]
java操作ffmpeg為視訊新增背景音樂
最近學習仿抖音微信小程式遇到一個坑,視訊中使用以下語句為視訊新增背景音樂 ffmpeg.exe -i input.mp4 -i 音樂.mp3 -t 7 -y 新視訊.mp4 ,然而我怎麼嘗試都不行,上百度查詢也基本都是安卓如何使用ffmpeg為視訊新增背景音樂,在我不斷的
iOS上視訊剪輯片段和新增背景音樂
最近在研究剪輯視訊,目前知道了怎麼剪輯視訊片段和新增背景音樂,不多說了,程式碼寫的很清楚,如下: 1 新增背景音樂呼叫 [PSJVideoEditor cropWithVideoUrlStr:_videoUrl audioUrl:_audioUrl start:
iOS學習(如何新增背景音樂,以及音效)
1.在General中找到Linked Frameworks and Libraries 然後匯入兩個框架分別是 AVFoundation AudioToolBox 2.然後引入標頭檔案 #import "AVFoundation/AVFoundation.h"
給MFC新增圖片,動圖,新增背景音樂(打包大放送)
最近突然有了一種想用MFC做賀卡的想法,做成一個.exe程式,讓被祝賀的人可以用電腦在任何位置開啟觀看,這就要求所使用資源必須新增至MFC工程,下面的方法都是本人測試過的,希望對你有所幫助呦! 1新增圖片 MFC只支援新增256色bmp格式的圖片,如果你沒有bmp格式的圖片,可以從該連結
部落格新增背景音樂
設定-->部落格設定-->頁首Html程式碼 填入: <embed border="0" marginwidth="0" marginheight="0" width=330 height=100src==="//music.163.com/outchain/player?type=2&
android開發 利用Service給遊戲新增背景音樂
1、增加一個類,這個類是繼承Service的,如下。 Java程式碼 package com.zhw.game8; /** * Created by 得已 on 2018/9/19. */ import android.app.Service; import an
如何給視訊加背景音樂?簡單快速上手,製作抖音等小視訊必備!
如何給視訊加背景音樂?用愛剪輯3個步驟就能快速完成!現在製作抖音等小視訊,都需要對拍攝的視訊進行加工,加背景音樂就是最基礎的一步,也是最簡單的。 所以下面除了分享用愛剪輯給視訊加背景音樂的方法,還會分享製作爆款小視訊的大神技巧。 第一步:把視訊新增到愛剪輯中 開啟愛剪輯後,可以點選“
Godot3遊戲引擎入門之九:建立UI介面並新增背景音樂
一、前言 本文開篇必須提到兩個值得高興的訊息: 有讀者專門給我來信了,鼓勵我堅持下去,有點受寵若驚,心裡非常高興,希望有更多讀者,更多交流,有建議歡迎留言到我的微信公眾號或者部落格。 新預覽版: Godot 3.1 Alpha2 已經發布,也就是第二個預覽版
【java小程式】使用ffmpeg進行視訊與背景音樂的整合
文章目錄 ffmpeg簡介 利用ffmpeg進行程式碼開發 ffmpeg處理工具類的呼叫 在小視訊開發中,上傳視訊時需要選擇背景音樂進行視訊與背景音樂的整合。這裡我們就藉助ffmpeg這個工具來完
【Ghost Blog】如何給Ghost Blog新增背景音樂
昨天閒著無聊,就給自己的電腦裝了一個Ghost的部落格,開啟部落格的第一眼就被震撼到了,我們可以發現介面十分的簡介。。。。上面的都是廢話 我們來看一看我我選擇的音樂播放器——網易雲音樂,這個播放器就是在一個歌曲上點開之後有一個生成外鏈播放器的按鈕,然後讓我們看
萬彩影像大師教程 | 新增背景音樂
一個高質量的相簿視訊,除了好看的照片,精美的動畫,巧妙的佈局,當然還少不了好的背景樂的加持。怎麼選擇一首應景的背景音樂呢?且看以下小貼士: 儘量使用輕音樂。輕音樂自身所帶的情感色彩並不多,包容性更強。 根據視訊的內容、情感基調來選擇背景音樂。例如,婚禮視訊,求婚表白視
Android中新增背景音樂的兩種方法
前些天在嘗試自己寫一個Android小遊戲——flybird 基本功能實現了,就想新增聲音,然後上網查了查,大多是一樣,可是用到我這,有些卻不可以用,所以我還用了兩種方法。 下面談談這兩種方法。 方法一:這是使
iOS UIView 新增背景圖片
UIView 新增背景圖片: 第一種方法(不推薦): 用的UIView的設定背景顏色方法,用圖片做圖案顏色,然後傳給背景顏色。 [self.view setBackgroundColor:[UIColor colorWithPatternImage
七十八首適合相簿視訊的背景音樂
記得初次接觸相簿視訊製作時,沒有意識到音樂的重要性,胡亂新增自己喜歡的音樂,結果很多時候相簿總給人的感覺“不搭配”,沒法提起興致繼續下去。 於是有了整理歸納的念頭。 這個單子很多來自看過的一些製作精良的相簿。 事實上,音樂與畫面搭配沒有固定之規,有些視訊中,作者為了更好的搭配,或者在影象層上增加了動畫,或者
Unity3D 5.x怎麼新增背景音樂?
遊戲一做到主要邏輯的地方就卡殼,這麼懶,拼湊程式碼都懶得想,還是先乾點有意思的事情,給遊戲添加個背景音樂先。 加油,很多問題百度就能解決了哦。 1、首先,新建一個工程,在Hierarchy檢視中選中Main Camera,然後在Inspector檢視中點選下方的大按
java程式新增背景音樂
在寫Java程式的時候常常需要播放背景音樂,其實實現只需兩步即可。 1.首先需要下載一個jar包 下載完成,解壓後找到如圖所示的包匯入到專案中去。 2.然後, 只需將下面的幾行程式碼粘入程式中即可,即粘即用,如果出現錯誤多半是jar包沒有正確匯入。 imp
Java程式碼新增背景音樂
太心塞!弄了很久才終於把Java新增背景音樂實現了。不過還是很Happy! 這次介紹的辦法,是隻要一開啟Java Application,便可直接聽到背景音樂。程式碼儲存,方便以後再次利用。 package com.music; import java.applet.Au
android 視訊編輯框架(分割,裁剪,旋轉,合併,新增logo,背景音樂等等)
EpMediaAndroid上基於FFmpeg開發的視訊處理框架,簡單易用,體積小,幫助使用者快速實現視訊處理功能。包含以下功能:剪輯,裁剪,旋轉,映象,合併,分離,變速,新增LOGO,新增濾鏡,新增背
背景音樂自動播放,兼容ios
ont 背景音樂 get play tro mco code cti rem 背景音樂自動播放,兼容ios <audio id="myAudio" autoplay loop> <source src=" bgMusic.mp3" type="a