jhj0517
commited on
Commit
·
4ddb4d7
1
Parent(s):
353443c
Add video util function
Browse files
modules/utils/video_helper.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
| 1 |
import subprocess
|
| 2 |
import os
|
| 3 |
from typing import List, Optional, Union
|
|
|
|
| 4 |
from PIL import Image
|
| 5 |
import numpy as np
|
| 6 |
from dataclasses import dataclass
|
|
@@ -8,7 +9,8 @@ import re
|
|
| 8 |
from pathlib import Path
|
| 9 |
|
| 10 |
from modules.utils.constants import SOUND_FILE_EXT, VIDEO_FILE_EXT, IMAGE_FILE_EXT
|
| 11 |
-
from modules.utils.paths import TEMP_VIDEO_FRAMES_DIR, TEMP_VIDEO_OUT_FRAMES_DIR, OUTPUTS_VIDEOS_DIR
|
|
|
|
| 12 |
|
| 13 |
|
| 14 |
@dataclass
|
|
@@ -234,6 +236,35 @@ def create_video_from_frames(
|
|
| 234 |
return output_path
|
| 235 |
|
| 236 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 237 |
def get_frames_from_dir(vid_dir: str,
|
| 238 |
available_extensions: Optional[Union[List, str]] = None,
|
| 239 |
as_numpy: bool = False) -> List:
|
|
|
|
| 1 |
import subprocess
|
| 2 |
import os
|
| 3 |
from typing import List, Optional, Union
|
| 4 |
+
import cv2
|
| 5 |
from PIL import Image
|
| 6 |
import numpy as np
|
| 7 |
from dataclasses import dataclass
|
|
|
|
| 9 |
from pathlib import Path
|
| 10 |
|
| 11 |
from modules.utils.constants import SOUND_FILE_EXT, VIDEO_FILE_EXT, IMAGE_FILE_EXT
|
| 12 |
+
from modules.utils.paths import (TEMP_VIDEO_FRAMES_DIR, TEMP_VIDEO_OUT_FRAMES_DIR, OUTPUTS_VIDEOS_DIR,
|
| 13 |
+
get_auto_incremental_file_path)
|
| 14 |
|
| 15 |
|
| 16 |
@dataclass
|
|
|
|
| 236 |
return output_path
|
| 237 |
|
| 238 |
|
| 239 |
+
def create_video_from_numpy_list(frame_list: List[np.ndarray],
|
| 240 |
+
frame_rate: Optional[int] = None,
|
| 241 |
+
sound_path: Optional[str] = None,
|
| 242 |
+
output_dir: Optional[str] = None
|
| 243 |
+
):
|
| 244 |
+
if output_dir is None:
|
| 245 |
+
output_dir = OUTPUTS_VIDEOS_DIR
|
| 246 |
+
os.makedirs(output_dir, exist_ok=True)
|
| 247 |
+
output_path = get_auto_incremental_file_path(output_dir, "mp4")
|
| 248 |
+
|
| 249 |
+
if frame_rate is None:
|
| 250 |
+
frame_rate = 25
|
| 251 |
+
|
| 252 |
+
if sound_path is None:
|
| 253 |
+
temp_sound = os.path.join(TEMP_VIDEO_FRAMES_DIR, "sound.mp3")
|
| 254 |
+
if os.path.exists(temp_sound):
|
| 255 |
+
sound_path = temp_sound
|
| 256 |
+
|
| 257 |
+
height, width, layers = frame_list[0].shape
|
| 258 |
+
fourcc = cv2.VideoWriter.fourcc(*'mp4v')
|
| 259 |
+
|
| 260 |
+
out = cv2.VideoWriter(output_path, fourcc, frame_rate, (width, height))
|
| 261 |
+
|
| 262 |
+
for frame in frame_list:
|
| 263 |
+
out.write(cv2.cvtColor(frame, cv2.COLOR_RGB2BGR))
|
| 264 |
+
|
| 265 |
+
out.release()
|
| 266 |
+
|
| 267 |
+
|
| 268 |
def get_frames_from_dir(vid_dir: str,
|
| 269 |
available_extensions: Optional[Union[List, str]] = None,
|
| 270 |
as_numpy: bool = False) -> List:
|