2017-05-28 3 views
2

Ich arbeite an der Erstellung von GIF aus Videoclips automatisch auf dem Server mit MoviePy. Die Bibliothek half bei verschiedenen Transformationen und beim Trimmen von Videos, um GIFs zu erstellen.MoviePie - Crop Video mit Rahmen (Region of Interest) bewegt sich von links nach rechts mit der Zeit

In meinem aktuellen Projekt habe ich einen Videoclip mit vielen bewegten Objekten, die es schwierig machen, die Region des Interesses automatisch zu verfolgen. (Ein schnelles gif unten zeigt die Szene, obwohl der Hintergrund dort leicht zu beseitigen sein kann und die Verfolgung des Objekts. Aber sagen wir, Tracking-Objekt ist außerhalb des Geltungsbereichs des Projekts).

Wie in dem gif unten gezeigt, ist das rote Rechteck der Bereich von Interesse, der sich mit der Zeit von links nach rechts bewegt. Ich möchte diese Region zuschneiden und ein GIF erstellen.

enter image description here

Ich verwende MoviePy, wo ich ein Rechteck von einem Video abgeschnitten ein GIF zu erstellen. Aber das Rechteck ist an seiner ursprünglichen Koordinatenposition fixiert. Ich suche nach einer Möglichkeit, das Rechteck mit der Zeit zu verschieben und es zu beschneiden, um ein GIF zu erstellen.

clip = (VideoFileClip("my_video.mp4") 
     .subclip((1,10.1),(1,14.9)) 
     .resize(0.5) 
     .crop(x1=145,y1=110,x2=400,y2=810)) 

clip.write_gif("my_gif.gif") 

Wie Zeit Faktor hinzufügen, so dass diese Koordinaten mit der Zeit ändern.

Alle Vorschläge willkommen.

Antwort

1

Sie suchen nach der Funktion scroll in moviepy. Die Dokumente dafür fehlen, aber sie sind here, und der Quellcode here.

moviepy.video.fx.all.scroll(clip, h=None, w=None, x_speed=0, y_speed=0, x_start=0, y_start=0, apply_to='mask')

Parameter:

  • clip; der Clip auf

  • hw und die die Höhe und Breite der fertigen Klammer

  • x_speed und y_speed, die die Geschwindigkeit des Scrollens bestimmen bestimmen beaufschlagt werden. Nicht sicher, in was diese gemessen werden, also müssen Sie möglicherweise den Quellcode untersuchen, oder nur Versuch und Irrtum es.

  • x_start und y_start der die Abstände von (0,0) ist, dass es bei beginnt zu steigen.

  • apply_to; etwas mit Masken zu tun, du wirst es nicht brauchen!

Schlusscode:

clip = (VideoFileClip("my_video.mp4") 
    .subclip((1,10.1),(1,14.9)) 
    .resize(0.5) 
    .crop(x1=145,y1=110,x2=400,y2=810)) 

# You won't need to set `w` and `h` if you are separately cropping it 
new_clip = vfx.scroll(clip, w=clip.w, h=var, x_speed=speed, y_start=height_to_top_of_wanted_bit) 
new_clip.set_duration(1.0/speed) 

clip.write_gif("my_gif.gif") 

Hinweis, wird dieser Code nicht getestet.

Verwandte Themen