soiz1 commited on
Commit
68f623a
·
verified ·
1 Parent(s): bf74ba3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -18
app.py CHANGED
@@ -4,43 +4,47 @@ from moviepy.editor import VideoFileClip
4
  import tempfile
5
  import mimetypes
6
  import os
 
7
 
8
- def change_speed(file_path, speed):
9
  mime, _ = mimetypes.guess_type(file_path)
10
-
11
  if mime and mime.startswith("audio"):
12
- return change_audio_speed(file_path, speed)
13
  elif mime and mime.startswith("video"):
14
- return change_video_speed(file_path, speed)
15
  else:
16
  raise ValueError("対応していないファイル形式です")
17
 
18
- def change_audio_speed(audio_file, speed):
19
  audio = AudioSegment.from_file(audio_file)
20
  new_frame_rate = int(audio.frame_rate * speed)
21
  faster_audio = audio._spawn(audio.raw_data, overrides={'frame_rate': new_frame_rate})
22
  faster_audio = faster_audio.set_frame_rate(audio.frame_rate)
23
 
24
- with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as tmpfile:
25
- faster_audio.export(tmpfile.name, format="wav")
 
 
 
26
  return tmpfile.name
27
 
28
- def change_video_speed(video_file, speed):
29
  clip = VideoFileClip(video_file)
30
  new_clip = clip.fx(vfx.speedx, speed)
31
 
32
- suffix = os.path.splitext(video_file)[-1].lower()
33
- if suffix in [".mov"]:
34
- ext = ".mov"
35
- else:
36
- ext = ".mp4"
37
 
38
- with tempfile.NamedTemporaryFile(suffix=ext, delete=False) as tmpfile:
39
- new_clip.write_videofile(tmpfile.name, codec="libx264", audio_codec="aac")
 
 
 
 
 
40
  return tmpfile.name
41
 
42
- import moviepy.video.fx.all as vfx
43
-
44
  with gr.Blocks() as demo:
45
  gr.Markdown("# 音声・動画の再生速度を細かく調整して変換")
46
 
@@ -51,12 +55,17 @@ with gr.Blocks() as demo:
51
  minimum=0.1, maximum=3.0, value=1.0, step=0.00001,
52
  label="再生速度(例:0.75 = 25%遅く、1.25 = 25%速く)"
53
  )
 
 
 
 
 
54
  btn = gr.Button("変換")
55
 
56
  with gr.Column():
57
  file_output = gr.File(label="変換後のファイルをダウンロード")
58
 
59
- btn.click(fn=change_speed, inputs=[file_input, speed_input], outputs=file_output)
60
 
61
  if __name__ == "__main__":
62
  demo.launch()
 
4
  import tempfile
5
  import mimetypes
6
  import os
7
+ import moviepy.video.fx.all as vfx
8
 
9
+ def change_speed(file_path, speed, export_format):
10
  mime, _ = mimetypes.guess_type(file_path)
11
+
12
  if mime and mime.startswith("audio"):
13
+ return change_audio_speed(file_path, speed, export_format)
14
  elif mime and mime.startswith("video"):
15
+ return change_video_speed(file_path, speed, export_format)
16
  else:
17
  raise ValueError("対応していないファイル形式です")
18
 
19
+ def change_audio_speed(audio_file, speed, export_format):
20
  audio = AudioSegment.from_file(audio_file)
21
  new_frame_rate = int(audio.frame_rate * speed)
22
  faster_audio = audio._spawn(audio.raw_data, overrides={'frame_rate': new_frame_rate})
23
  faster_audio = faster_audio.set_frame_rate(audio.frame_rate)
24
 
25
+ original_ext = os.path.splitext(audio_file)[-1].lstrip(".")
26
+ format_ext = original_ext if export_format == "元のまま" else export_format
27
+
28
+ with tempfile.NamedTemporaryFile(suffix=f".{format_ext}", delete=False) as tmpfile:
29
+ faster_audio.export(tmpfile.name, format=format_ext)
30
  return tmpfile.name
31
 
32
+ def change_video_speed(video_file, speed, export_format):
33
  clip = VideoFileClip(video_file)
34
  new_clip = clip.fx(vfx.speedx, speed)
35
 
36
+ original_ext = os.path.splitext(video_file)[-1].lstrip(".")
37
+ format_ext = original_ext if export_format == "元のまま" else export_format
 
 
 
38
 
39
+ suffix = f".{format_ext}"
40
+ with tempfile.NamedTemporaryFile(suffix=suffix, delete=False) as tmpfile:
41
+ new_clip.write_videofile(
42
+ tmpfile.name,
43
+ codec="libx264" if format_ext in ["mp4", "mov"] else None,
44
+ audio_codec="aac"
45
+ )
46
  return tmpfile.name
47
 
 
 
48
  with gr.Blocks() as demo:
49
  gr.Markdown("# 音声・動画の再生速度を細かく調整して変換")
50
 
 
55
  minimum=0.1, maximum=3.0, value=1.0, step=0.00001,
56
  label="再生速度(例:0.75 = 25%遅く、1.25 = 25%速く)"
57
  )
58
+ export_format_input = gr.Dropdown(
59
+ choices=["元のまま", "wav", "mp3", "mp4", "mov"],
60
+ value="元のまま",
61
+ label="出力フォーマット"
62
+ )
63
  btn = gr.Button("変換")
64
 
65
  with gr.Column():
66
  file_output = gr.File(label="変換後のファイルをダウンロード")
67
 
68
+ btn.click(fn=change_speed, inputs=[file_input, speed_input, export_format_input], outputs=file_output)
69
 
70
  if __name__ == "__main__":
71
  demo.launch()