裁剪视频是很久之前所做的项目中用到的,现在又看到了,整理一下。
与之相关的这些类有些抽象,所以我这里重点将它们具体化。用代码将视频合成其实与绘声绘影/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 视频合成相关相关推荐

  1. Android/iOS视频编辑SDK开发记

    开发移动端的视频编辑SDK已经三个月了,因为之前有过在PC上做实时视频合成的经验,所以乐观预期最短两个月就够了,因为主要的开发难点只在于Android和iOS移动平台相关的模块,以及视频合成的时间线控 ...

  2. ffmpeg ios无声音 视频合成声音没有声音

    ios无声音,安卓正常 1.用如下命令合成将mp3转为aac格式 ffmpeg -i 6s.mp3 -acodec aac -strict experimental -ab 128k -ar 16k ...

  3. iOS 如何对音频、视频合成,配音、卡拉OK技术

    iOS 如何对音频.视频合成,配音.卡拉OK技术 iOS原生的开发框架集成了丰富的视频/音频处理功能,所以用不着去找第三方框架.只要: #import <AVFoundation/AVFound ...

  4. iOS开发--AVFoundation视频合成(添加背景音乐)

    前言 当下音视频处理的技术的重要性不言而喻, FFmpeg的强大不可撼动, 但是, 确实难啃. 由简递难, 我们来看看苹果原生的API如何做到对视频素材进行处理的. AVFoundation既可以对视 ...

  5. WeBRTC IOS视频采集流程

    因CSDN MardDown语法问题,流程图部分不兼容有道云笔记,所以流程图部分请拷贝到有道云笔记生成查看. iOS视频录制: 同拍照一样视频录制功能有两种实现方式 UIImagePickerView ...

  6. iOS 视频直播技术

    iOS 视频直播技术 直播难:直播中运用到的技术难点非常之多,视频/音频处理,图形处理,视频/音频压缩,CDN分发,即时通讯等技术,每一个技术都够你学几年的. 直播易:市场已经有很多成熟的案例了.最常 ...

  7. SDVideoCamera:仿抖音(视频录制、视频剪辑、视频合成)

    闲话不多讲,先上项目Github传送门. SDVideoCamera传送门 前言 又是好久没有更新博客了,哈哈哈,由于近来从公司离职,再加上近来要结婚的缘故,所以有大量充足的时间来整理以前写的一个仿写 ...

  8. AVFoundation 视频常用套路: 视频合成与导出,拍视频手电筒,拍照闪光灯

    拍视频,把视频文件导出到相册 - 处理 AVFoundation,套路就是配置 session, 添加输入输出, 把视频流的管道打通. 用 device 作为输入,获取信息,用 session 作为输 ...

  9. Mac High Sierra + pyCharm + py3.5 + Moviepy 工厂式视频合成测试

    近日接触手机端小视频合成业务,发现现有的主流视频合成APP中,能实现"单张图片 + 指定语音"类型的APP屈指可数,ios自带APP"Clips"仅能合成正方形 ...

最新文章

  1. 万年历小程序(黑框)
  2. APPLE框架之高效便捷的Repository解决方案
  3. [Java并发编程实战] 共享对象之可见性
  4. C语言中的匿名结构体
  5. wdcp+定时运营php_wdcp设置计划任务
  6. IFrame标签的两个用法介绍
  7. HugeGraph 多图配置
  8. beego mysql按时间排序_beego的数据库操作优化
  9. python单词的含义-python 前面几个单词含义
  10. 【赛尔原创】如何自动地向知识图谱中添加属性?
  11. php数据表创建命令代码,MySQL创建和删除数据表的命令及语法详解
  12. SQL prompt无法激活跳转到127.0.0.1:22223的解决方案
  13. 【VBA】excel多功能数据处理插件
  14. 微信小程序Demo大全
  15. 163邮件服务器设置 端口号,163邮箱端口设置
  16. 【Verilog】一文了解verilog基础语法
  17. 手绘板计算机技术,手绘板怎么用 手绘板和数位板的差别区别【详解】
  18. 闪电Android视频转换器,闪电Android视频转换器
  19. 中药图片拍照识别系统全套开源
  20. 各种求圆周率π的算法(蒙特卡洛法的Java实现)

热门文章

  1. html添加地址模板,HTML经典模板总结(地址)
  2. komodo edit 支持java么_Komodo Edit for Mac(多语言集成开发环境)
  3. 图文正解板卡固态电容!
  4. 中小企业的股权激励应该如何设计
  5. Web(前端开发)结合html、css、js写一个简单的相册
  6. Commvault Oracle备份常用命令
  7. Left_Leaning RedBlack Tree
  8. 【数据结构】二叉树OJ练习
  9. php开发自动拨号,使用Asterisk manager API实现自动拨号
  10. 剥开区块链的皮,仅剩最后的欢愉