如何提取media中的audio

hjq503677787 2017-01-26 03:25:02
我都快疯掉了 找了好久方法 看了api 但是还是搞定不了 ,代码如下
NSURL *mp4URL = [[NSBundle mainBundle] URLForResource:@"haha.mp4" withExtension:nil];
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:mp4URL options:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] forKey:AVURLAssetPreferPreciseDurationAndTimingKey]];

AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];

NSMutableArray *images = [[NSMutableArray alloc] initWithCapacity:1000];
CMTime duration = asset.duration;
Float64 durationSeconds = CMTimeGetSeconds(duration); //视频总秒数
//获取帧率
Float64 fps = [[[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] nominalFrameRate];
Float64 totalFrames = durationSeconds * fps;
NSLog(@"FLOAT:%f",totalFrames);
// CMTimeValue intervalSeconds = duration.value / 10;
CMTime time;
NSMutableArray *times = [NSMutableArray array];

for (NSUInteger i = 0; i < totalFrames; i++) {
// CMTimeMake(a,b) a当前第几帧, b每秒钟多少帧.当前播放时间a/b
//
// CMTimeMakeWithSeconds(a,b) a当前时间,b每秒钟多少帧.
time = CMTimeMake(i, fps);
[times addObject:[NSValue valueWithCMTime:time]];

}
CMTimeRange audioTimeRange = CMTimeRangeMake(kCMTimeZero, duration);
// <-------分离音频
AVMutableComposition *mixComposition = [[AVMutableComposition alloc] init];
AVMutableCompositionTrack *audioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio
preferredTrackID:kCMPersistentTrackID_Invalid];
[audioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, duration)
ofTrack:[[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:kCMTimeZero error:nil];
[audioTrack insertTimeRange:audioTimeRange ofTrack:([asset tracksWithMediaType:AVMediaTypeAudio].count > 0) ? [asset tracksWithMediaType:AVMediaTypeAudio].firstObject : nil atTime:kCMTimeZero error:nil];
//创建输出对象
AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition
presetName:AVAssetExportPresetHighestQuality];
exporter.outputURL= [NSURL URLWithString:[NSString stringWithFormat:@"%@/nima.mp4",kSplitImages]];
exporter.outputFileType = AVFileTypeMPEGLayer3;
// @"com.apple.quicktime-movie";
exporter.shouldOptimizeForNetworkUse = YES;
[exporter exportAsynchronouslyWithCompletionHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{

[self exportDidFinish:exporter];
});
}];
// <=---------

__block NSInteger count = 0;
[generator generateCGImagesAsynchronouslyForTimes:times completionHandler:^(CMTime requestedTime, CGImageRef cgImage,
CMTime actualTime,
AVAssetImageGeneratorResult result,
NSError *error) {
if (cgImage) {
UIImage *image = [UIImage imageWithCGImage:cgImage];
[images addObject:image];
[UIImagePNGRepresentation(image) writeToFile:[NSString stringWithFormat:@"%@/%ld.png",kSplitImages,(long)count++] atomically:YES];
NSLog(@"IMGPATH:%@,%lu",kSplitImages,(unsigned long)images.count);
}

}];
...全文
243 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
ExMplayer v5.0 (老朽痴拙汉化版)是一个免费的便携的GUI为前端的获奖的MPlayer,支持3D/2D视频播放, 可当工具用,如音频转换器,视频转换为GIF动画,媒体切割和音频提取。QT编程可运行于多平台PC。 它可以播放音频,视频,dvd文件(.vob),vcd文件(.mpg.dat)等,并能支持网络流。播放数以百计不同的视频和音频格式, 包括MPEG-1,-2and-4 (DivX), H.264,H265 /HEVC,VP9, Ogg Vorbis和AAC。支持字幕, 字幕解码是使用ASS library完成的。 因此它可以播放任何媒体格式,无需任何外部编解码器。 ExMplayer还支持3D视频回放,支持多种3D格式,您可以轻松地观看低音量的媒体文件用音量增强高达5000%。 媒体切割器可用于剪切媒体文件,而不会造成质量损失.音频提取器可用于从视频文件抽取音频。音频转换器支持11种不同的音频格式。 可以从YouTube, facebook, dailymotion, metacafe 和更多的网站下载视频/音频。 功能详见 https://sourceforge.net/projects/exmplayer/?source=directory 字幕搜索功能 (Opensubtitles.org) Facebook分享(收听...观看...) 3D视频支持功能 增加了音量增强器(最多5000% 提升),可以播放低音量文件 支持多种3D 输出格式 浮雕眼镜或偏光3D玻璃可使用 添加H265/HEVC 支持 无需编解码器 增强的Aqua皮肤 观看3D视频没有眼镜可使用内置2D回放 改进的缩略图查找 添加了高级信息 由youtube-dl下载视频 视频转GIF动画 ExMplayer is a free GUI front-end for award-winning MPlayer with 3D/2D video playback support ,tools like audio converter, media cutter and audio extractor.It can play audio,video,dvd files(.vob),vcd files(.mpg,.dat) etc and supports network streaming. Plays hundreds of different video and audio formats, including MPEG-1, -2 and -4 (DivX), H.264,H265 /HEVC,VP9, Ogg Vorbis and AAC.Supports subtitles, subtitle decoding is done using the ASS library.So it can play any media formats without any external codecs. ExMplayer also supports 3D video playback, wide variety of 3D formats supported. You can easily watch low volume media files with volume booster with volume boost up to 5000%. Media cutter can be used to cut media files without quality loss.Audio extractor can be used to extract audio from video files. Audio converter supports 11 different audio formats. Download video/audio from YouTube,facebook,dailymotion,metacafe and more sites. Subtitle Search (Opensubtitles.org) Facebook sharing( Listening to... Watching....) 3D video support

29,028

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧