Spaces:
Running
on
Zero
Running
on
Zero
Update app.py
Browse files
app.py
CHANGED
|
@@ -87,48 +87,60 @@ def transcribe(audio_file_path, model_size="base"):
|
|
| 87 |
return "\n".join(transcription_with_timestamps)
|
| 88 |
|
| 89 |
# Fonction pour ajouter des sous-titres à une vidéo
|
| 90 |
-
def add_subtitle_to_video(input_video, subtitle_file, subtitle_language, soft_subtitle):
|
| 91 |
video_input_stream = ffmpeg.input(input_video)
|
| 92 |
subtitle_input_stream = ffmpeg.input(subtitle_file)
|
| 93 |
input_video_name = os.path.splitext(os.path.basename(input_video))[0]
|
| 94 |
-
output_video = f"/tmp/
|
| 95 |
-
subtitle_track_title = os.path.splitext(os.path.basename(subtitle_file))[0]
|
| 96 |
-
|
| 97 |
if soft_subtitle:
|
| 98 |
-
stream = ffmpeg.output(
|
| 99 |
-
video_input_stream, subtitle_input_stream, output_video,
|
| 100 |
-
**{"c": "copy", "c:s": "mov_text"},
|
| 101 |
-
**{"metadata:s:s:0": f"language={subtitle_language}", "metadata:s:s:0": f"title={subtitle_track_title}"}
|
| 102 |
-
)
|
| 103 |
else:
|
| 104 |
-
stream = ffmpeg.output(
|
| 105 |
-
video_input_stream, output_video,
|
| 106 |
-
vf=f"subtitles={subtitle_file}"
|
| 107 |
-
)
|
| 108 |
-
|
| 109 |
ffmpeg.run(stream, overwrite_output=True)
|
| 110 |
return output_video
|
| 111 |
|
| 112 |
-
#
|
| 113 |
-
def
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 114 |
transcription = transcribe(video_file.name, "tiny")
|
| 115 |
srt_path = text_to_srt(transcription)
|
| 116 |
translated_srt_path = translate_srt(srt_path, source_language_code, target_language_code)
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
|
|
|
| 131 |
)
|
| 132 |
|
| 133 |
-
|
| 134 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
return "\n".join(transcription_with_timestamps)
|
| 88 |
|
| 89 |
# Fonction pour ajouter des sous-titres à une vidéo
|
| 90 |
+
def add_subtitle_to_video(input_video, subtitle_file, subtitle_language, soft_subtitle=False):
|
| 91 |
video_input_stream = ffmpeg.input(input_video)
|
| 92 |
subtitle_input_stream = ffmpeg.input(subtitle_file)
|
| 93 |
input_video_name = os.path.splitext(os.path.basename(input_video))[0]
|
| 94 |
+
output_video = f"/tmp/{input_video_name}_subtitled.mp4"
|
|
|
|
|
|
|
| 95 |
if soft_subtitle:
|
| 96 |
+
stream = ffmpeg.output(video_input_stream, subtitle_input_stream, output_video, **{"c": "copy", "c:s": "mov_text"})
|
|
|
|
|
|
|
|
|
|
|
|
|
| 97 |
else:
|
| 98 |
+
stream = ffmpeg.output(video_input_stream, output_video, vf=f"subtitles={subtitle_file}")
|
|
|
|
|
|
|
|
|
|
|
|
|
| 99 |
ffmpeg.run(stream, overwrite_output=True)
|
| 100 |
return output_video
|
| 101 |
|
| 102 |
+
# Fonction de transcription pour Gradio avec ajout de sous-titres à la vidéo
|
| 103 |
+
def transcribe_video(video_file):
|
| 104 |
+
transcription = transcribe(video_file.name, "tiny")
|
| 105 |
+
srt_path = text_to_srt(transcription)
|
| 106 |
+
# Ajouter les sous-titres à la vidéo
|
| 107 |
+
output_video_path = add_subtitle_to_video(video_file.name, srt_path, subtitle_language="eng", soft_subtitle=False)
|
| 108 |
+
return output_video_path, srt_path
|
| 109 |
+
|
| 110 |
+
# Fonction de traduction pour Gradio qui utilise maintenant add_subtitle_to_video
|
| 111 |
+
def translate_video(video_file, source_language_code, target_language_code):
|
| 112 |
transcription = transcribe(video_file.name, "tiny")
|
| 113 |
srt_path = text_to_srt(transcription)
|
| 114 |
translated_srt_path = translate_srt(srt_path, source_language_code, target_language_code)
|
| 115 |
+
# Ajoutez les sous-titres traduits à la vidéo
|
| 116 |
+
output_video_path = add_subtitle_to_video(video_file.name, translated_srt_path, target_language_code, soft_subtitle=False)
|
| 117 |
+
return output_video_path, translated_srt_path
|
| 118 |
+
|
| 119 |
+
# Interface Gradio
|
| 120 |
+
file_input = gr.Video(label="Video File")
|
| 121 |
+
source_language_dropdown = gr.Dropdown(choices=language_options, label="Source Language")
|
| 122 |
+
target_language_dropdown = gr.Dropdown(choices=language_options, label="Target Language")
|
| 123 |
+
|
| 124 |
+
transcription_interface = gr.Interface(
|
| 125 |
+
fn=transcribe_video,
|
| 126 |
+
inputs=file_input,
|
| 127 |
+
outputs=[gr.Video(label="Video with Subtitles"), gr.File(label="Transcription File (.srt)")],
|
| 128 |
+
title="Video Transcription",
|
| 129 |
+
description="Automatically transcribe the audio from your video into subtitles and add them to the video."
|
| 130 |
)
|
| 131 |
|
| 132 |
+
translation_interface = gr.Interface(
|
| 133 |
+
fn=translate_video,
|
| 134 |
+
inputs=[file_input, source_language_dropdown, target_language_dropdown],
|
| 135 |
+
outputs=[gr.Video(label="Video with Translated Subtitles"), gr.File(label="Translated Subtitles (.srt)")],
|
| 136 |
+
title="Video Translation",
|
| 137 |
+
description="Translate the subtitles of your video into another language and add them to the video."
|
| 138 |
+
)
|
| 139 |
+
|
| 140 |
+
tabs = gr.Tabs([
|
| 141 |
+
gr.Tab(transcription_interface, label="Transcribe"),
|
| 142 |
+
gr.Tab(translation_interface, label="Translate")
|
| 143 |
+
])
|
| 144 |
+
|
| 145 |
+
# Lancement de l'application
|
| 146 |
+
tabs.launch()
|