2016-06-02 17 views
2

クリップを特定の寸法にズームした後、さらにズームを停止したいと思います。つまり、クリップのサイズが一定のサイズに達すると、クリップのサイズがさらに大きくなり、クリップが元のサイズよりもはるかに小さくなった場合にはさらに大きくなり、サイズが大きくなるとクリップの品質が向上します。私はmoviepyモジュールを使用しています。次のコードでは、クリップを徐々にズームすることができますが、アニメーション効果を作成するために、クリップを小さくから大きくする方法を考え出すのは苦労します。あなたが提供するフィードバックは非常に感謝しています。Moviepyズームエフェクトが必要です

import os 
from moviepy.editor import * 

screensize = (640,360) 

clip = (ImageClip(img) 
     .resize(height=screensize[1]*4) 
     .resize(lambda t : 1+0.02*t) 
     .set_position(('center', 'center')) 
     .set_duration(10) 
     ) 

私はスムーズなタイプを作成し、次々に表示されますクリップ内の文字を意味し、moviepyのtxtclip付きタイプ書き込み効果を作成するために関数を記述する方法を考え出すに非常に苦労しています - ライターのアニメーションテキスト。私は、彼らが1後に表示されるようにそれらを結合したい文字(文字のクリップ)を見つけた後

txtClip = TextClip('Cool effect',color='white', font="Amiri-Bold", 
        kerning = 5, fontsize=100) 
cvc = CompositeVideoClip([txtClip.set_pos('center')], 
         size=screensize, transparent=True) 

letters = findObjects(cvc) # a list of ImageClips 

here is the link: http://zulko.github.io/moviepy/examples/moving_letters.html 

:クリップのうち、個々の文字を検出することができます - Moviepyは、findObjectsなどいくつかの有用なクラスを得ました別のものは、タイプライティングのように見えます。

文書には手紙を動かすための例がいくつかありますが、これは役に立つかもしれません。ありがとうございます

答えて

2

これはあなたが望むものを達成する方法です。キーは、lambdaを使用する代わりに、名前付き関数でサイズ変更ロジックを定義することです。

import os 
from moviepy.editor import * 


def resize_func(t): 
    if t < 4: 
     return 1 + 0.2*t # Zoom-in. 
    elif 4 <= t <= 6: 
     return 1 + 0.2*4 # Stay. 
    else: # 6 < t 
     return 1 + 0.2*(duration-t) # Zoom-out. 

duration = 10 
screensize = (640,360) 

clip_img = (
    ImageClip('test.png') 
    .resize(screensize) 
    .resize(resize_func) 
    .set_position(('center', 'center')) 
    .set_duration(duration) 
    .set_fps(25) 
    ) 

clip = CompositeVideoClip([clip_img], size=screensize) 
clip.write_videofile('test.mp4') 

EDIT

答えあなたの質問の後半部分を(二つの別々の質問を作成する方が良いと思います場合、私は知りません)、次のコード。

from __future__ import division 
from moviepy.editor import * 
from moviepy.video.tools.segmenting import findObjects 


def clip_typewriter(text, duration_clip, duration_effect): 
    # `duration_effect` is effectively the time where the last letter appears. 
    clip_text = TextClip(
        text, 
        color='white', 
        font='Consolas', 
        fontsize=80, 
        kerning=3, 
        ) 
    letters = findObjects(clip_text, preview=False) 
    # Select the start time in seconds for each letter found: 
    n = len(letters) 
    times_start = [duration_effect*i/(n-1) for i in range(n)] 
    clips_letters = [] 
    for i, letter in enumerate(letters): 
     clips_letters.append(letter 
      .set_position(letter.screenpos) 
      .set_start(times_start[i]) 
      .set_end(duration_clip) 
      # Here you can add key sounds using `set_audio`. 
      ) 
    return CompositeVideoClip(clips_letters, size=clip_text.size) 


if __name__ == '__main__': 
    screensize = (320, 180) 
    fps = 12 
    clip_1 = clip_typewriter('hello', 2, 1).set_start(1).set_position('center') 
    clip_2 = clip_typewriter('world', 2, 1).set_start(4).set_position('center') 
    clip_final = CompositeVideoClip([clip_1, clip_2], size=screensize) 
    clip_final.write_gif('test_typewriter.gif', fps=fps) 

結果:あなたのコードのための

enter image description here

+0

感謝。期待どおりに動作します。私はmoviepyとちょっと別の問題があります。私はあなたに知らせることができますか? –

+0

はい、もちろんです! – feqwix

+0

投稿を別の問題で更新しました。あなたはそれを見ることができます。ありがとうございました。 –

関連する問題