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)