Skip to main content

CLI para procesar archivos de audio/video y generar texto con IA

Project description

Audio-to-Text-IA

CLI para procesar archivos de audio/video y generar texto con IA. Esta herramienta permite convertir diferentes tipos de archivos (audio, video, texto, zip) en resúmenes o subtítulos utilizando inteligencia artificial.

Características

  • Procesamiento de audio a texto utilizando OpenAI Whisper
  • Arquitectura modular y escalable
  • Sistema de feature flags para habilitar/deshabilitar funcionalidades
  • Soporte para múltiples tipos de archivos (audio, video, texto, zip)
  • Diferentes opciones de generación (resúmenes, subtítulos)
  • Procesamiento de exports ZIP de chats de WhatsApp con transcripción inline
  • Fácil extensión para agregar nuevos comandos y tipos de archivos

Requisitos previos

  • Python 3.14+
  • uv (gestor de paquetes y entornos)
  • FFmpeg (para procesamiento de audio)
  • Rust (para algunas dependencias)

IMPORTANTE: Para la funcionalidad de conversión de audio a texto, se requieren dependencias adicionales como FFmpeg y Rust. Consulta nuestra guía de configuración de Whisper para instrucciones detalladas de instalación.

Para instrucciones detalladas sobre la instalación de Python 3.14+, consulta la guía de instalación de Python.

Instalar uv

curl -LsSf https://astral.sh/uv/install.sh | sh

uv instala Python 3.14 automáticamente si no lo tienes en el sistema.

Configuración rápida

# 1. Clonar el repositorio
git clone https://github.com/bypabloc/audio-to-text-ia.git
cd audio-to-text-ia

# 2. Sincronizar dependencias (uv crea el venv con Python 3.14 automaticamente)
uv sync --group dev

Eso es todo. uv lee pyproject.toml, resuelve uv.lock y crea .venv/ con Python 3.14.

Uso

Modos de uso

El CLI tiene dos modos:

  • Modo flags: pasás todos los argumentos por línea de comandos (ideal para scripts y repetir comandos).
  • Modo interactivo: si ejecutás cli.py sin argumentos, entra en un selector con questionary que te guía paso a paso (subcomando, tipo de archivo, navegación de archivos por carpetas, modelo, idioma, fechas).
# Modo interactivo (sin argumentos)
uv run python cli.py

# Ver todos los flags disponibles
uv run python cli.py --help

# Mostrar versión y salir
uv run python cli.py --version

Si prefieres no anteponer uv run, activá el venv con source .venv/bin/activate.

Ejemplos rápidos

# Generar resumen de un archivo de audio
uv run python cli.py --generate resumen --type_file audio --file ruta/al/archivo.mp3

# Generar subtítulos de un archivo de video
uv run python cli.py --generate subtitle --type_file video --file ruta/al/video.mp4

# Especificar idioma de origen para la transcripción
uv run python cli.py --generate resumen --type_file audio --file ruta/al/archivo.mp3 --source_language es

# Traducir audio a inglés en lugar de transcribir en idioma original
uv run python cli.py --generate subtitle --type_file audio --file ruta/al/archivo.mp3 --translate

# Usar modelo más preciso (más lento, requiere más RAM/VRAM)
uv run python cli.py --generate resumen --type_file video --file ruta/al/video.mp4 --model large

# Procesar un ZIP que contiene varios archivos
uv run python cli.py --generate resumen --type_file zip --file ruta/al/archivos.zip

# Procesar export ZIP de WhatsApp transcribiendo audios/videos referenciados
uv run python cli.py --generate zip_whatsapp_chat --type_file zip --file ruta/al/chat-whatsapp.zip

# Procesar export ZIP de WhatsApp filtrando por rango de fechas
uv run python cli.py --generate zip_whatsapp_chat --type_file zip --file ruta/al/chat-whatsapp.zip \
  --fecha-inicio 01/03/2026 --fecha-fin 31/03/2026

# Mostrar al final el comando equivalente para repetirlo (útil después del modo interactivo)
uv run python cli.py --generate resumen --type_file audio --file ruta/al/archivo.mp3 --show-command

# Ejecutar sin persistir la configuración en .audio_to_text_config.json
uv run python cli.py --generate resumen --type_file audio --file ruta/al/archivo.mp3 --no-save-config

Instalación como paquete

Para instalar la herramienta como un paquete y poder ejecutarla desde cualquier ubicación:

# Modo editable
uv pip install -e .

# O instalación global como herramienta
uv tool install .

# Usar el comando directamente
audio-to-text-ia --help

Comandos disponibles

El CLI soporta los siguientes flags. Si invocás cli.py sin flags, entra en modo interactivo. Los flags --generate, --type_file y --file son obligatorios fuera del modo interactivo.

--generate {resumen,subtitle,zip_whatsapp_chat}

Tipo de generación a realizar:

  • resumen: Genera un resumen extractivo del contenido transcrito.
  • subtitle: Genera subtítulos sincronizados a partir del audio/video.
  • zip_whatsapp_chat: Procesa un export ZIP de WhatsApp transcribiendo los audios/videos referenciados y reinyectando las transcripciones dentro del TXT del chat.

--type_file {audio,video,text,zip}

Tipo de archivo a procesar:

  • audio: Archivos de audio (mp3, wav, ogg, opus, etc.).
  • video: Archivos de video (mp4, avi, mov, etc.). Se extrae el audio con ffmpeg antes de transcribir.
  • text: Archivos de texto plano.
  • zip: Archivos comprimidos. Tiene dos rutas distintas según --generate:
    • Con resumen o subtitle: extrae todo y procesa cada archivo individualmente.
    • Con zip_whatsapp_chat: procesa el TXT del chat reinyectando las transcripciones de los audios/videos.

--file <path>

Ruta al archivo que se va a procesar. Acepta rutas relativas o absolutas.

--source_language <code>

Código ISO 639-1 del idioma de origen (es, en, fr, de, it, pt, ru, ja, zh, ...). Si no se especifica, Whisper detecta el idioma automáticamente. Especificarlo mejora velocidad y precisión.

--target_language <code>

Código del idioma de destino para la traducción. Whisper actualmente solo soporta traducción a en (inglés).

--translate

Flag booleano que cambia la tarea de Whisper de transcribe a translate. Por limitación del modelo, solo traduce a inglés. Se puede combinar con --source_language para indicarle el idioma de origen.

--model {tiny,tiny.en,base,base.en,small,small.en,medium,medium.en,large,turbo}

Modelo de Whisper a utilizar. Default: base. Las variantes con sufijo .en son solo inglés (más rápidas para inglés). Trade-off entre precisión, velocidad y consumo de RAM/VRAM:

Modelo Tamaño aprox. Velocidad Multilingüe
tiny ~1 GB VRAM Muy rápida
base ~1 GB VRAM Rápida (default)
small ~2 GB VRAM Media
medium ~5 GB VRAM Lenta
large ~10 GB VRAM Muy lenta
turbo ~6 GB VRAM ~8x más rápida que large

Las variantes .en (tiny.en, base.en, small.en, medium.en) están optimizadas solo para inglés.

--no-save-config

Por defecto el CLI guarda la última configuración usada en .audio_to_text_config.json en el directorio actual (modelo, archivo, idiomas, etc.) para que la próxima ejecución la sugiera. Este flag desactiva esa persistencia.

--show-command

Al finalizar la ejecución, imprime el comando completo equivalente para repetirla sin pasar por el modo interactivo. Útil cuando usás el modo interactivo y querés guardarte el comando.

--version

Imprime la versión instalada de audio-to-text-ia y sale.

--fecha-inicio DD/MM/YYYY / --fecha-fin DD/MM/YYYY

Solo aplica con --generate zip_whatsapp_chat. Filtra los mensajes del chat de WhatsApp por rango de fechas (inclusive en ambos extremos). Formato obligatorio DD/MM/YYYY. Si especificás solo una de las dos, se filtra desde/hasta esa fecha.

Desarrollo y pruebas

Estructura del proyecto

audio-to-text-ia/
├── commands/           # Comandos disponibles
├── config/             # Configuraciones
├── docs/               # Documentación detallada
├── exceptions/         # Excepciones personalizadas
├── factories/          # Factories para tipos de archivos
├── services/           # Servicios (Whisper, WhatsApp, etc.)
├── tests/              # Pruebas unitarias
├── utils/              # Utilidades (feature flags, logger, etc.)
├── cli.py              # Punto de entrada principal
├── pyproject.toml      # Metadata, dependencias y config de tests
└── uv.lock             # Lockfile de uv

Ejecución de pruebas

# Ejecutar todas las pruebas (sin coverage, rapido)
uv run pytest --no-cov

# Ejecutar pruebas con cobertura (apunta a las carpetas reales)
uv run pytest

Configuración de feature flags

Las características del CLI pueden habilitarse o deshabilitarse mediante feature flags:

from commands.generate import Generate
from factories.type_files import TypeFiles
from utils.feature_flags import FeatureFlags

# Obtener instancia de FeatureFlags
feature_flags = FeatureFlags()

# Deshabilitar un tipo de generación específico
feature_flags.disable("Generate.resumen")

# Deshabilitar un tipo de archivo específico
feature_flags.disable("TypeFiles.audio")

# Deshabilitar completamente un comando o factory
generate_command = Generate()
generate_command.is_available = False

Construcción del paquete

# Construir distribuciones (sdist + wheel)
uv build

# Esto generará archivos en la carpeta dist/

Documentación adicional

Licencia

MIT

Autor

Pablo Contreras (pacg1991@gmail.com)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

audio_to_text_ia-0.1.0.tar.gz (43.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

audio_to_text_ia-0.1.0-py3-none-any.whl (53.7 kB view details)

Uploaded Python 3

File details

Details for the file audio_to_text_ia-0.1.0.tar.gz.

File metadata

  • Download URL: audio_to_text_ia-0.1.0.tar.gz
  • Upload date:
  • Size: 43.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for audio_to_text_ia-0.1.0.tar.gz
Algorithm Hash digest
SHA256 f42e76c297e179b7ac95ac50acadcfd698a3f2633819b8147d248aa6f819cd3a
MD5 3530b55632599bb2b8781634d6be7058
BLAKE2b-256 7c99cdd2de31eca3af2e04d671c5d9dd6ec08ae9ebefd01bb7fac0e4c5c01d9a

See more details on using hashes here.

File details

Details for the file audio_to_text_ia-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: audio_to_text_ia-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 53.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for audio_to_text_ia-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 610829991eb046dbb13783fce707dcae04c44304ff99c29cb1af2af09707786a
MD5 15f5cfa40734b915963fc72ef50bcfc4
BLAKE2b-256 fe50600cbb7cea86f487bd02514a90deeefb5bdb198270f1225a7c7f49affef6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page