FFmpeg / app.py
RandomPersonRR's picture
Update app.py
172af62 verified
raw
history blame
3.29 kB
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)