iOS 视频合成相关
裁剪视频是很久之前所做的项目中用到的,现在又看到了,整理一下。
与之相关的这些类有些抽象,所以我这里重点将它们具体化。用代码将视频合成其实与绘声绘影/vegas等软件将视频合成的过程类似,首先了解下这类软件一些相关知识:一个工程文件中有很多轨道,如音频轨道1,音频轨道2,音频轨道3,视频轨道1,视频轨道2等等,每个轨道里有许多素材,对于每个视频素材,它可以进行缩放、旋转等操作,素材库中的视频拖到轨道中会分为视频轨和音频轨两个轨道。这里用这些软件里的一些术语类来比这些类:
AVAsset:素材库里的素材;
AVAssetTrack:素材的轨道;
AVMutableComposition :一个用来合成视频的工程文件;
AVMutableCompositionTrack :工程文件中的轨道,有音频轨、视频轨等,里面可以插入各种对应的素材;
AVMutableVideoComposition:用来生成video的组合指令,包含多段instruction。可以决定最终视频的尺寸,裁剪需要在这里进行;
AVMutableVideoCompositionInstruction:一个指令,决定一个timeRange内每个轨道的状态,包含多个layerInstruction;
AVMutableVideoCompositionLayerInstruction:在一个指令的时间范围内,某个轨道的状态;
AVAssetExportSession:配置渲染参数并渲染。
接下来就用这种类比的方式裁剪一个视频:
1.将素材拖入到素材库中
AVAsset *asset = [AVAsset assetWithURL:outputFileURL];
AVAssetTrack *videoAssetTrack = [[asset tracksWithMediaType:AVMediaTypeVideo]objectAtIndex:0];//素材的视频轨
AVAssetTrack *audioAssertTrack = [[asset tracksWithMediaType:AVMediaTypeAudio]objectAtIndex:0];//素材的音频轨
2.将素材的视频插入视频轨,音频插入音频轨
AVMutableComposition *composition = [AVMutableComposition composition];//这是工程文件AVMutableCompositionTrack *videoCompositionTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];//视频轨道
[videoCompositionTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAssetTrack.timeRange.duration) ofTrack:videoAssetTrack atTime:kCMTimeZero error:nil];//在视频轨道插入一个时间段的视频AVMutableCompositionTrack *audioCompositionTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];//音频轨道
[audioCompositionTrack insertTimeRange: CMTimeRangeMake(kCMTimeZero, videoAssetTrack.timeRange.duration) ofTrack:audioAssertTrack atTime:kCMTimeZero error:nil];//插入音频数据,否则没有声音
3.裁剪视频,就是要将所有视频轨进行裁剪,就需要得到所有的视频轨,而得到一个视频轨就需要得到它上面所有的视频素材
AVMutableVideoCompositionLayerInstruction *videoCompositionLayerIns = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:videoAssetTrack];
[videoCompositionLayerIns setTransform:videoAssetTrack.preferredTransform atTime:kCMTimeZero];//得到视频素材(这个例子中只有一个视频)AVMutableVideoCompositionInstruction *videoCompositionIns = [AVMutableVideoCompositionInstruction videoCompositionInstruction];
[videoCompositionIns setTimeRange:CMTimeRangeMake(kCMTimeZero, videoAssetTrack.timeRange.duration)];//得到视频轨道(这个例子中只有一个轨道)AVMutableVideoComposition *videoComposition = [AVMutableVideoComposition videoComposition];
videoComposition.instructions = @[videoCompositionIns];
videoComposition.renderSize = CGSizeMake(...);//裁剪出对应的大小
videoComposition.frameDuration = CMTimeMake(1, 30);
4.导出
AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetMediumQuality];
exporter.videoComposition = videoComposition;
exporter.outputURL = [NSURL fileURLWithPath:_outputFilePath isDirectory:YES];
exporter.outputFileType = AVFileTypeMPEG4;
exporter.shouldOptimizeForNetworkUse = YES;
[exporter exportAsynchronouslyWithCompletionHandler:^{if (exporter.error) {//...}else{//... }}];
以上文章转载自:http://blog.csdn.net/xiaolinyeyi/article/details/50878996
iOS 视频合成相关相关推荐
- Android/iOS视频编辑SDK开发记
开发移动端的视频编辑SDK已经三个月了,因为之前有过在PC上做实时视频合成的经验,所以乐观预期最短两个月就够了,因为主要的开发难点只在于Android和iOS移动平台相关的模块,以及视频合成的时间线控 ...
- ffmpeg ios无声音 视频合成声音没有声音
ios无声音,安卓正常 1.用如下命令合成将mp3转为aac格式 ffmpeg -i 6s.mp3 -acodec aac -strict experimental -ab 128k -ar 16k ...
- iOS 如何对音频、视频合成,配音、卡拉OK技术
iOS 如何对音频.视频合成,配音.卡拉OK技术 iOS原生的开发框架集成了丰富的视频/音频处理功能,所以用不着去找第三方框架.只要: #import <AVFoundation/AVFound ...
- iOS开发--AVFoundation视频合成(添加背景音乐)
前言 当下音视频处理的技术的重要性不言而喻, FFmpeg的强大不可撼动, 但是, 确实难啃. 由简递难, 我们来看看苹果原生的API如何做到对视频素材进行处理的. AVFoundation既可以对视 ...
- WeBRTC IOS视频采集流程
因CSDN MardDown语法问题,流程图部分不兼容有道云笔记,所以流程图部分请拷贝到有道云笔记生成查看. iOS视频录制: 同拍照一样视频录制功能有两种实现方式 UIImagePickerView ...
- iOS 视频直播技术
iOS 视频直播技术 直播难:直播中运用到的技术难点非常之多,视频/音频处理,图形处理,视频/音频压缩,CDN分发,即时通讯等技术,每一个技术都够你学几年的. 直播易:市场已经有很多成熟的案例了.最常 ...
- SDVideoCamera:仿抖音(视频录制、视频剪辑、视频合成)
闲话不多讲,先上项目Github传送门. SDVideoCamera传送门 前言 又是好久没有更新博客了,哈哈哈,由于近来从公司离职,再加上近来要结婚的缘故,所以有大量充足的时间来整理以前写的一个仿写 ...
- AVFoundation 视频常用套路: 视频合成与导出,拍视频手电筒,拍照闪光灯
拍视频,把视频文件导出到相册 - 处理 AVFoundation,套路就是配置 session, 添加输入输出, 把视频流的管道打通. 用 device 作为输入,获取信息,用 session 作为输 ...
- Mac High Sierra + pyCharm + py3.5 + Moviepy 工厂式视频合成测试
近日接触手机端小视频合成业务,发现现有的主流视频合成APP中,能实现"单张图片 + 指定语音"类型的APP屈指可数,ios自带APP"Clips"仅能合成正方形 ...
最新文章
- 万年历小程序(黑框)
- APPLE框架之高效便捷的Repository解决方案
- [Java并发编程实战] 共享对象之可见性
- C语言中的匿名结构体
- wdcp+定时运营php_wdcp设置计划任务
- IFrame标签的两个用法介绍
- HugeGraph 多图配置
- beego mysql按时间排序_beego的数据库操作优化
- python单词的含义-python 前面几个单词含义
- 【赛尔原创】如何自动地向知识图谱中添加属性?
- php数据表创建命令代码,MySQL创建和删除数据表的命令及语法详解
- SQL prompt无法激活跳转到127.0.0.1:22223的解决方案
- 【VBA】excel多功能数据处理插件
- 微信小程序Demo大全
- 163邮件服务器设置 端口号,163邮箱端口设置
- 【Verilog】一文了解verilog基础语法
- 手绘板计算机技术,手绘板怎么用 手绘板和数位板的差别区别【详解】
- 闪电Android视频转换器,闪电Android视频转换器
- 中药图片拍照识别系统全套开源
- 各种求圆周率π的算法(蒙特卡洛法的Java实现)