File size: 2,508 Bytes
eefaa37
00cb808
172af62
e6b42eb
eefaa37
00cb808
 
 
 
 
4cf9976
e6b42eb
 
 
 
 
 
 
 
 
 
00cb808
172af62
eefaa37
00cb808
172af62
00cb808
e6b42eb
 
172af62
4cf9976
e6b42eb
eefaa37
00cb808
e416331
8df4907
00cb808
 
 
 
 
 
172af62
e6b42eb
172af62
e416331
172af62
e416331
 
 
 
172af62
8df4907
172af62
00cb808
 
 
 
 
 
8df4907
00cb808
172af62
00cb808
172af62
00cb808
 
8df4907
e416331
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import streamlit as st
import os
import subprocess
import ffmpeg

# 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)

def get_new_filename(original_filename):
    """Generate a new filename with an incremented number."""
    base, ext = os.path.splitext(original_filename)
    i = 1
    new_filename = f"{base}_{i}{ext}"
    while os.path.exists(os.path.join(UPLOAD_FOLDER, new_filename)):
        i += 1
        new_filename = f"{base}_{i}{ext}"
    return new_filename

# 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:
    new_filename = get_new_filename(uploaded_file.name)
    file_path = os.path.join(UPLOAD_FOLDER, new_filename)
    with open(file_path, 'wb') as f:
        f.write(uploaded_file.getbuffer())
    st.success(f'File uploaded successfully as {new_filename}!')

# FFmpeg command input
ffmpeg_command = st.text_area("Enter FFmpeg command", 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, new_filename)
        output_file = os.path.join(PROCESSED_FOLDER, 'output.mp4')
        
        # Prepare FFmpeg command
        command = f"ffmpeg -i {input_file} {ffmpeg_command}"
        
        # Replace 'output' placeholder in the command with the actual output file path
        command = 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}")