Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ninjaneural
GitHub Repository: ninjaneural/webui
Path: blob/master/memo/comfyui_anidiff_long/extract.py
3275 views
1
import os
2
import ffmpeg
3
4
def extract_frames(video_path, output_dir, fps='source'):
5
"""
6
동영상 파일로부터 프레임을 추출하여 이미지로 저장합니다.
7
8
Args:
9
video_path (str): 동영상 파일의 경로입니다.
10
output_dir (str): 추출된 이미지를 저장할 폴더의 경로입니다.
11
fps (str): 이미지 추출 시 사용할 FPS입니다. 기본값은 'source'로, 동영상의 원본 FPS를 사용합니다.
12
"""
13
if not os.path.exists(output_dir):
14
os.makedirs(output_dir)
15
16
if fps == 'source':
17
# 동영상의 FPS를 가져옵니다.
18
probe = ffmpeg.probe(video_path)
19
video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None)
20
fps = eval(video_stream['r_frame_rate'])
21
22
(
23
ffmpeg
24
.input(video_path)
25
.output(os.path.join(output_dir, '%07d.png'), vf=f'fps={fps}')
26
.run(capture_stdout=True, capture_stderr=True)
27
)
28
29
def process_videos(folder_path):
30
"""
31
주어진 폴더 내의 모든 MP4 파일에 대해 작업을 수행합니다.
32
33
Args:
34
folder_path (str): 동영상 파일이 있는 폴더의 경로입니다.
35
"""
36
for file in os.listdir(folder_path):
37
if file.endswith('.mp4'):
38
print(f'# {file}')
39
video_path = os.path.join(folder_path, file)
40
output_dir = os.path.join(folder_path, "extract", os.path.splitext(file)[0])
41
extract_frames(video_path, output_dir)
42
43
# 사용 예
44
folder_path = './' # 동영상 파일이 있는 폴더의 경로
45
process_videos(folder_path)
46
47