Spaces:
Paused
Paused
import gradio as gr | |
import subprocess | |
import os | |
import tempfile | |
from pathlib import Path | |
def convert_ts_to_mp4(file_path): | |
""" | |
Converts a .ts video file to .mp4 using ffmpeg. | |
Args: | |
file_path (str): The path to the .ts file. | |
Returns: | |
str: The path to the converted .mp4 file, or None on error. | |
""" | |
try: | |
# 1. Check if the file exists | |
if not os.path.exists(file_path): | |
return "Error: File not found." | |
# 2. Check if the file has the correct extension | |
if not file_path.lower().endswith(".ts"): | |
return "Error: Invalid file type. Please upload a .ts file." | |
# 3. Convert the .ts file to .mp4 using ffmpeg in a temporary location | |
with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as mp4_file: | |
try: | |
subprocess.run( | |
[ | |
"ffmpeg", | |
"-i", | |
file_path, | |
"-c:v", | |
"libx264", # Use libx264 for H.264 encoding (common) | |
"-c:a", | |
"aac", # Use AAC for audio encoding (common) | |
"-y", # Overwrite output file if it exists | |
mp4_file.name, | |
], | |
check=True, # Raise an exception on non-zero exit code | |
stdout=subprocess.PIPE, | |
stderr=subprocess.PIPE, | |
) | |
except subprocess.CalledProcessError as e: | |
# ffmpeg failed. Return the error message. | |
error_message = f"FFmpeg conversion failed: {e.stderr.decode('utf-8')}" | |
print(error_message) # Print to console for debugging in Spaces | |
return error_message | |
# 4. Return the path to the .mp4 file | |
return mp4_file.name | |
except Exception as e: | |
return f"An error occurred: {e}" | |
def gradio_interface(): | |
""" | |
Defines the Gradio interface for the application. | |
""" | |
inputs = [ | |
gr.File( | |
label="Upload .TS File", | |
file_types=[".ts"], # Restrict to .ts files | |
), | |
] | |
outputs = gr.File(label="Converted MP4 File") | |
title = "TS to MP4 Converter" | |
description = "Convert .ts video files to .mp4 format. Upload a .ts file, and the converted .mp4 file will be available for download." | |
article = """ | |
Example Usage: | |
1. Click the 'Upload .TS File' button to upload a .ts video file from your local machine. | |
2. Click the 'Submit' button. | |
3. The converted .mp4 file will be processed, and a download link will be provided. | |
""" | |
return gr.Interface( | |
fn=convert_ts_to_mp4, | |
inputs=inputs, | |
outputs=outputs, | |
title=title, | |
description=description, | |
article=article, | |
) | |
if __name__ == "__main__": | |
gradio_interface().launch() | |