17
Video Editing in iOS potatotips #2 2013.12.11 Yusei Nishiyama

Video Editing in iOS

Embed Size (px)

DESCRIPTION

iOSで動画編集をするためのTips。主に、AVFoundationの機能について解説しています。

Citation preview

Page 1: Video Editing in iOS

Video Editing in iOSpotatotips #2

2013.12.11

Yusei Nishiyama

Page 2: Video Editing in iOS

自己紹介name : 西山勇世twitter : @yuseinishiyamablog : http://yuseinishiyama.com

・iOS / Unity

・動画編集 / AR

・最近は色々と拗らせてSchemeとか...

・社会人2年目(これからグイグイくる予定)

Page 3: Video Editing in iOS

動画編集してますか??

Page 4: Video Editing in iOS

AVFoundation便利最高!!!!AVFoundationで出来ること

Page 5: Video Editing in iOS

Composing a Timeline

AVMutableComposition *composition = [AVMutableComposition composition];AVMutableCompositionTrack *compositionVideoTrack =[composition addMutableTrackWithMediaType:AVMediaTypeVideopreferredTrackID:...];[compositionVideoTrack insertTimeRange:...ofTrack:clipVideoTrack atTime:... error:...];

複数の動画をつないだり...。

Page 6: Video Editing in iOS

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];

ボリュームランプをつけてみたり...。

Page 7: Video Editing in iOS

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];

複数の動画を同時に表示したり...。ディゾルブやコーナーワイプなどに使えそう。

長い...

Page 8: Video Editing in iOS

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をオーバレイしたりなんてことも可能!

Page 9: Video Editing in iOS

videoComposition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer];

Page 10: Video Editing in iOS

Advanced Editingピクセル単位での編集

Page 11: Video Editing in iOS

• 録画やファイル読み込みなどに、低レベルのAPIを利用すればPixelBufferにアクセス可能(cf.AVAssetReader/Writer、AVCaptureVideoDataOutput)

• それらをCPUで編集するのは流石に重い...→GPUで処理したい。

• なんだかんだでGPUImageがおすすめ。OpenGLの

セットアップのためにboilerplate codeを書かなくて良いのは大きい。

Page 12: Video Editing in iOS

一応、iOS7にも触れておくと...

@protocol AVVideoCompositingに準拠したクラス。

・Custom Video Compositionパイプラインがより柔軟になった。AVAssetReader/Writerに比べると、容易にpixelBufferにアクセスできるため、コードの見通しが良くなる。

Page 13: Video Editing in iOS

Summary

Page 14: Video Editing in iOS

• AVFoundationには、動画編集を柔軟に行うためのAPIが多数存在する。

• GPUImageを使用することで、OpenGLを利用したピクセル単位での処

理が簡単に行える。

Page 15: Video Editing in iOS

More Information

• WWDC 2011 “Working with Media in AVFoundation”

• WWDC 2013“Advanced Editing with AV Foundation”

Page 16: Video Editing in iOS

ありがとうございました

Page 17: Video Editing in iOS