tape-video
SQLite para videos largos.
tape-video convierte un video largo en un índice temporal chico, local y consultable — y después te deja cortar y comprimir solo lo activo.
El paquete en PyPI/GitHub es tape-video; el comando en la terminal es tape.
video.mp4 → video.mp4.tape → SQL / clips / digest.mp4
No es un editor. No es una API en la nube. Es una base de datos temporal embebida al lado de tu archivo.
Instalación
pip install tape-video
brew install ffmpeg # requerido en el PATH
tape doctor
Desde el repo (desarrollo):
git clone https://github.com/EmanuelCorreaAR/tape-video.git
cd tape-video
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
tape doctor
Uso rápido
Un solo comando:
tape digest lecture.mp4
# genera lecture_digest.mp4 (+ .txt + .json) junto al video
O con salida explícita:
tape digest lecture.mp4 --out digest.mp4
Eso indexa (si hace falta), detecta tramos activos y genera:
| Archivo | Qué es |
|---|---|
lecture.mp4.tape |
Índice SQLite (línea de tiempo) |
lecture_digest.mp4 |
Video solo con tramos activos |
lecture_digest.mp4.txt |
Resumen legible (criterio + lista de tramos) |
lecture_digest.mp4.json |
Misma info en JSON |
En la terminal vas a ver una timeline:
Timeline: |██··████·█··███····█|
█ activo · quieto/silencio
Y un resumen tipo:
Digest listo
1h 32m → 18m (20% del original)
Paso a paso
tape index lecture.mp4
tape info lecture.mp4
tape detect lecture.mp4
tape compress lecture.mp4 --out digest.mp4
# consultar el índice
tape sql lecture.mp4 "SELECT t0, t1, motion, audio_rms FROM timeline_bins WHERE motion > 0.3 LIMIT 20"
Ajustar sensibilidad:
tape digest video.mp4 --out digest.mp4 --motion 0.08 --audio 0.12
Comandos
| Comando | Qué hace |
|---|---|
tape analyze VIDEO |
Estima el recorte sin generar video |
tape doctor |
Chequea ffmpeg y el entorno |
tape digest VIDEO --out digest.mp4 |
Todo en uno: indexar + comprimir |
tape index VIDEO |
Arma VIDEO.tape (movimiento + audio) |
tape info TARGET |
Duración, muestras, tramos y timeline |
tape detect TARGET |
Marca tramos activity |
tape segments TARGET |
Lista tramos guardados |
tape clip TARGET --out clips/ |
Exporta cada tramo como .mp4 |
tape compress TARGET --out digest.mp4 |
Digest + .txt + .json |
tape sql TARGET "SELECT …" |
SQL sobre el índice |
TARGET puede ser el video o el archivo .tape.
Cómo decide qué es “activo”
Tape construye una línea de tiempo del video con varias señales:
- Movimiento en la zona central del frame (ignora bordes)
- Energía de audio suavizada en el tiempo
- Picos de audio (impactos, voz, cambios bruscos)
Un tramo se marca activo cuando esas señales cruzan umbrales.
Si con la configuración fija queda demasiado activo, el modo adaptativo ajusta los umbrales al percentil de intensidad.
Eso alcanza para condensar clases, grabaciones de pantalla, CCTV y material similar.
Detectores más específicos (p. ej. rallies deportivos) se pueden sumar encima del mismo índice.
Schema (v0)
El archivo .tape es SQLite:
media— path, duración, tamaño, hash parcialtimeline_bins— grilla fija (motion,audio_rms,audio_onset,luma)segments— intervalos derivados (kind,start_s,end_s,score,source)meta—tape_version, parámetros
sqlite3 lecture.mp4.tape ".schema"
Principios de diseño
- Local-first — el indexado corre en tu máquina
- Proxy ≠ original — entendés barato, cortás del source
- SQL es la interfaz — el índice es inspeccionable y portable
- Plugins después — el core guarda señales; el significado se enchufa
- Barato por defecto — CPU, ~1 fps de sampling, sin GPU
Non-goals (por ahora)
- UI tipo NLE / timeline completa
- Pipeline de upload a la nube
- Modelos de ML obligatorios
- Reemplazar ffmpeg
Estado
v0.1.5 en PyPI — útil para experimentos y demos.
El schema puede evolucionar; tape_version vive en meta. Ver CHANGELOG.md.
Apoyar el proyecto
Si tape-video te sirve, podés invitarme un cafecito: cafecito.app/emacorreadev
License
Apache License 2.0
Release files for tape-video 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tape_video-0.1.5.tar.gz | 27.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tape_video-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 55.8 kB
Release files / tape_video-0.1.5.tar.gz
| Download URL | tape_video-0.1.5.tar.gz |
|---|---|
| Size | 27.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f4bb0cb70b3c602fb19ca2cc952c55d1871520aa11ca67319cbc0283c9c6e904
|
|
BLAKE2b-256 checksum How to use checksums |
2324cf44c0a8e7d4f8e9c16d30331896a475e87e3bc415e646db3563cef28ea9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|
Release files / tape_video-0.1.5-py3-none-any.whl
| Download URL | tape_video-0.1.5-py3-none-any.whl |
|---|---|
| Size | 28.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b150f67bfd8f459b87de3478d1c7d4bd9347537488f94b8aca53781448640ec1
|
|
BLAKE2b-256 checksum How to use checksums |
dc1873702dba0e7ee2e60d6b933f815483bb014e82cd5ba5b38b3222faf3423d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|