swift 视频合成剪辑——swift学习(十)

Composition

普及下相关知识:一个工程文件有很多轨道,如音频轨道1、音频轨道2、视频轨道1视频轨道2等,每个轨道里有许多素材,它可以进行压缩、旋转等操作,素材库中的视频拖到轨道中会分为视频轨和音频轨两个轨道。

编辑

AVFoundation framework提供了丰富的功能类以便于编辑资源的音视频。
AVAsset:素材库里的素材;
AVAssetTrack:素材的轨道;
AVFoundation编辑API的核心就是compositions(合成);
composition就是从一个或多个不同的资源中获取到的简单的track(轨道)的集合;
AVMutableComposition:一个用来合成视频的工程文件;
AVMutableCompositionTrack:工程文件中的轨道,有有音频轨、视频轨等,里面可以插入各种对应的素材;
AVMutableVideoCompositionLayerInstruction:视频轨道中的一个视频,可以缩放、旋转等;
AVMutableVideoCompositionInstruction:一个视频轨道,包含了这个轨道上的所有视频素材;
AVMutableVideoCompositionInstruction和AVMutableVideoCompositionLayerInstruction一般是配合使用,用来给视频添加水印或者旋转方向的;
AVMutableVideoComposition:管理所有视频轨道,可以决定最终视频的尺寸,裁剪需要在这里进行;
AVMutableAudioMix是给视频添加音频的;
AVAssetExportSession:配置渲染参数并渲染。
你可以使用AVMutableAudioMix类编辑你的音频track。比如你可以设置最大音量以及音轨坡度。
你可以使用AVMutableVideoComposition类直接编辑视频轨道。

创建Composition

你可以使用AVMutableComposition类创建composition。你必须添加一个或多个composition track到你的composition里,相当于使用AVMutableCompositionTrack类。最简单的composition就是一个视频一个音频track。

let mutableComposition = AVMutableComposition()
    let mutableCompositionVideoTrack = mutableComposition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: kCMPersistentTrackID_Invalid) //视频轨道
    let mutableCompositionAudioTrack = mutableComposition.addMutableTrackWithMediaType(AVMediaTypeAudio, preferredTrackID: kCMPersistentTrackID_Invalid) //音频轨道 
多种方式初始化Composition Track

当添加新的track到composition,你必须提供媒体类型和Track ID。尽管音视频是我们常用额媒体的类型,但是同样,我们可以使用其他类型,比如AVMediaTypeSubtitle或AVMediaTypeText.

添加试听数据到Composition

一旦你的composition有一个或者多个tracks,你可以添加新的数据到合适的tracks上。你可以使用可变的composition接口放置多个曲目相同的底层媒体类型在同一轨道上。

let videoAsset = AVAsset(URL:NSURL(string:"http://140.207.205.6/sohu/v1/TmwmTmxATmXG9vhNXRDFk9CBJpakEWJmopXAOCkytHrChWoIymcAr.mp4?k=mlU3Gr&p=j9lvzSwUopPGqmwCoSwGqSoCqpXWsUwIWFo7oB2svm12ZDeS0tvGRD6sWYNsfY1svmfCZMbVwmfVZD6HfYXswmNCNF2OWYdXfGN4wm6AZDNXfY1swm1BqVPcgYeSoMAARDx&r=TmI20LscWOoUgt8IS3HTaI2yT8XPLNGWVEt88eILOfkHkg9kjdxLYf9SlZEmrW49JLzSxm0KOyOHXIY&q=OpC7hW7IWJodRDbOwmfCyY2sWF1HfJ1tlG6t5G64WYo2ZDv4fFesWGNOwm4cWhbOvmscWY&cip=140.207.16.150")!)  //视频资源1

    let anotherAsset = AVAsset(URL: NSURL(string: "http://data.vod.itc.cn/?new=/218/117/QH0duE89EFks1QWyHBshuL.mp4&vid=3088596&plat=17&mkey=CLfbS51YewD-mLXpGv4ZyKSwDrzD1heG&ch=tv&uid=1602171411153447&SOHUSVP=EtzMYkA639BAKmIufcqZ2lpZcDeNMTd-V15MB1rYf9k&pt=5&prod=h5&pg=1&eye=0&cv=1.0.0&qd=68000&src=11060001&ca=4&cateCode=115&_c=1&appid=tv&oth=&cd=")!) //视频资源2
    let videoAssetTrack = videoAsset.tracksWithMediaType(AVMediaTypeVideo)[0] as AVAssetTrack //视频资源1的视频轨
    let anotherVideoAssetTrack = anotherAsset.tracksWithMediaType(AVMediaTypeVideo)[0] as AVAssetTrack //视频资源2的视频轨
    //
    try! mutableCompositionVideoTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, videoAssetTrack.timeRange.duration), ofTrack: videoAssetTrack, atTime: kCMTimeZero) //在视频轨道里插入视频资源1的视频轨
    try! mutableCompositionVideoTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, anotherVideoAssetTrack.timeRange.duration), ofTrack: anotherVideoAssetTrack, atTim
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值