-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
resize video when time changed trigger a error #334
Comments
this is my code: from moviepy.editor import *
last_move = None
last_move1 = None
lis = [(0.0, 113, 167, 47), (0.32, 138, 159, 47), (0.44, 152, 144, 47), (0.48, 193, 148, 47), (0.6, 193, 148, 47), (0.76, 205, 138, 55), (0.88, 204, 121, 63), (0.92, 190, 31, 127), (1.2, 183, 59, 127), (1.4, 137, 22, 127), (1.52, 137, 22, 127), (1.72, 129, 67, 127), (1.88, 123, 69, 127), (2.04, 131, 123, 63), (2.24, 130, 148, 63), (2.48, 130, 148, 63), (2.8, 138, 180, 63), (3.0, 138, 180, 63), (3.2, 146, 192, 63), (3.28, 105, 91, 151), (3.44, 105, 91, 151), (3.72, 11, 48, 151), (3.96, 5, 78, 151), (4.32, 4, 134, 1), (4.6, 149, 184, 48), (4.8, 145, 188, 48), (5.0, 154, 217, 48), (5.08, 163, 199, 48), (5.2, 163, 199, 48), (5.32, 164, 187, 48), (5.48, 163, 200, 48), (5.76, 163, 200, 48), (5.96, 173, 199, 48), (6.0, 133, 172, 48), (6.04, 128, 165, 48), (6.28, 128, 165, 48), (6.4, 129, 180, 48), (6.52, 133, 166, 48), (6.64, 133, 166, 48), (6.88, 144, 183, 48), (7.0, 153, 174, 48), (7.16, 153, 174, 48), (7.24, 153, 174, 48), (7.28, 253, 65, 104), (7.64, 253, 65, 104), (7.8, 279, 116, 80), (8.0, 290, 105, 80), (8.24, 288, 124, 80), (8.44, 243, 102, 80), (8.56, 243, 102, 80), (8.8, 202, 107, 80), (8.84, 164, 27, 104), (9.0, 164, 27, 104), (9.12, 121, 9, 104), (9.28, 77, 33, 104), (9.32, 52, 23, 104), (9.48, 52, 23, 104), (9.64, 33, 46, 104), (9.8, 93, 49, 104), (9.92, 93, 49, 104), (10.16, 173, 19, 104), (10.2, 226, 173, 48), (10.36, 226, 173, 48), (10.48, 211, 172, 48), (10.64, 208, 162, 48), (10.92, 220, 171, 48)]
lis1 = [(0.0, 113, 167, 47), (0.32, 138, 159, 47), (0.44, 152, 144, 47), (0.48, 193, 148, 47), (0.6, 193, 148, 47), (0.76, 205, 138, 55), (0.88, 204, 121, 63), (0.92, 190, 31, 127), (1.2, 183, 59, 127), (1.4, 137, 22, 127), (1.52, 137, 22, 127), (1.72, 129, 67, 127), (1.88, 123, 69, 127), (2.04, 131, 123, 63), (2.24, 130, 148, 63), (2.48, 130, 148, 63), (2.8, 138, 180, 63), (3.0, 138, 180, 63), (3.2, 146, 192, 63), (3.28, 105, 91, 151), (3.44, 105, 91, 151), (3.72, 11, 48, 151), (3.96, 5, 78, 151), (4.32, 4, 134, 1), (4.6, 149, 184, 48), (4.8, 145, 188, 48), (5.0, 154, 217, 48), (5.08, 163, 199, 48), (5.2, 163, 199, 48), (5.32, 164, 187, 48), (5.48, 163, 200, 48), (5.76, 163, 200, 48), (5.96, 173, 199, 48), (6.0, 133, 172, 48), (6.04, 128, 165, 48), (6.28, 128, 165, 48), (6.4, 129, 180, 48), (6.52, 133, 166, 48), (6.64, 133, 166, 48), (6.88, 144, 183, 48), (7.0, 153, 174, 48), (7.16, 153, 174, 48), (7.24, 153, 174, 48), (7.28, 253, 65, 104), (7.64, 253, 65, 104), (7.8, 279, 116, 80), (8.0, 290, 105, 80), (8.24, 288, 124, 80), (8.44, 243, 102, 80), (8.56, 243, 102, 80), (8.8, 202, 107, 80), (8.84, 164, 27, 104), (9.0, 164, 27, 104), (9.12, 121, 9, 104), (9.28, 77, 33, 104), (9.32, 52, 23, 104), (9.48, 52, 23, 104), (9.64, 33, 46, 104), (9.8, 93, 49, 104), (9.92, 93, 49, 104), (10.16, 173, 19, 104), (10.2, 226, 173, 48), (10.36, 226, 173, 48), (10.48, 211, 172, 48), (10.64, 208, 162, 48), (10.92, 220, 171, 48)]
def posi(t):
global last_move
if len(lis) == 0:
return (last_move[1], last_move[2])
if t >= lis[0][0]:
last_move = item = lis.pop(0)
return (item[1], item[2])
else:
if len(lis) > 0:
dura = lis[0][0] - last_move[0]
now = t - last_move[0]
w = (lis[0][1] - last_move[1]) * (now / dura)
h = (lis[0][2] - last_move[2]) * (now / dura)
# print t, last_move[1] + w, last_move[2] + h
return (last_move[1] + w, last_move[2] + h)
return (last_move[1], last_move[2])
def size(t):
global last_move1
if len(lis1) == 0:
return (last_move1[3], last_move1[3] * 1.33)
if t >= lis1[0][0]:
last_move1 = item = lis1.pop(0)
return (item[3], item[3] * 1.33)
else:
if len(lis) > 0:
dura = lis1[0][0] - last_move1[0]
now = t - last_move1[0]
s = (lis1[0][3] - last_move1[3]) * (now / dura)
nsw = last_move1[3] + s
nsh = nsw * 1.33
# print t, nsw, nsh
return (nsw, nsh)
return (last_move1[3], last_move1[3] * 1.33)
avatar = VideoFileClip("new.mp4", has_mask=True)
maskclip = ImageClip("img.png", ismask=True, transparent=True)
tt = VideoFileClip("d.mp4")
final = CompositeVideoClip([tt, avatar.set_position(posi).set_mask(maskclip).resize(size)])
final.duration = tt.duration
final.write_videofile('nt.mp4', fps=24) |
bluedazzle
added a commit
to bluedazzle/moviepy
that referenced
this issue
Oct 15, 2016
I write a function to check if img and mask have same shape, and will fill img until img have same shape with mask. this will solve the problem but not perfect. add function ....
def fill_array(self, pre_array, shape=(0, 0)):
pre_shape = pre_array.shape
dx = shape[0] - pre_shape[0]
dy = shape[1] - pre_shape[1]
post_array = pre_array
if dx < 0:
post_array = pre_array[:shape[0]]
elif dx > 0:
x_1 = [[[1, 1, 1]] * pre_shape[1]] * dx
post_array = np.vstack((pre_array, x_1))
if dy < 0:
post_array = post_array[:, :shape[1]]
elif dy > 0:
x_1 = [[[1, 1, 1]] * dy] * post_array.shape[0]
post_array = np.hstack((post_array, x_1))
return post_array
def blit_on(self, picture, t):
"""
Returns the result of the blit of the clip's frame at time `t`
on the given `picture`, the position of the clip being given
by the clip's ``pos`` attribute. Meant for compositing.
"""
hf, wf = framesize = picture.shape[:2]
if self.ismask and picture.max() != 0:
return np.minimum(1, picture + self.blit_on(np.zeros(framesize), t))
ct = t - self.start # clip time
# GET IMAGE AND MASK IF ANY
img = self.get_frame(ct)
mask = (None if (self.mask is None) else
self.mask.get_frame(ct))
if mask is not None:
if (img.shape[0] != mask.shape[0]) or (img.shape[1] != mask.shape[1]):
img = self.fill_array(img, mask.shape)
hi, wi = img.shape[:2]
.... |
ghost
mentioned this issue
Apr 11, 2017
Merged
Looks like a fix for this was merged. Closing. |
ODtian
added a commit
to ODtian/moviepy
that referenced
this issue
Apr 23, 2020
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I want to merge two videos and one has variable size and position when time changed.If the video change size in a very short period,it will trigger a error like this:
shape (168,127,3) is a shape create by a past time, shape(149,112,3) is a shape create by current time. Why this happened? It should be two shapes (149,112,3) broadcast together.
I find these two shapes created by function
blit_on(self, picture, t)
:The text was updated successfully, but these errors were encountered: