ffmpeg-info / app.py
janaab's picture
cleanup
4b236c4 verified
import subprocess
import gradio as gr
import os
def get_audio_metadata(file_path):
try:
# Run ffmpeg to extract metadata
result = subprocess.run(
[
"ffmpeg",
"-i",
file_path,
"-hide_banner",
],
stderr=subprocess.PIPE,
text=True
)
# Parse output for metadata
output = result.stderr
metadata = {
"Container": None,
"Codec": None,
"Channels": None,
"Sample Format": None,
"Sample Rate": None,
"Bitrate": None,
}
# Extract container format
if "Input #0," in output:
container_line = [line for line in output.splitlines() if "Input #0," in line]
if container_line:
container_info = container_line[0].split()
metadata["Container"] = container_info[2].strip(',')
# Extract codec, channels, sample format, sample rate, and bitrate
if "Audio:" in output:
audio_line = [line for line in output.splitlines() if "Audio:" in line]
if audio_line:
audio_info = audio_line[0].split()
metadata["Codec"] = audio_info[audio_info.index("Audio:") + 1]
audio_info = audio_line[0].split(",")
for item in audio_info:
if "Hz" in item:
metadata["Sample Rate"] = item.strip()
if "kb/s" in item:
metadata["Bitrate"] = item.strip()
if "stereo" in item or "mono" in item:
metadata["Channels"] = item.strip()
if "s32" in item or "s16" in item or "flt" in item:
metadata["Sample Format"] = item.strip()
return metadata
except Exception as e:
return {"Error": str(e)}
def process_audio(file):
# Get metadata
metadata = get_audio_metadata(file)
return metadata
# Gradio interface
def create_interface():
inputs = gr.Audio(label="Upload an audio file", type="filepath")
outputs = gr.JSON(label="Audio Metadata")
interface = gr.Interface(
fn=process_audio,
inputs=inputs,
outputs=outputs,
title="FFmpeg.info",
description="Upload an audio file to extract its container, codec, channels, sample format, sample rate, and bitrate using ffmpeg."
)
return interface
if __name__ == "__main__":
create_interface().launch()