Spaces:
Runtime error
Runtime error
jhj0517 commited on
Commit ·
7ab19f6
1
Parent(s): e56e825
Add extract_sound
Browse files- modules/video_utils.py +51 -4
modules/video_utils.py
CHANGED
|
@@ -13,7 +13,6 @@ logger = get_logger()
|
|
| 13 |
def extract_frames(
|
| 14 |
vid_input: str,
|
| 15 |
output_temp_dir: str = TEMP_DIR,
|
| 16 |
-
quality: int = 2,
|
| 17 |
start_number: int = 0
|
| 18 |
):
|
| 19 |
"""
|
|
@@ -26,7 +25,6 @@ def extract_frames(
|
|
| 26 |
'ffmpeg',
|
| 27 |
'-y', # Enable overwriting
|
| 28 |
'-i', vid_input,
|
| 29 |
-
'-q:v', str(quality),
|
| 30 |
'-start_number', str(start_number),
|
| 31 |
f'{output_path}'
|
| 32 |
]
|
|
@@ -35,7 +33,36 @@ def extract_frames(
|
|
| 35 |
subprocess.run(command, check=True)
|
| 36 |
except subprocess.CalledProcessError as e:
|
| 37 |
logger.exception("Error occurred while extracting frames from the video")
|
| 38 |
-
raise f"An error occurred: {str(e)}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 39 |
|
| 40 |
|
| 41 |
def get_frames_from_dir(vid_dir: str,
|
|
@@ -63,6 +90,26 @@ def get_frames_from_dir(vid_dir: str,
|
|
| 63 |
return frames
|
| 64 |
|
| 65 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 66 |
def clean_image_files(image_dir: str):
|
| 67 |
"""Removes all image files from the dir"""
|
| 68 |
image_extensions = ('.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.webp')
|
|
@@ -74,4 +121,4 @@ def clean_image_files(image_dir: str):
|
|
| 74 |
os.remove(file_path)
|
| 75 |
except Exception as e:
|
| 76 |
logger.exception("Error while removing image files")
|
| 77 |
-
raise f"
|
|
|
|
| 13 |
def extract_frames(
|
| 14 |
vid_input: str,
|
| 15 |
output_temp_dir: str = TEMP_DIR,
|
|
|
|
| 16 |
start_number: int = 0
|
| 17 |
):
|
| 18 |
"""
|
|
|
|
| 25 |
'ffmpeg',
|
| 26 |
'-y', # Enable overwriting
|
| 27 |
'-i', vid_input,
|
|
|
|
| 28 |
'-start_number', str(start_number),
|
| 29 |
f'{output_path}'
|
| 30 |
]
|
|
|
|
| 33 |
subprocess.run(command, check=True)
|
| 34 |
except subprocess.CalledProcessError as e:
|
| 35 |
logger.exception("Error occurred while extracting frames from the video")
|
| 36 |
+
raise RuntimeError(f"An error occurred: {str(e)}")
|
| 37 |
+
|
| 38 |
+
return get_frames_from_dir(output_temp_dir)
|
| 39 |
+
|
| 40 |
+
|
| 41 |
+
def extract_sound(
|
| 42 |
+
vid_input: str,
|
| 43 |
+
output_temp_dir: str = TEMP_DIR,
|
| 44 |
+
):
|
| 45 |
+
"""
|
| 46 |
+
Extract audio from a video file and save it as a separate sound file. This needs FFmpeg installed.
|
| 47 |
+
"""
|
| 48 |
+
os.makedirs(output_temp_dir, exist_ok=True)
|
| 49 |
+
output_path = os.path.join(output_temp_dir, "sound.mp3")
|
| 50 |
+
|
| 51 |
+
command = [
|
| 52 |
+
'ffmpeg',
|
| 53 |
+
'-y', # Enable overwriting
|
| 54 |
+
'-i', vid_input,
|
| 55 |
+
'-vn',
|
| 56 |
+
output_path
|
| 57 |
+
]
|
| 58 |
+
|
| 59 |
+
try:
|
| 60 |
+
subprocess.run(command, check=True)
|
| 61 |
+
except subprocess.CalledProcessError as e:
|
| 62 |
+
logger.exception("Error occurred while extracting sound from the video")
|
| 63 |
+
raise RuntimeError(f"An error occurred: {str(e)}")
|
| 64 |
+
|
| 65 |
+
return output_path
|
| 66 |
|
| 67 |
|
| 68 |
def get_frames_from_dir(vid_dir: str,
|
|
|
|
| 90 |
return frames
|
| 91 |
|
| 92 |
|
| 93 |
+
def clean_temp_dir(temp_dir: str = TEMP_DIR):
|
| 94 |
+
"""Removes media files from the directory."""
|
| 95 |
+
clean_sound_files(temp_dir)
|
| 96 |
+
clean_image_files(temp_dir)
|
| 97 |
+
|
| 98 |
+
|
| 99 |
+
def clean_sound_files(sound_dir: str):
|
| 100 |
+
"""Removes all sound files from the directory."""
|
| 101 |
+
sound_extensions = ('.mp3', '.wav', '.aac', '.flac', '.ogg', '.m4a', '.wma')
|
| 102 |
+
|
| 103 |
+
for filename in os.listdir(sound_dir):
|
| 104 |
+
if filename.lower().endswith(sound_extensions):
|
| 105 |
+
file_path = os.path.join(sound_dir, filename)
|
| 106 |
+
try:
|
| 107 |
+
os.remove(file_path)
|
| 108 |
+
except Exception as e:
|
| 109 |
+
logger.exception("Error while removing sound files")
|
| 110 |
+
raise RuntimeError(f"Error removing {file_path}: {str(e)}")
|
| 111 |
+
|
| 112 |
+
|
| 113 |
def clean_image_files(image_dir: str):
|
| 114 |
"""Removes all image files from the dir"""
|
| 115 |
image_extensions = ('.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.webp')
|
|
|
|
| 121 |
os.remove(file_path)
|
| 122 |
except Exception as e:
|
| 123 |
logger.exception("Error while removing image files")
|
| 124 |
+
raise RuntimeError(f"An error occurred: {str(e)}")
|