簡體   English   中英

文字moviepy和gizeh

[英]Text moviepy and gizeh

我用moviepy和gizeh(感謝Zulko)編寫了一個小python程序。 它顯示在屏幕上並移動文本字符串“ my_text”,並且效果很好。

<!-- language: python -->
# Import everything needed to edit video clips
from moviepy.editor import *
import random
import gizeh

# RESOLUTION
W = 1280
H = 720
duration = 5

def make_frame(t):
    surface = gizeh.Surface(W,H)
    text = gizeh.text("my_text", fontsize = 80, fontfamily="Impact", 
           fill=(1,1,1), xy=(W/2, (min(340,-340+1000*t) )))
    text.draw(surface)

    return surface.get_npimage()

clip2 = VideoClip(make_frame, duration=duration)

clip2.write_videofile("my_video.avi",fps=12, codec='libx264')

我的編程技巧很差。 我想使用文本字符串[“ my_text1”,“ my_text2”,“ my_text3” ...]的列表,而不是僅使用一個字符串“ my_text”。 此外,這些列表元素應連續而不是同時出現在屏幕上。 有人可以引導我朝正確的方向解決嗎?

我尚未使用moviepy ,但我相信為make_frame提供的t參數指示已經過去了幾秒鍾。 如果我們有一個text_strings列表想要在電影中平均散布(長5秒),我們希望將列表分成幾秒鍾:

def make_frame(t):
    surface = gizeh.Surface(W,H)
    current_text = text_strings[int((t*len(text_string))//5)]
    text = gizeh.text(current_text, fontsize = 80, fontfamily="Impact", 
           fill=(1,1,1), xy=(W/2, (min(340,-340+1000*t) )))
    text.draw(surface)

如果您希望它們中的每一個都從頂部開始,我建議將duration設為函數范圍之外的(整數)變量。 要經歷len(text_string)次移動,我們希望每次移動max_distance一次。 這應該這樣做:

def make_frame(t):
    surface = gizeh.Surface(W,H)
    current_text = text_strings[int((t*len(text_string))//duration)]
    text = gizeh.text(current_text, fontsize = 80, fontfamily="Impact", 
           fill=(1,1,1), 
           xy=(W/2, min(340,-340+max_distance*((t*len(text_string)/duration)%1)))
    text.draw(surface)

丑陋的max_distance*((t*len(text_string)/duration)%1)工作方式是這樣的: max_distance顯然是最大值,因此讓我們進入括號內。 (t*len(text_string)/duration)將在整個視頻過程中從0線性移動到len(text_string) 當您單獨查看t/duration時,其原因很明顯: t/duration的值是視頻經過的距離的一部分(例如,經過一半, t/duration = 0.5 )。 一個有趣的部分是%1的使用。 可以在其他地方找到關於模運算符的入門知識,但是本質上,這樣做是每次我們獲得新值時,將比例從0重新“重新開始”。 最好在一個示例中看到:

t = 0
duration = 10
num_strings = 5
while t < 10:
    print(round((t*num_strings/duration)%1, 3))
    t += .1

請注意,該回合只是存在,因此您不會看到任何浮點錯誤。 希望現在更加清晰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM