openfree commited on
Commit
e63b412
ยท
verified ยท
1 Parent(s): 0f9eae9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +42 -29
app.py CHANGED
@@ -611,35 +611,48 @@ def merge_videos_with_audio(video_files, audio_file, audio_volume, output_fps):
611
  if audio_file:
612
  status = "์˜ค๋””์˜ค ์ฒ˜๋ฆฌ ์ค‘..."
613
 
614
- # ์˜ค๋””์˜ค ๋กœ๋“œ
615
- audio_clip = VideoFileClip(audio_file).audio if audio_file.endswith(('.mp4', '.avi', '.mov')) else None
616
-
617
- if audio_clip is None:
618
- # ์˜ค๋””์˜ค ํŒŒ์ผ์ธ ๊ฒฝ์šฐ
619
- audio_clip = AudioFileClip(audio_file)
620
-
621
- # ๋ณผ๋ฅจ ์กฐ์ ˆ
622
- if audio_volume != 100:
623
- audio_clip = audio_clip.volumex(audio_volume / 100)
624
-
625
- # ์˜ค๋””์˜ค๋ฅผ ๋น„๋””์˜ค ๊ธธ์ด์— ๋งž์ถค
626
- video_duration = final_video.duration
627
- audio_duration = audio_clip.duration
628
-
629
- if audio_duration > video_duration:
630
- # ์˜ค๋””์˜ค๊ฐ€ ๋” ๊ธธ๋ฉด ์ž˜๋ผ๋ƒ„
631
- audio_clip = audio_clip.subclip(0, video_duration)
632
- elif audio_duration < video_duration:
633
- # ์˜ค๋””์˜ค๊ฐ€ ๋” ์งง์œผ๋ฉด ๋ฐ˜๋ณต
634
- loops_needed = int(video_duration / audio_duration) + 1
635
- audio_clip = concatenate_audioclips([audio_clip] * loops_needed).subclip(0, video_duration)
636
-
637
- # ๊ธฐ์กด ์˜ค๋””์˜ค์™€ ์ƒˆ ์˜ค๋””์˜ค ํ•ฉ์„ฑ (๊ธฐ์กด ์˜ค๋””์˜ค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ)
638
- if final_video.audio:
639
- final_audio = CompositeAudioClip([final_video.audio, audio_clip])
640
- final_video = final_video.set_audio(final_audio)
641
- else:
642
- final_video = final_video.set_audio(audio_clip)
 
 
 
 
 
 
 
 
 
 
 
 
 
643
 
644
  status = "๋น„๋””์˜ค ์ €์žฅ ์ค‘..."
645
 
 
611
  if audio_file:
612
  status = "์˜ค๋””์˜ค ์ฒ˜๋ฆฌ ์ค‘..."
613
 
614
+ try:
615
+ # ์˜ค๋””์˜ค ๋กœ๋“œ
616
+ if audio_file.endswith(('.mp4', '.avi', '.mov', '.mkv')):
617
+ # ๋น„๋””์˜ค ํŒŒ์ผ์—์„œ ์˜ค๋””์˜ค ์ถ”์ถœ
618
+ temp_video = VideoFileClip(audio_file)
619
+ audio_clip = temp_video.audio
620
+ temp_video.close()
621
+ else:
622
+ # ์˜ค๋””์˜ค ํŒŒ์ผ ์ง์ ‘ ๋กœ๋“œ
623
+ audio_clip = AudioFileClip(audio_file)
624
+
625
+ if audio_clip is None:
626
+ raise ValueError("์˜ค๋””์˜ค๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.")
627
+
628
+ # ๋ณผ๋ฅจ ์กฐ์ ˆ
629
+ if audio_volume != 100:
630
+ audio_clip = audio_clip.volumex(audio_volume / 100)
631
+
632
+ # ์˜ค๋””์˜ค๋ฅผ ๋น„๋””์˜ค ๊ธธ์ด์— ๋งž์ถค
633
+ video_duration = final_video.duration
634
+ audio_duration = audio_clip.duration
635
+
636
+ if audio_duration > video_duration:
637
+ # ์˜ค๋””์˜ค๊ฐ€ ๋” ๊ธธ๋ฉด ์ž˜๋ผ๋ƒ„
638
+ audio_clip = audio_clip.subclip(0, video_duration)
639
+ elif audio_duration < video_duration:
640
+ # ์˜ค๋””์˜ค๊ฐ€ ๋” ์งง์œผ๋ฉด ๋ฐ˜๋ณต
641
+ loops_needed = int(video_duration / audio_duration) + 1
642
+ audio_clips_list = [audio_clip] * loops_needed
643
+ looped_audio = concatenate_audioclips(audio_clips_list)
644
+ audio_clip = looped_audio.subclip(0, video_duration)
645
+
646
+ # ๊ธฐ์กด ์˜ค๋””์˜ค์™€ ์ƒˆ ์˜ค๋””์˜ค ํ•ฉ์„ฑ (๊ธฐ์กด ์˜ค๋””์˜ค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ)
647
+ if final_video.audio:
648
+ final_audio = CompositeAudioClip([final_video.audio, audio_clip])
649
+ final_video = final_video.set_audio(final_audio)
650
+ else:
651
+ final_video = final_video.set_audio(audio_clip)
652
+
653
+ except Exception as e:
654
+ logging.warning(f"์˜ค๋””์˜ค ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}")
655
+ # ์˜ค๋””์˜ค ์ฒ˜๋ฆฌ ์‹คํŒจํ•ด๋„ ๋น„๋””์˜ค๋Š” ๊ณ„์† ์ฒ˜๋ฆฌ
656
 
657
  status = "๋น„๋””์˜ค ์ €์žฅ ์ค‘..."
658