Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions VideoMobject/ExampleVideoMobject.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from manim import *

class VideoMobjectTest(Scene):
def construct(self):
file_directory = str(Path.home() / 'Downloads' / "VideoTest.mp4")
from VideoMobject.VideoMobject import VideoMobject
vid = VideoMobject(file_directory)
self.add(vid.image_canvas)
self.play(ShowCreation(SurroundingRectangle(vid.image_canvas)))
self.wait()
vid.play()
self.wait(1)
vid.pause()
vid.image_canvas.scale(0.5)
self.wait(1)
vid.play()
self.wait()

from pathlib import Path
if __name__ == "__main__":
script = f"{Path(__file__).resolve()}"
os.system(f"manim -l -p -c 'BLACK' --video_dir ~/Downloads/ " + script )
20 changes: 20 additions & 0 deletions VideoMobject/FrameCounterVideo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from manim import *

class VideoTest(Scene):
def construct(self):
def func1(num):
text =Text(f"{num}",font='Arial').scale(3)
text.num= num
return text
text= func1(0)
def update_curve(d,dt):
d.num = d.num+1
d.become(func1(d.num))
self.add(text)
text.add_updater(update_curve)
self.wait(3)

from pathlib import Path
if __name__ == "__main__":
script = f"{Path(__file__).resolve()}"
os.system(f"manim -l -p -c 'ORANGE' --video_dir ~/Downloads/ " + script + " VideoTest")
55 changes: 55 additions & 0 deletions VideoMobject/VideoMobject.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
from pathlib import Path
from manim import *



class VideoMobject:
def __init__(self, folder_name: str):
self.frames= self.init_frames(folder_name)
self.current_frame_num = 0
self.image_canvas = self.get_image(self.current_frame_num)
self.frames_length= len(self.frames)

def get_image(self,frame_num):
image_path = self.frames[frame_num]
image = Image.open(str(image_path))
return ImageMobject(np.array(image)).scale(3)

def init_frames(self, file_directory):
file_directory = Path(file_directory)
name_stem = file_directory.stem
name_ext = file_directory.suffix
parent_directory = file_directory.parent
frame_folder_name = name_stem
frames_directory = parent_directory / frame_folder_name
if not frames_directory.is_dir():
print("File does not exist")
frames_directory.mkdir(parents=True, exist_ok=False)
print(frames_directory)
# first one is the Downloads/video.mp4, second one is Downloads/video/video_001.png
command = f"ffmpeg -i '{frames_directory}{name_ext}' {frames_directory / frame_folder_name}_%03d.png"
os.system(command)
else:
print("File exist")

frames = []
for filename in sorted(frames_directory.glob('*.png')):
frames.append(filename)
print(len(frames))
return frames

def to_fist_frame(self):
self.image_canvas.become(self.get_image(0))
def to_last_frame(self):
self.image_canvas.become(self.get_image(self.frames_length - 1))

def play(self):
self.image_canvas.add_updater(self.frame_updater)

def pause(self):
self.image_canvas.remove_updater(self.frame_updater)

def frame_updater(self, mob, dt):
self.current_frame_num += 1
if (self.frames_length > self.current_frame_num):
self.image_canvas.become(self.get_image(self.current_frame_num))