Я использую Vapory, которая является библиотекой Python-обертки для Povray. Это позволяет использовать функции Python для управления типичными операциями Povray.
Я хочу наложить 3D-модели в каждом кадре моего видеопотока. Способ сделать это в Vapory следующий:
from vapory import *
from moviepy.video.io.ffmpeg_writer import ffmpeg_write_image
light = LightSource([10, 15, -20], [1.3, 1.3, 1.3])
wall = Plane([0, 0, 1], 20, Texture(Pigment('color', [1, 1, 1])))
ground = Plane( [0, 1, 0], 0,
Texture( Pigment( 'color', [1, 1, 1]),
Finish( 'phong', 0.1,
'reflection',0.4,
'metallic', 0.3)))
sphere1 = Sphere([-4, 2, 2], 2.0, Pigment('color', [0, 0, 1]),
Finish('phong', 0.8,
'reflection', 0.5))
sphere2 =Sphere([4, 1, 0], 1.0, Texture('T_Ruby_Glass'),
Interior('ior',2))
scene = Scene( Camera("location", [0, 5, -10], "look_at", [1, 3, 0]),
objects = [ ground, wall, sphere1, sphere2, light],
included=["glass.inc"] )
def embed_in_scene(image):
ffmpeg_write_image("__temp__.png", image)
image_ratio = 1.0*image.shape[1]/image.shape[0]
screen = Box([0, 0, 0], [1, 1, 0], Texture(
Pigment( ImageMap('png', '"__temp__.png"', 'once')),
Finish('ambient', 1.2) ),
'scale', [10, 10/image_ratio,1],
'rotate', [0, 20, 0],
'translate', [-3, 1, 3])
new_scene = scene.add_objects([screen])
return new_scene.render(width=800, height=480, antialiasing=0.001)
clip = (VideoFileClip("bunny.mp4") # File containing the original video
.subclip(23, 47) # cut between t=23 and 47 seconds
.fl_image(embed_in_scene) # <= The magic happens
.fadein(1).fadeout(1)
.audio_fadein(1).audio_fadeout(1))
clip.write_videofile("bunny2.mp4",bitrate='8000k')
, что приводит к видеопотоку следующим образом:
Однако я хочу, чтобы этот ящик с фильмом был целой сценой, а сферы оставались там, где они есть. Первой мыслью было удалить функцию поворота из кода, и она сработала, однако я до сих пор не могу растянуть кадр фильма до конечных углов реальной сцены.
Есть мысли?
РЕДАКТИРОВАТЬ: Таким образом, я смог переместить камеру, получить объект в центре. Однако я все еще не мог получить фильм на весь экран. Это связано с тем, что объекту камеры предписано смотреть в направлении координат, и я не знаю, на какие координаты должна быть направлена камера, чтобы получить изображение на весь экран. См: