Slide 1

Slide 1 text

"7'PVOEBUJPO ৺ྶಈըΞϓϦʮ΋͏Ұ౓͝ཡ͍ͨͩ͜͏ʯΛ࡞੒ͯ͠Έͯ !OBLBKJKBQBO

Slide 2

Slide 2 text

ࠓ೔࿩͢͜ͱ w ࣗݾ঺հ w ΞϓϦ঺հ w "7'PVOEBUJPOΛ࢖࣮ͬͨ૷͋Ε͜Ε w ॴײ

Slide 3

Slide 3 text

ࣗݾ঺հ !OBLBKJKBQBO QBQFSCPZDP

Slide 4

Slide 4 text

!JTPEJOF

Slide 5

Slide 5 text

!JTPEJOF ςϨϏͰ΍ΔΑ͏ͳ৺ྶ൪૊ Έ͍ͨͳಈը࡞Γ͍ͨΜ΍ʙ

Slide 6

Slide 6 text

͸͍

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

IUUQPXLSJOGPNPWJF ΋͏Ұ౓͝ཡ͍ͨͩ͜͏ ৺ྶಈըΞϓϦ

Slide 9

Slide 9 text

ओͳػೳ w ಈը࿥ը w ಈըʹ৺ྶΛೖΕΔ w ಈըʹςϩοϓͱϫΠϓ w ಈըͷγνϡΤʔγϣϯʹ߹ΘͤͯφϨʔγϣϯ ΛೖΕΔ w ιʔγϟϧڞ༗

Slide 10

Slide 10 text

w .FEJB1MBZFS'SBNFXPSL w 6*,JU ্Ґ૚ͷϑϨʔϜϫʔΫ

Slide 11

Slide 11 text

"7'PVOEBUJPO

Slide 12

Slide 12 text

ௐࠪ

Slide 13

Slide 13 text

ௐࠪ   w "7'PVOEBUJPO1SPHSBNNJOH(VJEF w .PWJOHUP"7,JUBOE"7'PVOEBUJPOr w $PSF*NBHF&GGFDUTBOE5FDIOJRVFTr w "EWBODFE&EJUJOHXJUI"7'PVOEBUJPOr

Slide 14

Slide 14 text

ߏ੒

Slide 15

Slide 15 text

εϩʔϞʔγϣϯಈը TFD TFD TFD φϨʔγϣϯԻ੠ ϫΠϓ ը૾߹੒ ಈը݁߹ ಈը݁߹

Slide 16

Slide 16 text

࣮૷

Slide 17

Slide 17 text

ಈը݁߹

Slide 18

Slide 18 text

// Assetੜ੒ AVURLAsset *videoAsset = [[AVURLAsset alloc] initWithURL:movieURL options:nil]; ! // CompositionTrackੜ੒ AVMutableCompositionTrack* compositionVideoTrack; compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; ! // Ξηοτ͔ΒτϥοΫΛऔಘ AVAssetTrack *videoTrack = [[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; ! // ઃఆ [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) ofTrack:videoTrack atTime:self.currentTimeDuration error:nil]; [compositionVideoTrack setPreferredTransform:[[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] preferredTransform]]; AVMutableCompositionTrack *compositionAudioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; // Assetੜ੒ [compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:self.currentTimeDuration error:nil]; self.currentTimeDuration = [mixComposition duration]; ! // Layer Instructionͷ௥Ճ AVMutableVideoCompositionLayerInstruction *layerInstruction; layerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:compositionVideoTrack]; ! [self.layerInstructions addObject:layerInstruction]; ϝσΟΞ৘ใΛอ࣋͠ɺͦͷ৘ใΛऔಘͰ͖Δ

Slide 19

Slide 19 text

// Assetੜ੒ AVURLAsset *videoAsset = [[AVURLAsset alloc] initWithURL:movieURL options:nil]; ! // CompositionTrackੜ੒ AVMutableCompositionTrack* compositionVideoTrack; compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; ! // Ξηοτ͔ΒτϥοΫΛऔಘ AVAssetTrack *videoTrack = [[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; ! // ઃఆ [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) ofTrack:videoTrack atTime:self.currentTimeDuration error:nil]; [compositionVideoTrack setPreferredTransform:[[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] preferredTransform]]; AVMutableCompositionTrack *compositionAudioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; // Assetੜ੒ [compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:self.currentTimeDuration error:nil]; self.currentTimeDuration = [mixComposition duration]; ! // Layer Instructionͷ௥Ճ AVMutableVideoCompositionLayerInstruction *layerInstruction; layerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:compositionVideoTrack]; ! [self.layerInstructions addObject:layerInstruction]; ө૾ΛऔΓग़͢ Ի੠ΛऔΓग़͢

Slide 20

Slide 20 text

// Assetੜ੒ AVURLAsset *videoAsset = [[AVURLAsset alloc] initWithURL:movieURL options:nil]; ! // CompositionTrackੜ੒ AVMutableCompositionTrack* compositionVideoTrack; compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; ! // Ξηοτ͔ΒτϥοΫΛऔಘ AVAssetTrack *videoTrack = [[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; ! // ઃఆ [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) ofTrack:videoTrack atTime:self.currentTimeDuration error:nil]; [compositionVideoTrack setPreferredTransform:[[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] preferredTransform]]; AVMutableCompositionTrack *compositionAudioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; // Assetੜ੒ [compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:self.currentTimeDuration error:nil]; self.currentTimeDuration = [mixComposition duration]; ! // Layer Instructionͷ௥Ճ AVMutableVideoCompositionLayerInstruction *layerInstruction; layerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:compositionVideoTrack]; ! [self.layerInstructions addObject:layerInstruction]; ίϯϙδγϣϯΛ૊ΈཱͯΔ

Slide 21

Slide 21 text

ը૾ͷ߹੒ͱ Ξχϝʔγϣϯ

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

// generate parent layer CALayer* layerRoot = [CALayer layer]; CALayer* layerVideo = [CALayer layer]; . . . . videoComp = [AVMutableVideoComposition videoComposition]; videoComp.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:layerVideo inLayer:layerRoot]; $"-BZFSʹ$"#BTJD"OJNBUJPOͰ ઃఆͨ͠ΞχϝʔγϣϯΛ௥Ճ͢Δ

Slide 24

Slide 24 text

ϫΠϓಈը

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

// Assetੜ੒ AVURLAsset *videoAsset = [[AVURLAsset alloc] initWithURL:movieURL options:nil]; // CompositionTrackੜ੒ AVMutableCompositionTrack* compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; // Trackऔಘ AVAssetTrack* videoTrack = [[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; ! // ઃఆ CMTime timeDuration; timeDuration = videoAsset.duration; ! [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, timeDuration) ofTrack:videoTrack atTime:kCMTimeZero error:nil]; [compositionVideoTrack setPreferredTransform:[videoTrack preferredTransform]]; AVMutableVideoCompositionLayerInstruction* layerInstruction; layerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:compositionVideoTrack]; [layerInstruction setTransform:CGAffineTransformConcat(scale, trnsration) atTime:kCMTimeZero]; ! [self.layerInstructions addObject:layerInstruction]; ΞϑΟϯม׵

Slide 27

Slide 27 text

εϩʔϞʔγϣϯ

Slide 28

Slide 28 text

// શମʹରͯ͠εϩʔϞʔγϣϯॲཧΛ͔͚Δ CMTime durationSlow = CMTimeSubtract(videoAsset.duration, CMTimeMake(9, 1)); [mixComposition scaleTimeRange:CMTimeRangeMake(CMTimeMake(19, 1), durationSlow) toDuration:CMTimeMake(durationSlow.value * 2.0, durationSlow.timescale)]; ࣮ࡍͷө૾Λ̎ഒͷ࣌ؒͰग़ྗͤ͞Δ

Slide 29

Slide 29 text

εϩʔϞʔγϣϯ ϫΠϓಈը ը૾ͷ߹੒ͱΞχϝʔγϣϯ ಈը݁߹ ࣮૷

Slide 30

Slide 30 text

"7'PVOEBUJPO

Slide 31

Slide 31 text

ॴײ w Ϋϥε໊௕͔ͬͨΓ࣮૷ྔ͕ଟͯ͘େมʂ w ͱ͸͍͑ઃܭ͸͢͹Β͍͠ w ৘ใ͕গͳ͍ w ϋϚΔͱ਺೔໎૸ঢ়ଶ w ࢓ࣄͰશ͘׆͔ͤͳ͍ʂʂʂ

Slide 32

Slide 32 text

4BNQMF.PWJF IUUQTXXXZPVUVCFDPNXBUDI WLKPXF43%* %FNP.PWJF IUUQTXXXZPVUVCFDPNXBUDI WSKUNK:6

Slide 33

Slide 33 text

5IBOLT