Spaces:
Sleeping
Sleeping
import streamlit as st | |
import ffmpeg | |
import os | |
import subprocess | |
# Directories for uploads and processing | |
UPLOAD_FOLDER = 'uploads' | |
PROCESSED_FOLDER = 'processed' | |
os.makedirs(UPLOAD_FOLDER, exist_ok=True) | |
os.makedirs(PROCESSED_FOLDER, exist_ok=True) | |
# Streamlit UI | |
st.title('FFmpeg Command Executor with ffmpeg-python') | |
# File upload | |
uploaded_file = st.file_uploader("Upload a file", type=None) # Accept any file type | |
if uploaded_file: | |
file_path = os.path.join(UPLOAD_FOLDER, uploaded_file.name) | |
with open(file_path, 'wb') as f: | |
f.write(uploaded_file.getbuffer()) | |
st.success('File uploaded successfully!') | |
# FFmpeg command input | |
ffmpeg_command = st.text_area("Enter FFmpeg command (e.g., -vf scale=640:480 output.mp4)", placeholder="e.g., -vf scale=640:480 output.mp4") | |
if st.button('Run Command'): | |
if not uploaded_file: | |
st.error("Please upload a file before running the command.") | |
elif not ffmpeg_command: | |
st.error("Please enter an FFmpeg command.") | |
else: | |
# Build paths | |
input_file = os.path.join(UPLOAD_FOLDER, uploaded_file.name) | |
output_file = os.path.join(PROCESSED_FOLDER, 'output.mp4') | |
# Prepare FFmpeg command | |
# Ensure the output filename is correctly used | |
command = f"ffmpeg -i {input_file} {ffmpeg_command.replace('output', output_file)}" | |
try: | |
# Execute FFmpeg command | |
result = subprocess.run(command, shell=True, check=True, capture_output=True, text=True) | |
st.success("Command executed successfully!") | |
# Display logs | |
st.subheader('FFmpeg Logs:') | |
st.code(result.stdout) | |
# Display video player | |
if os.path.exists(output_file): | |
st.subheader('Processed Video:') | |
st.video(output_file) | |
else: | |
st.warning("No video file found. Please check the command.") | |
except subprocess.CalledProcessError as e: | |
st.error(f"Error executing command: {e}") | |
# Using ffmpeg-python to run commands directly | |
def run_ffmpeg_command(input_path, output_path, command_args): | |
try: | |
# ffmpeg-python command execution | |
ffmpeg.input(input_path).output(output_path, **command_args).run(overwrite_output=True) | |
st.success("Command executed successfully with ffmpeg-python!") | |
# Display processed video | |
st.subheader('Processed Video:') | |
st.video(output_path) | |
except ffmpeg.Error as e: | |
st.error(f"Error executing command with ffmpeg-python: {e}") | |
# Example usage of ffmpeg-python | |
if st.button('Run ffmpeg-python Command'): | |
if not uploaded_file: | |
st.error("Please upload a file before running the command.") | |
elif not ffmpeg_command: | |
st.error("Please enter an FFmpeg command.") | |
else: | |
input_file = os.path.join(UPLOAD_FOLDER, uploaded_file.name) | |
output_file = os.path.join(PROCESSED_FOLDER, 'output.mp4') | |
# Define the command arguments | |
# Convert ffmpeg_command into a dictionary format suitable for ffmpeg-python | |
command_args = {} # You need to parse the `ffmpeg_command` into this dictionary | |
run_ffmpeg_command(input_file, output_file, command_args) |