Spaces:
Runtime error
Runtime error
File size: 1,390 Bytes
a0fd97b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
from pathlib import Path
from pytube import YouTube
import numpy as np
from decord import VideoReader, cpu
import imageio
def download_youtube_video(url: str):
yt = YouTube(url)
streams = yt.streams.filter(file_extension="mp4")
file_path = streams[0].download()
return file_path
def sample_frames_from_video_file(
file_path: str, num_frames: int = 16, frame_sampling_rate=1
):
videoreader = VideoReader(file_path)
videoreader.seek(0)
# sample frames
start_idx = 0
end_idx = num_frames * frame_sampling_rate - 1
indices = np.linspace(start_idx, end_idx, num=num_frames, dtype=np.int64)
frames = videoreader.get_batch(indices).asnumpy()
return frames
def get_num_total_frames(file_path: str):
videoreader = VideoReader(file_path)
videoreader.seek(0)
return len(videoreader)
def convert_frames_to_gif(frames, save_path: str = "frames.gif"):
converted_frames = frames.astype(np.uint8)
Path(save_path).parent.mkdir(parents=True, exist_ok=True)
imageio.mimsave(save_path, converted_frames, fps=8)
return save_path
def create_gif_from_video_file(
file_path: str,
num_frames: int = 16,
frame_sampling_rate: int = 1,
save_path: str = "frames.gif",
):
frames = sample_frames_from_video_file(file_path, num_frames, frame_sampling_rate)
return convert_frames_to_gif(frames, save_path)
|