2
0

main.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import ffmpeg
  2. import json
  3. import os
  4. import gradio as gr
  5. def extension__tts_generation_webui():
  6. ffmpeg_metadata_ui()
  7. return {
  8. "package_name": "extension_ffmpeg_metadata",
  9. "name": "FFMPEG Metadata",
  10. "version": "0.0.1",
  11. "requirements": "git+https://github.com/rsxdalv/extension_ffmpeg_metadata@main",
  12. "description": "FFMPEG Metadata allows loading metadata from audio files.",
  13. "extension_type": "interface",
  14. "extension_class": "outputs",
  15. "author": "rsxdalv",
  16. "extension_author": "rsxdalv",
  17. "license": "MIT",
  18. "website": "https://github.com/rsxdalv/extension_ffmpeg_metadata",
  19. "extension_website": "https://github.com/rsxdalv/extension_ffmpeg_metadata",
  20. "extension_platform_version": "0.0.1",
  21. }
  22. def load_ffmpeg_metadata(filename: str):
  23. if not hasattr(ffmpeg, "probe"):
  24. raise ImportError(
  25. """Incorrect ffmpeg version. Please install ffmpeg-python with `pip install ffmpeg-python`"""
  26. )
  27. if not filename or not os.path.exists(filename):
  28. return None
  29. ffmpeg_output = ffmpeg.probe(filename)
  30. if filename.endswith(".ogg") or ffmpeg_output["format"]["format_name"] == "ogg":
  31. return json.loads(ffmpeg_output["streams"][0]["tags"]["comment"])
  32. if filename.endswith(".flac") or ffmpeg_output["format"]["format_name"] == "flac":
  33. return json.loads(ffmpeg_output["format"]["tags"]["comment"])
  34. print("Unknown file type:", filename)
  35. print(json.dumps(ffmpeg_output, indent=4, sort_keys=True))
  36. return json.loads(json.dumps(ffmpeg_output, indent=4, sort_keys=True))
  37. def ffmpeg_metadata_ui():
  38. with gr.Column():
  39. input_file = gr.File(label="Input File")
  40. audio_preview = gr.Audio(label="Audio Preview")
  41. metadata = gr.JSON(label="Metadata")
  42. input_file.change(
  43. fn=load_ffmpeg_metadata,
  44. inputs=input_file,
  45. outputs=metadata,
  46. api_name="load_ffmpeg_metadata",
  47. ).then(
  48. fn=lambda x: gr.Audio(value=x),
  49. inputs=input_file,
  50. outputs=audio_preview,
  51. )
  52. if __name__ == "__main__":
  53. if "demo" in locals():
  54. demo.close()
  55. with gr.Blocks() as demo:
  56. with gr.Tab("FFMPEG Metadata"):
  57. ffmpeg_metadata_ui()
  58. demo.launch(
  59. server_port=7770,
  60. )