gpt4 book ai didi

python - 在 Jython/Python 中创建电影

转载 作者:行者123 更新时间:2023-11-28 20:24:28 26 4
gpt4 key购买 nike

我正在尝试制作电影,同时通过循环创建帧。它正在保存,但只有第一帧(它作为电影播放 - 短片!)我尝试了各种方法,但无法弄清楚我做错了什么。谢谢

def synthesiseFrame(folder):
folder =r"D:\FOLDER"
m=0.5
for x in range(1,121):
pic=makeEmptyPicture(960,540)
for x in range (0,960):
for y in range (0,540):
r=#some code
g=#some code
b=#some code
color =makeColor (r,g,b)
px= getPixel (pic, x, y)
setColor(px, color)
numStr=str(x)

m=m+0.0125
if x<10:
writePictureTo(pic, folder+"\pic00"+numStr+".png")
if x >=10 and x<100:
writePictureTo(pic, folder+"\pic0"+numStr+".png")
if x>=100:
writePictureTo(pic,folder+"\pic"+numStr+".png")

return movie

movie=synthesiseFrame(folder)
folder =r"D:\FOLDER"
file=r"D:\FOLDER\pic00.png"
movie=makeMovieFromInitialFile(file)
writeQuicktime(movie,"D:\FOLDER\movie.mov", 30)
playMovie(movie)

最佳答案

我第一次看到 JES video functions并在你的代码中告诉我类似的东西(完整的工作示例):

import os
import random

def synthesizeFrameAndCreateMovie(folder):

# Create an empty movie to receive the frames
movie = makeMovie()

# Compute & save the frames
w = 40
h = 25
nb_frames = 60 # Will give 60 frames at 30 fps => movie duration : 2 sec.
for z in range(0, nb_frames):
pic=makeEmptyPicture(w, h)
for x in range (0, w):
for y in range (0, h):
#makeColor() takes red, green, and blue (in that order) between 0 and 255
r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
color = makeColor(r,g,b)
px = getPixel(pic, x, y)
setColor(px, color)

# Create one frame and inject in the movie object
filename = os.path.join(folder, 'pic%03d.png' % z)
writePictureTo(pic, filename)
addFrameToMovie(filename, movie)

# return the movie
return movie

movie = synthesizeFrameAndCreateMovie("D:\\FOLDER")
print movie
#writeQuicktime(movie,"D:\\FOLDER\\movie.mov", 30)
playMovie(movie)


输出(帧):


...... enter image description here ... enter image description here ... enter image description here ... enter image description here ... enter image description here ... enter image description here ... enter image description here ... enter image description here ... enter image description here ... enter image description here ... enter image description here ... enter image description here ……


编辑:

更有趣:动画化一条线(代码采用 here 形式)...

import os
import random

# Draw point, with check if the point is in the image area
def drawPoint(pic, col, x, y):
if (x >= 0) and (x < getWidth(pic)) and (y >= 0) and (y < getHeight(pic)):
px = getPixel(pic, x, y)
setColor(px, col)


# Draw line segment, given two points
# From Bresenham's line algorithm
# http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm
def drawLine(pic, col, x0, y0, x1, y1):

dx = abs(x1-x0)
dy = abs(y1-y0)
sx = sy = 0

#sx = 1 if x0 < x1 else -1
#sy = 1 if y0 < y1 else -1

if (x0 < x1):
sx = 1
else:
sx = -1
if (y0 < y1):
sy = 1
else:
sy = -1

err = dx - dy

while (True):

drawPoint(pic, col, x0, y0)

if (x0 == x1) and (y0 == y1):
break

e2 = 2 * err
if (e2 > -dy):
err = err - dy
x0 = x0 + sx

if (x0 == x1) and (y0 == y1):
drawPoint(pic, col, x0, y0)
break

if (e2 < dx):
err = err + dx
y0 = y0 + sy

# Draw infinite line from segment
def drawInfiniteLine(pic, col, x0, y0, x1, y1):
# y = m * x + b
m = (y0-y1) / (x0-x1)
if (abs(m) > 100.0):
m = 100.0

# y0 = m * x0 + b => b = y0 - m * x0
b = y0 - m * x0

x0 = 0
y0 = int(m*x0 + b)
# get a 2nd point far away from the 1st one
x1 = getWidth(pic)
y1 = int(m*x1 + b)

drawLine(pic, col, x0, y0, x1, y1)

# Draw infinite line from origin point and angle
# Angle 'theta' expressed in degres
def drawInfiniteLineA(pic, col, x, y, theta):

# y = m * x + b
dx = y * tan(theta * pi / 180.0) # (need radians)
dy = y

if (dx == 0):
dx += 0.000000001 # Avoid to divide by zero

m = dy / dx

# y = m * x + b => b = y - m * x
b = y - m * x

# get a 2nd point far away from the 1st one
x1 = 2 * getWidth(pic)
y1 = m*x1 + b

drawInfiniteLine(pic, col, x, y, x1, y1)


def synthesizeFrameAndCreateMovie(folder):

# Create an empty movie to receive the frames
movie = makeMovie()

# Compute & save the frames
w = 40
h = 25
nb_frames = 120 # Will give 120 frames at 30 fps => movie duration : 4 sec.
for z in range(0, nb_frames):
pic = makeEmptyPicture(w, h)
addRectFilled(pic, 0, 0, w-1, h-1)
#makeColor() takes red, green, and blue (in that order) between 0 and 255
r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
col = makeColor(r,g,b)
theta = z * 360 / nb_frames
if (theta != 180.0) and (theta != 0.0):
drawInfiniteLineA(pic, col, w//2, h//2, theta)

# Create one frame and inject in the movie object
filename = os.path.join(folder, 'pic%03d.png' % z)
writePictureTo(pic, filename)
addFrameToMovie(filename, movie)

# return the movie
return movie

movie = synthesizeFrameAndCreateMovie("/home/FOLDER")
print movie
#writeQuicktime(movie,"/home/golgauth/Desktop/FOLDER/movie.mov", 30)
#writeAVI(movie,"/home/golgauth/Desktop/FOLDER/movie.avi")
playMovie(movie)


输出(帧):


...... enter image description here ... enter image description here ... enter image description here ... enter image description here ... enter image description here ... enter image description here ... enter image description here ... enter image description here ... enter image description here ... enter image description here ... enter image description here ... enter image description here ……


关于python - 在 Jython/Python 中创建电影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17288272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com