seawolf2357 commited on
Commit
5b0e95f
·
verified ·
1 Parent(s): 5fd7cca

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +33 -59
app.py CHANGED
@@ -1,61 +1,35 @@
1
- import os
2
- import tempfile
3
  import gradio as gr
4
- from huggingface_hub import HfApi
5
- import logging
6
-
7
- # 로깅 설정
8
- logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
9
-
10
- # 환경 변수에서 Hugging Face 토큰 읽기
11
- hf_token = os.getenv("TOKEN")
12
- if not hf_token:
13
- logging.error("Hugging Face token is not set. Please set the HF_TOKEN environment variable.")
14
- exit()
15
-
16
- # Hugging Face API 초기화
17
- api = HfApi()
18
-
19
- def upload_file_to_hf_space(uploaded_file):
20
- user_id = "seawolf2357"
21
- space_name = "video"
22
- repo_id = f"{user_id}/{space_name}"
23
-
24
- # 임시 파일 생성 및 업로드된 파일 데이터 쓰기
25
- with tempfile.NamedTemporaryFile(delete=True, suffix='.mp4', mode='wb') as tmp_file:
26
- # 업로드된 파일의 바이트 데이터를 임시 파일에 쓰기
27
- if isinstance(uploaded_file, bytes):
28
- tmp_file.write(uploaded_file)
29
- else:
30
- # Gradio로부터 받은 파일 데이터가 bytes가 아닌 경우 처리
31
- data = uploaded_file.read() # 파일 객체에서 바이트 데이터 읽기
32
- tmp_file.write(data)
33
-
34
- tmp_file.flush()
35
- file_path = tmp_file.name
36
-
37
- logging.info(f"Uploading {file_path} to Hugging Face Spaces")
38
- try:
39
- api.upload_file(
40
- path_or_fileobj=file_path,
41
- path_in_repo=os.path.basename(file_path),
42
- repo_id=repo_id,
43
- token=hf_token,
44
- )
45
- uploaded_file_url = f"https://huggingface.co/spaces/{repo_id}/blob/main/{os.path.basename(file_path)}"
46
- logging.info(f"File uploaded successfully: {uploaded_file_url}")
47
- return uploaded_file_url
48
- except Exception as e:
49
- logging.error(f"Failed to upload file: {e}")
50
- return "Failed to upload file."
51
-
52
- # Gradio 인터페이스 설정 및 실행
53
- iface = gr.Interface(
54
- fn=upload_file_to_hf_space,
55
- inputs=gr.File(label="Upload your MP4 file"),
56
- outputs="text",
57
- title="MP4 File Upload to Hugging Face Spaces",
58
- description="Upload an MP4 file and get its URL in Hugging Face Spaces. Please ensure the file is an MP4 format."
59
- )
60
 
61
- iface.launch(debug=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
+ from moviepy.editor import ImageSequenceClip
3
+ import tempfile
4
+ import os
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
 
6
+ def images_to_video(image_files):
7
+ # 임시 디렉터리 생성
8
+ temp_dir = tempfile.mkdtemp()
9
+
10
+ # 이미지 파일을 임시 디렉터리로 저장
11
+ image_paths = []
12
+ for i, image_file in enumerate(image_files):
13
+ image_path = os.path.join(temp_dir, f"image_{i}.png")
14
+ with open(image_path, "wb") as f:
15
+ f.write(image_file)
16
+ image_paths.append(image_path)
17
+
18
+ # 이미지 시퀀스로부터 비디오 클립 생성 (각 이미지의 지속 시간은 2초)
19
+ clip = ImageSequenceClip(image_paths, fps=0.5) # fps=0.5 => 각 이미지는 2초 동안 보임
20
+
21
+ # 비디오 파일 저장
22
+ output_video_path = os.path.join(temp_dir, "output.mp4")
23
+ clip.write_videofile(output_video_path, fps=24) # 24fps로 출력 비디오 저장
24
+
25
+ # 생성된 비디오 파일 경로 반환
26
+ return output_video_path
27
+
28
+ # Gradio 인터페이스 정의
29
+ with gr.Blocks() as demo:
30
+ with gr.Row():
31
+ file_input = gr.File(label="Upload images", type="file", accept="image/*", multiple=True)
32
+ video_output = gr.Video(label="Output video")
33
+ file_input.change(images_to_video, inputs=file_input, outputs=video_output)
34
+
35
+ demo.launch()