|
import gradio as gr |
|
import subprocess |
|
import os |
|
import datetime |
|
from ffmpy import FFmpeg |
|
from tempfile import _TemporaryFileWrapper |
|
|
|
def combine_video_subtitle(video_file :_TemporaryFileWrapper , subtitle_file): |
|
|
|
try: |
|
current_datetime = datetime.datetime.now() |
|
formatted_datetime = current_datetime.strftime("%Y%m%d_%H%M%S") |
|
|
|
output_file = f'output_combined_.mp4' |
|
|
|
cmd1 = [ |
|
"ffmpeg", |
|
'-i', |
|
subtitle_file.name, |
|
'subtites.ass', |
|
|
|
|
|
|
|
|
|
] |
|
print(video_file.name ) |
|
|
|
cmd2 = [ |
|
"ffmpeg", "-i", |
|
video_file.name, '-vf' ,'ass=subtitle.ass', |
|
|
|
output_file |
|
] |
|
|
|
res = subprocess.run(cmd1, stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
|
print(res) |
|
|
|
return ["subtitle.ass" ,res] |
|
except subprocess.CalledProcessError as e: |
|
error_message = f"An error occurred: {e.returncode}\n{e.stderr.decode()}" |
|
print(error_message) |
|
return None, error_message |
|
|
|
|
|
inputs = [ |
|
gr.inputs.File(label="Video File"), |
|
gr.inputs.File(label="Subtitle File") |
|
] |
|
|
|
outputs = [gr.outputs.File(label="Combined Video with Subtitle") ,gr.Textbox()] |
|
|
|
title = "Video Subtitle Combiner" |
|
description = "Combine a video file and a subtitle file using ffmpeg." |
|
|
|
iface = gr.Interface(fn=combine_video_subtitle, inputs=inputs, outputs=outputs, title=title, description=description) |
|
|
|
|
|
iface.launch(debug =True) |