2017-02-17 6 views
5

동영상의 재생 시간이 4시입니다. 이제 비디오 프레임 당 텍스트를 비디오 파일에 추가하려고합니다. 예를 들어 00:30에서 1:50까지 계속 말하십시오. "Welcome"텍스트를 추가하고 싶습니다. 이제 3 시부 터 4 시까 지의 비디오 기간 동안 "굉장한"텍스트를 추가하고 싶습니다. 이 기능을 달성하는 방법. 아래 튜토리얼을 참조했습니다. 그것은 비디오의 일부 기간 동안 전체 비디오에 텍스트를 추가하지 않습니다. https://www.raywenderlich.com/30200/avfoundation-tutorial-adding-overlays-and-animations-to-videosiOS SDK에서 일정 기간 동안 텍스트를 추가하는 방법

도움이 될 것입니다.

나는 전체 영상에 텍스트를 추가 코드의 라인을 추가하고있다 :

- (void)applyVideoEffectsToComposition:(AVMutableVideoComposition *)composition size:(CGSize)size 
{ 
    // 1 - Set up the text layer 
    CATextLayer *subtitle1Text = [[CATextLayer alloc] init]; 
    [subtitle1Text setFont:@"Helvetica-Bold"]; 
    [subtitle1Text setFontSize:36]; 
    [subtitle1Text setFrame:CGRectMake(0, 0, size.width, 100)]; 
    [subtitle1Text setString:_subTitle1.text]; 
    [subtitle1Text setAlignmentMode:kCAAlignmentCenter]; 
    [subtitle1Text setForegroundColor:[[UIColor whiteColor] CGColor]]; 

    // 2 - The usual overlay 
    CALayer *overlayLayer = [CALayer layer]; 
    [overlayLayer addSublayer:subtitle1Text]; 
    overlayLayer.frame = CGRectMake(0, 0, size.width, size.height); 
    [overlayLayer setMasksToBounds:YES]; 

    CALayer *parentLayer = [CALayer layer]; 
    CALayer *videoLayer = [CALayer layer]; 
    parentLayer.frame = CGRectMake(0, 0, size.width, size.height); 
    videoLayer.frame = CGRectMake(0, 0, size.width, size.height); 
    [parentLayer addSublayer:videoLayer]; 
    [parentLayer addSublayer:overlayLayer]; 

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

} 
+0

나중에 할 수 있습니다. 시도해 볼 수 있습니다. –

+0

위의 샘플 코드대로 시도했습니다. –

+0

어떻게 할 수 있는지 말해 줄 수 있습니까? –

답변

0

편집는 않습니다 당신이 answer 작품은? 여러 텍스트 레이어를 추가하고 CABasicAnimation을 사용하여 적절한 시간에 각각을 표시하거나 숨길 수 있습니다 (setBeginTime: 사용). 연결된 웹 사이트에서

// 1 - Set up the text layer 
CATextLayer *subtitle1Text = [[CATextLayer alloc] init]; 
self.textLayer = subtitle1Text; // ### Keep a reference to this object and update it in timerDidFire 
... 

- (void)viewDidLoad{ 
    ... 
    // Add a timer at some point. Don't forget to invalidate it later 
    NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(timerDidFire) userInfo:nil repeats:YES]; 
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode]; 
    ... 
} 

- (void)timerDidFire{ 
    if (currentPlaybackPosition <= some_value){ 
     [self.textLayer setText:@"Welcome"]; 
    } else if (currentPlaybackPosition <= some_bigger_value){ 
     [self.textLayer setText:@"Awesome"]; 
    } 
    ... 
} 
+0

해당 비디오를 내 보내야합니다 –

+0

@PayalManiyar 죄송합니다, 오해. 나는 당신이 원하는 것을 믿는 대답에 대한 링크를 추가했다. – arsenius

+0

나는 그것이 작동하지 않는 것을 시도했다. –

0

봐 :

원래 대답 는 기본적으로, 단지 코드의이 섹션의 CATextLayer에 대한 참조를 유지하고 NSTimer를 사용하여 텍스트를 업데이트 할 때마다 두 번째라고 https://www.raywenderlich.com/30200/avfoundation-tutorial-adding-overlays-and-animations-to-videos 거기에 표시된대로 2 개의 CATextLayer를 사용하십시오. 그들의 텍스트를 설정하십시오.

beginTime 속성을 30 초로 설정하고 duration 속성을 80 초로 설정합니다. 두 번째는 beginTime이 180 초이고 duration이 60 초입니다.

결과가 비디오 플레이어에 표시된대로 내보내집니다.

+0

답장을 보내 주셔서 감사합니다. 그것은 주어진 시간에 텍스트를 보여 주지만 지속 시간 후에 사라지지 않습니다. 텍스트를 사라지게 만드는 방법? –

+0

내 솔루션의 지속 시간이 끝날 때 텍스트가 항상 사라졌습니다 (너무 짧아서 1 초 미만 임). 나는 그것이 당신의 코드에서 작동하지 않는 이유를 모른다. – Jan

+0

몇 줄의 코드를 제공 할 수 있습니까? –