Upload
yusei-nishiyama
View
2.727
Download
3
Tags:
Embed Size (px)
DESCRIPTION
iOSで動画編集をするためのTips。主に、AVFoundationの機能について解説しています。
Citation preview
Video Editing in iOSpotatotips #2
2013.12.11
Yusei Nishiyama
自己紹介name : 西山勇世twitter : @yuseinishiyamablog : http://yuseinishiyama.com
・iOS / Unity
・動画編集 / AR
・最近は色々と拗らせてSchemeとか...
・社会人2年目(これからグイグイくる予定)
動画編集してますか??
AVFoundation便利最高!!!!AVFoundationで出来ること
Composing a Timeline
AVMutableComposition *composition = [AVMutableComposition composition];AVMutableCompositionTrack *compositionVideoTrack =[composition addMutableTrackWithMediaType:AVMediaTypeVideopreferredTrackID:...];[compositionVideoTrack insertTimeRange:...ofTrack:clipVideoTrack atTime:... error:...];
複数の動画をつないだり...。
Audio Mixing
AVMutableAudioMixInputParameters *trackMix =[AVMutableAudioMixInputParametersaudioMixInputParametersWithTrack:mainAudioTrack];[trackMix setVolume:1.0 atTime:kCMTimeZero];[trackMix setVolumeRampFromStartVolume:1.0toEndVolume:0.2timeRange:CMTimeRangeMake(x,y-x)];...AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];audioMix.inputParameters = [NSArray arrayWithObject:trackMix];
ボリュームランプをつけてみたり...。
Building Transitions
AVMutableVideoCompositionInstruction *transition = [AVMutableVideoCompositionInstruction videoCompositionInstruction];transition.timeRange = transitionTimeRange;AVMutableVideoCompositionLayerInstruction *fromLayer = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:trackA];[fromLayer setOpacityRampFromStartOpacity:1.0 toEndOpacity:0.0 timeRange:transitionTimeRange];AVMutableVideoCompositionLayerInstruction *toLayer = ...layerInstructions = [NSArray arrayWithObjects:fromLayer, toLayer, nil];
複数の動画を同時に表示したり...。ディゾルブやコーナーワイプなどに使えそう。
長い...
CALayers in Movies
CALayer *parentLayer = [CALayer layer];CALayer *videoLayer = [CALayer layer];parentLayer.frame = CGRectMake(0, 0, VIDEO_SIZE.width, VIDEO_SIZE.height);videoLayer.frame = CGRectMake(0, 0, VIDEO_SIZE.width, VIDEO_SIZE.height);[parentLayer addSublayer:videoLayer];[parentLayer addSublayer:[self textLayerWithStartTime:startTime withText:text]]; videoComposition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer];
さらには、CALayerをオーバレイしたりなんてことも可能!
videoComposition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer];
Advanced Editingピクセル単位での編集
• 録画やファイル読み込みなどに、低レベルのAPIを利用すればPixelBufferにアクセス可能(cf.AVAssetReader/Writer、AVCaptureVideoDataOutput)
• それらをCPUで編集するのは流石に重い...→GPUで処理したい。
• なんだかんだでGPUImageがおすすめ。OpenGLの
セットアップのためにboilerplate codeを書かなくて良いのは大きい。
一応、iOS7にも触れておくと...
@protocol AVVideoCompositingに準拠したクラス。
・Custom Video Compositionパイプラインがより柔軟になった。AVAssetReader/Writerに比べると、容易にpixelBufferにアクセスできるため、コードの見通しが良くなる。
Summary
• AVFoundationには、動画編集を柔軟に行うためのAPIが多数存在する。
• GPUImageを使用することで、OpenGLを利用したピクセル単位での処
理が簡単に行える。
More Information
• WWDC 2011 “Working with Media in AVFoundation”
• WWDC 2013“Advanced Editing with AV Foundation”
ありがとうございました