Spaces:
Sleeping
Sleeping
File size: 2,582 Bytes
28d0d8c 4b236c4 28d0d8c 4b236c4 28d0d8c 4b236c4 28d0d8c b956f69 28d0d8c b956f69 28d0d8c b956f69 4b236c4 28d0d8c abaf2ab 28d0d8c abaf2ab 28d0d8c 4b236c4 28d0d8c |
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 70 71 72 73 74 75 76 77 78 79 80 |
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()
|