mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
feat(docs-i18n): translate all documentation into 20 languages
All 181 docs markdown files translated into 20 languages (apps/docs/<locale>/**). Companion to the i18n code PR; admin-merged because the file count exceeds GitHub's per-PR CI trigger limit. Validated by pnpm i18n:check (all surfaces, 0 stale/missing) and a clean all-locale docs build.
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
---
|
||||
description: "Añade barras de color sólido para ajustarse a una relación de aspecto objetivo."
|
||||
i18n_source_hash: b8e17dffc341
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 8cec883253e1
|
||||
---
|
||||
|
||||
# Relleno de aspecto {#aspect-pad}
|
||||
|
||||
Añade barras de letterbox o pillarbox de color sólido para ajustar un vídeo a una relación de aspecto objetivo sin recortarlo.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/aspect-pad`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un campo JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| target | string | No | `"9:16"` | Relación de aspecto objetivo: `16:9`, `9:16`, `1:1`, `4:3`, `3:4` |
|
||||
| color | string | No | `"#000000"` | Color hexadecimal para las barras de relleno (p. ej. `"#000000"` para negro) |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/aspect-pad \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"target": "1:1", "color": "#ffffff"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
|
||||
"originalSize": 12500000,
|
||||
"processedSize": 13200000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Si el vídeo ya coincide con la relación de aspecto objetivo, el archivo se devuelve sin cambios.
|
||||
- Usa `9:16` para formatos verticales/de retrato de redes sociales (TikTok, Reels, Shorts).
|
||||
- Para un relleno difuminado en lugar de color sólido, usa la herramienta Blur Pad.
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
description: "Genera archivos de subtítulos a partir de las pistas de audio de un vídeo mediante IA."
|
||||
i18n_source_hash: 35b1e78501ad
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: b9f08b6dd120
|
||||
---
|
||||
|
||||
# Subtítulos automáticos {#auto-subtitles}
|
||||
|
||||
Genera archivos de subtítulos a partir de la pista de audio de un vídeo mediante reconocimiento de voz con inteligencia artificial (faster-whisper). Admite la detección automática y 10 idiomas explícitos.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/auto-subtitles`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un campo JSON `settings`. Este es un endpoint asíncrono: devuelve `202 Accepted` de inmediato y el progreso se transmite mediante SSE en `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| language | string | No | `"auto"` | Idioma del habla: `auto`, `en`, `de`, `fr`, `es`, `zh`, `ja`, `ko`, `id`, `th`, `vi` |
|
||||
| format | string | No | `"srt"` | Formato de subtítulos de salida: `srt`, `vtt` |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/auto-subtitles \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"language": "en", "format": "srt"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Esta es una herramienta de IA que requiere que el paquete de funciones de **transcripción** esté instalado. Si el paquete no está instalado, la API devuelve `501 Feature Not Installed` con instrucciones para instalarlo mediante la interfaz de administración.
|
||||
- La opción de idioma `auto` usa la detección de idioma integrada de whisper. Especificar el idioma de forma explícita mejora la precisión y la velocidad.
|
||||
- SRT es el formato de subtítulos más ampliamente compatible. VTT (WebVTT) es el estándar para los reproductores de vídeo web.
|
||||
- Las actualizaciones de progreso están disponibles mediante SSE en `GET /api/v1/jobs/{jobId}/progress` hasta que el trabajo se complete.
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
description: "Rellena las barras con una copia difuminada del vídeo."
|
||||
i18n_source_hash: 0c72aaefc6de
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 2f7c0cc38941
|
||||
---
|
||||
|
||||
# Relleno difuminado {#blur-pad}
|
||||
|
||||
Ajusta un vídeo a una relación de aspecto objetivo rellenando el área de relleno con una copia difuminada y escalada del vídeo en lugar de barras de color sólido.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/blur-pad`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un campo JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| target | string | No | `"16:9"` | Relación de aspecto objetivo: `16:9`, `9:16`, `1:1`, `4:3`, `3:4` |
|
||||
| blur | number | No | `20` | Sigma del desenfoque gaussiano para el fondo (2-50) |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/blur-pad \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"target": "16:9", "blur": 30}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
|
||||
"originalSize": 12500000,
|
||||
"processedSize": 14100000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Los valores de desenfoque más altos producen un fondo más suave y abstracto. Los valores más bajos mantienen más detalle visible.
|
||||
- Si el vídeo ya coincide con la relación de aspecto objetivo, el archivo se devuelve sin cambios.
|
||||
- Para un relleno de color sólido, usa la herramienta Aspect Pad en su lugar.
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
description: "Renderiza subtítulos de forma permanente sobre los fotogramas del vídeo."
|
||||
i18n_source_hash: 2d3111589db0
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 68b34abe14bd
|
||||
---
|
||||
|
||||
# Burn Subtitles {#burn-subtitles}
|
||||
|
||||
Renderiza de forma permanente (incrusta) subtítulos de un archivo SRT, VTT o ASS sobre cada fotograma de un vídeo.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/burn-subtitles`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un archivo de subtítulos. Este es un endpoint asíncrono: devuelve `202 Accepted` de inmediato y el progreso se transmite vía SSE en `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| fontSize | integer | No | `24` | Tamaño de fuente del subtítulo en píxeles (8-72) |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/burn-subtitles \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F "file=@subtitles.srt" \
|
||||
-F 'settings={"fontSize": 28}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Sube dos archivos: el primero debe ser un vídeo y el segundo un archivo de subtítulos (.srt, .vtt o .ass).
|
||||
- Los subtítulos incrustados forman parte permanente del vídeo y el espectador no puede desactivarlos. Para subtítulos que se puedan activar y desactivar, usa la herramienta Embed Subtitles en su lugar.
|
||||
- Las actualizaciones de progreso están disponibles vía SSE en `GET /api/v1/jobs/{jobId}/progress` hasta que el trabajo se completa.
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
description: "Cambia la velocidad de fotogramas de un vídeo."
|
||||
i18n_source_hash: 2bffbd04a1cb
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 6f43f6bea2ab
|
||||
---
|
||||
|
||||
# Change FPS {#change-fps}
|
||||
|
||||
Cambia la velocidad de fotogramas de un vídeo a un valor objetivo entre 1 y 120 fps.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/change-fps`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un campo JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| fps | number | No | `30` | Velocidad de fotogramas objetivo (1-120) |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/change-fps \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"fps": 24}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
|
||||
"originalSize": 12500000,
|
||||
"processedSize": 10200000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Reducir la velocidad de fotogramas descarta fotogramas y reduce el tamaño del archivo. Aumentarla duplica fotogramas para rellenar el hueco, pero no añade detalle real de movimiento.
|
||||
- Valores objetivo comunes: 24 (cine), 30 (web/emisión), 60 (reproducción fluida).
|
||||
- La pista de audio se conserva a su frecuencia de muestreo original.
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
description: "Reduce el tamaño de archivo del vídeo con control de calidad."
|
||||
i18n_source_hash: 9cc1f1acf74e
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: b6eaae204589
|
||||
---
|
||||
|
||||
# Compress Video {#compress-video}
|
||||
|
||||
Reduce el tamaño de archivo del vídeo usando una intensidad de compresión configurable y un escalado de resolución opcional.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/compress-video`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un campo JSON `settings`. Este es un endpoint asíncrono: devuelve `202 Accepted` de inmediato y el progreso se transmite vía SSE en `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| quality | string | No | `"balanced"` | Intensidad de compresión: `light`, `balanced`, `strong` |
|
||||
| resolution | string | No | `"original"` | Resolución de salida: `original`, `1080p`, `720p`, `480p` |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/compress-video \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"quality": "strong", "resolution": "720p"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- El preajuste `light` conserva una calidad casi original. El preajuste `strong` reduce el tamaño de archivo de forma agresiva a costa de la fidelidad visual.
|
||||
- Reducir la resolución (por ejemplo, de 4K a 720p) se combina con la compresión para lograr una reducción de tamaño considerable.
|
||||
- Las actualizaciones de progreso están disponibles vía SSE en `GET /api/v1/jobs/{jobId}/progress` hasta que el trabajo se completa.
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
description: "Convierte vídeos entre MP4, MOV, WebM, AVI y MKV."
|
||||
i18n_source_hash: 8f9e6418b1c6
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 9f306a50ad23
|
||||
---
|
||||
|
||||
# Convert Video {#convert-video}
|
||||
|
||||
Convierte vídeos entre los formatos MP4, MOV, WebM, AVI y MKV con preajustes de calidad configurables.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/convert-video`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un campo JSON `settings`. Este es un endpoint asíncrono: devuelve `202 Accepted` de inmediato y el progreso se transmite vía SSE en `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| format | string | No | `"mp4"` | Formato de salida: `mp4`, `mov`, `webm`, `avi`, `mkv` |
|
||||
| quality | string | No | `"balanced"` | Preajuste de calidad: `high`, `balanced`, `small` |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/convert-video \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"format": "webm", "quality": "balanced"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- El preajuste de calidad `high` produce la mejor fidelidad visual, pero archivos más grandes. El preajuste `small` comprime de forma agresiva para lograr el tamaño de archivo mínimo.
|
||||
- La salida WebM usa codificación VP9. MP4 y MOV usan H.264. AVI y MKV están disponibles para flujos de trabajo heredados o de archivado.
|
||||
- Las actualizaciones de progreso están disponibles vía SSE en `GET /api/v1/jobs/{jobId}/progress` hasta que el trabajo se completa.
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
description: "Recorta una región de un vídeo."
|
||||
i18n_source_hash: fab11f71a202
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 0219539edb04
|
||||
---
|
||||
|
||||
# Crop Video {#crop-video}
|
||||
|
||||
Recorta una región rectangular de un vídeo especificando el tamaño y la posición de la región.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/crop-video`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un campo JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| width | integer | Yes | - | Ancho de la región de recorte en píxeles (mínimo 16) |
|
||||
| height | integer | Yes | - | Alto de la región de recorte en píxeles (mínimo 16) |
|
||||
| x | integer | No | `0` | Desplazamiento horizontal desde la esquina superior izquierda |
|
||||
| y | integer | No | `0` | Desplazamiento vertical desde la esquina superior izquierda |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/crop-video \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"width": 640, "height": 480, "x": 100, "y": 50}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
|
||||
"originalSize": 12500000,
|
||||
"processedSize": 5200000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- La región de recorte debe caber dentro de las dimensiones del vídeo. Si `x + width` o `y + height` supera el tamaño de origen, la petición devuelve un error 400.
|
||||
- El tamaño mínimo de recorte es de 16x16 píxeles.
|
||||
- Las dimensiones se redondean a números pares, tal como exigen la mayoría de los códecs de vídeo.
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
description: "Multiplexa una pista de subtítulos en el contenedor del vídeo."
|
||||
i18n_source_hash: be272730fff5
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: f1744ae8e1c6
|
||||
---
|
||||
|
||||
# Embed Subtitles {#embed-subtitles}
|
||||
|
||||
Multiplexa un archivo de subtítulos en el contenedor del vídeo como una pista de subtítulos blanda que el espectador puede activar o desactivar.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/embed-subtitles`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un archivo de subtítulos, además de un campo JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| language | string | No | `"eng"` | Código de idioma ISO 639-2/B (3 letras minúsculas, por ejemplo `"eng"`, `"fra"`, `"deu"`) |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/embed-subtitles \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F "file=@subtitles.srt" \
|
||||
-F 'settings={"language": "fra"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
|
||||
"originalSize": 12500000,
|
||||
"processedSize": 12520000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Sube dos archivos: el primero debe ser un vídeo y el segundo un archivo de subtítulos (.srt, .vtt o .ass).
|
||||
- Los subtítulos incrustados (blandos) pueden activarse y desactivarse por el espectador en su reproductor multimedia. Para subtítulos permanentemente visibles, usa la herramienta Burn Subtitles en su lugar.
|
||||
- El código de idioma se almacena como metadato en el contenedor y ayuda a los reproductores multimedia a etiquetar la pista de subtítulos.
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
description: "Extrae la pista de audio de un vídeo."
|
||||
i18n_source_hash: f5b8330a5f89
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 03048201c823
|
||||
---
|
||||
|
||||
# Extract Audio {#extract-audio}
|
||||
|
||||
Extrae la pista de audio de un archivo de vídeo y la guarda como MP3, WAV, M4A u OGG.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/extract-audio`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un campo JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| format | string | No | `"mp3"` | Formato de audio de salida: `mp3`, `wav`, `m4a`, `ogg` |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/extract-audio \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"format": "mp3"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp3",
|
||||
"originalSize": 12500000,
|
||||
"processedSize": 3200000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Si el vídeo no tiene pista de audio, la petición devuelve un error 400.
|
||||
- MP3 tiene pérdida pero es ampliamente compatible. WAV es sin pérdida pero grande. M4A (AAC) ofrece un buen equilibrio entre calidad y tamaño. OGG está disponible para flujos de trabajo con códecs abiertos.
|
||||
- Cuando el audio de origen ya es AAC y el formato de salida es M4A, la pista de audio se copia sin recodificar.
|
||||
@@ -0,0 +1,45 @@
|
||||
---
|
||||
description: "Extrae la pista de subtítulos de un vídeo como un archivo SRT."
|
||||
i18n_source_hash: 48db860f6676
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 53eb1c364d6e
|
||||
---
|
||||
|
||||
# Extract Subtitles {#extract-subtitles}
|
||||
|
||||
Extrae la pista de subtítulos incrustada de un contenedor de vídeo y la descarga como un archivo SRT.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/extract-subtitles`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo. Esta herramienta no tiene ajustes configurables.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
Esta herramienta no tiene parámetros. Extrae la primera pista de subtítulos que encuentra en el contenedor de vídeo.
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/extract-subtitles \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4"
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.srt",
|
||||
"originalSize": 12500000,
|
||||
"processedSize": 4500
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- El vídeo debe contener una pista de subtítulos incrustada. Si no se encuentra ninguna pista de subtítulos, la petición devuelve un error 400.
|
||||
- Si el vídeo tiene varias pistas de subtítulos, se extrae la primera.
|
||||
- El formato de salida es SRT independientemente del formato de subtítulos original en el contenedor.
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
description: "Convierte un GIF animado en un vídeo MP4, WebM o MOV."
|
||||
i18n_source_hash: c3737b31146d
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 48f8638bf4f1
|
||||
---
|
||||
|
||||
# GIF to Video {#gif-to-video}
|
||||
|
||||
Convierte un GIF animado en un archivo de vídeo compacto MP4, WebM o MOV.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/gif-to-video`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo GIF y un campo JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| format | string | No | `"mp4"` | Formato de salida: `mp4`, `webm`, `mov` |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/gif-to-video \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@animation.gif" \
|
||||
-F 'settings={"format": "mp4"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/animation.mp4",
|
||||
"originalSize": 8500000,
|
||||
"processedSize": 950000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Convertir un GIF en vídeo normalmente reduce el tamaño de archivo entre un 80 y un 90 % manteniendo la misma calidad visual.
|
||||
- Solo se aceptan archivos GIF animados. Las imágenes estáticas deben usar la herramienta Convert de imagen.
|
||||
- MP4 y MOV usan codificación H.264, WebM usa VP9.
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
description: "Convierte un conjunto de imágenes en un vídeo de presentación."
|
||||
i18n_source_hash: 2c6f183feb6d
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 54303c23defe
|
||||
---
|
||||
|
||||
# Images to Video {#images-to-video}
|
||||
|
||||
Convierte un conjunto de imágenes en un vídeo de presentación con duración por imagen, resolución y velocidad de fotogramas configurables.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/images-to-video`
|
||||
|
||||
Acepta datos de formulario multipart con dos o más archivos de imagen y un campo JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| secondsPerImage | number | No | `2` | Duración de visualización por imagen en segundos (0.5-10) |
|
||||
| resolution | string | No | `"720p"` | Resolución de salida: `1080p`, `720p`, `square` |
|
||||
| fps | integer | No | `30` | Velocidad de fotogramas de salida (10-60) |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/images-to-video \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@slide1.jpg" \
|
||||
-F "file=@slide2.jpg" \
|
||||
-F "file=@slide3.jpg" \
|
||||
-F "file=@slide4.jpg" \
|
||||
-F 'settings={"secondsPerImage": 3, "resolution": "1080p"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/slideshow.mp4",
|
||||
"originalSize": 3500000,
|
||||
"processedSize": 1200000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Acepta de 2 a 60 archivos de imagen por petición. Las imágenes aparecen en el vídeo en el orden de subida.
|
||||
- Las imágenes se redimensionan y se rellenan para ajustarse a la resolución objetivo conservando la relación de aspecto.
|
||||
- La opción de resolución `square` produce un vídeo de 1080x1080, útil para redes sociales.
|
||||
- El formato de salida siempre es MP4 (H.264).
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
description: "Une varios clips de vídeo en un solo archivo."
|
||||
i18n_source_hash: 90463dfbb580
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: aa06dee1a9bd
|
||||
---
|
||||
|
||||
# Merge Videos {#merge-videos}
|
||||
|
||||
Une varios clips de vídeo en un único archivo MP4. Todas las entradas se normalizan a la resolución del primer vídeo y a 30 fps.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/merge-videos`
|
||||
|
||||
Acepta datos de formulario multipart con dos o más archivos de vídeo. Este es un endpoint asíncrono: devuelve `202 Accepted` de inmediato y el progreso se transmite vía SSE en `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
Esta herramienta no tiene parámetros de configuración. Sube de 2 a 10 archivos de vídeo como varias partes `file`.
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/merge-videos \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@intro.mp4" \
|
||||
-F "file=@main.mp4" \
|
||||
-F "file=@outro.mp4"
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Los clips se concatenan en el orden en que se suben.
|
||||
- Todos los clips se recodifican para coincidir con la resolución, la velocidad de fotogramas (30 fps) y el códec (H.264) del primer clip. Las entradas que no coinciden se normalizan automáticamente.
|
||||
- Acepta de 2 a 10 archivos de vídeo por petición.
|
||||
- Las actualizaciones de progreso están disponibles vía SSE en `GET /api/v1/jobs/{jobId}/progress` hasta que el trabajo se completa.
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
description: "Elimina la pista de audio de un vídeo."
|
||||
i18n_source_hash: 9a0c60bbcaa3
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: e52e6a0e7fa1
|
||||
---
|
||||
|
||||
# Mute Video {#mute-video}
|
||||
|
||||
Elimina la pista de audio de un vídeo, dejando solo el flujo visual.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/mute-video`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo. Esta herramienta no tiene ajustes configurables.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
Esta herramienta no tiene parámetros. Elimina la pista de audio del vídeo subido.
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/mute-video \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4"
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
|
||||
"originalSize": 12500000,
|
||||
"processedSize": 8900000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- El flujo de vídeo se copia sin recodificar, por lo que no hay pérdida de calidad.
|
||||
- Si el vídeo de entrada no tiene pista de audio, el archivo se devuelve sin cambios.
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
description: "Sustituye la pista de audio de un vídeo por otro archivo."
|
||||
i18n_source_hash: fabc2a953103
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 0f94839041bf
|
||||
---
|
||||
|
||||
# Replace Audio {#replace-audio}
|
||||
|
||||
Sustituye la pista de audio de un vídeo por un archivo de audio. Sube tanto un vídeo como un archivo de audio.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/replace-audio`
|
||||
|
||||
Acepta datos de formulario multipart con exactamente dos archivos: un archivo de vídeo seguido de un archivo de audio.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
Esta herramienta no tiene parámetros de configuración. Sube un archivo de vídeo y un archivo de audio como dos partes `file`.
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/replace-audio \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F "file=@voiceover.mp3"
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
|
||||
"originalSize": 12500000,
|
||||
"processedSize": 13100000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Deben subirse exactamente dos archivos: el primero debe ser un vídeo y el segundo un archivo de audio.
|
||||
- Si el archivo de audio es más largo que el vídeo, se recorta para ajustarse a la duración del vídeo. Si es más corto, el vídeo restante se reproduce en silencio.
|
||||
- El flujo de vídeo se copia sin recodificar, por lo que no hay pérdida de calidad de vídeo.
|
||||
@@ -0,0 +1,61 @@
|
||||
---
|
||||
description: "Escala un vídeo a una nueva resolución o tamaño preajustado."
|
||||
i18n_source_hash: bb1f67871fea
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 263be96e85c6
|
||||
---
|
||||
|
||||
# Resize Video {#resize-video}
|
||||
|
||||
Escala un vídeo a una nueva resolución usando dimensiones de píxeles personalizadas o un preajuste estándar.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/resize-video`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un campo JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| width | integer | No | - | Ancho objetivo en píxeles (16-7680) |
|
||||
| height | integer | No | - | Alto objetivo en píxeles (16-4320) |
|
||||
| preset | string | No | `"custom"` | Preajuste de resolución: `custom`, `2160p`, `1440p`, `1080p`, `720p`, `480p`, `360p` |
|
||||
|
||||
Cuando `preset` es `"custom"`, se debe proporcionar al menos uno de `width` o `height`. La otra dimensión se escala proporcionalmente.
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/resize-video \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"preset": "720p"}'
|
||||
```
|
||||
|
||||
Redimensionar a dimensiones personalizadas:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/resize-video \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"width": 1280, "height": 720}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
|
||||
"originalSize": 25000000,
|
||||
"processedSize": 8500000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Los valores de preajuste se corresponden con alturas estándar (por ejemplo, `720p` = 1280x720, `1080p` = 1920x1080). El ancho se escala proporcionalmente a partir de la relación de aspecto de origen.
|
||||
- Las dimensiones se redondean a números pares, tal como exigen la mayoría de los códecs de vídeo.
|
||||
- La resolución máxima admitida es 7680x4320 (8K UHD).
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
description: "Reproduce un clip de vídeo al revés."
|
||||
i18n_source_hash: 98226f4e092d
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: c603b574e120
|
||||
---
|
||||
|
||||
# Reverse Video {#reverse-video}
|
||||
|
||||
Reproduce un clip de vídeo al revés. La pista de audio también se invierte.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/reverse-video`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo. Esta herramienta no tiene ajustes configurables.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
Esta herramienta no tiene parámetros. Invierte el vídeo completo.
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/reverse-video \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4"
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
|
||||
"originalSize": 12500000,
|
||||
"processedSize": 12600000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Limitado a clips de hasta 5 minutos de duración. Los vídeos más largos se rechazan con un error 400.
|
||||
- Se invierten tanto la pista de vídeo como la de audio. Para invertir el vídeo sin audio, siléncialo primero.
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
description: "Rota o voltea un vídeo."
|
||||
i18n_source_hash: cf9620ca62c7
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 3cfde0f904f6
|
||||
---
|
||||
|
||||
# Rotate Video {#rotate-video}
|
||||
|
||||
Rota un vídeo 90, 180 o 270 grados, o voltéalo horizontal o verticalmente.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/rotate-video`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un campo JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| transform | string | Yes | - | Transformación a aplicar: `cw90`, `ccw90`, `180`, `hflip`, `vflip` |
|
||||
|
||||
### Transform Values {#transform-values}
|
||||
|
||||
- **cw90** - Rotar 90 grados en sentido horario
|
||||
- **ccw90** - Rotar 90 grados en sentido antihorario
|
||||
- **180** - Rotar 180 grados
|
||||
- **hflip** - Voltear horizontalmente (espejo)
|
||||
- **vflip** - Voltear verticalmente
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/rotate-video \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"transform": "cw90"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
|
||||
"originalSize": 12500000,
|
||||
"processedSize": 12400000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Las rotaciones de 90 o 270 grados intercambian el ancho y el alto del vídeo.
|
||||
- Las operaciones de volteo (hflip, vflip) no cambian las dimensiones del vídeo.
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
description: "Reduce el temblor de la cámara con estabilización de dos pasadas."
|
||||
i18n_source_hash: ec908e91a752
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 18bcf6accb55
|
||||
---
|
||||
|
||||
# Stabilize Video {#stabilize-video}
|
||||
|
||||
Reduce el temblor de la cámara en grabaciones a mano usando la estabilización vidstab de dos pasadas de FFmpeg.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/stabilize-video`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un campo JSON `settings`. Este es un endpoint asíncrono: devuelve `202 Accepted` de inmediato y el progreso se transmite vía SSE en `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| smoothing | integer | No | `15` | Tamaño de la ventana de suavizado en fotogramas (5-60). Los valores más altos producen un movimiento más suave |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/stabilize-video \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"smoothing": 30}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- La estabilización es un proceso de dos pasadas: la primera pasada analiza el movimiento de la cámara y la segunda aplica la corrección. Esto tarda aproximadamente el doble que las herramientas de una sola pasada.
|
||||
- Los valores de suavizado más altos eliminan más temblor, pero pueden introducir un ligero recorte por zoom en los bordes.
|
||||
- Las actualizaciones de progreso están disponibles vía SSE en `GET /api/v1/jobs/{jobId}/progress` hasta que el trabajo se completa.
|
||||
@@ -0,0 +1,50 @@
|
||||
---
|
||||
description: "Extrae un clip de un vídeo especificando los tiempos de inicio y fin."
|
||||
i18n_source_hash: c84481641979
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: a6ed8f42acad
|
||||
---
|
||||
|
||||
# Trim Video {#trim-video}
|
||||
|
||||
Extrae un clip de un vídeo especificando los tiempos de inicio y fin en segundos, con una opción de cortes exactos por fotograma.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/trim-video`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un campo JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| startS | number | No | `0` | Tiempo de inicio en segundos (debe ser >= 0) |
|
||||
| endS | number | Yes | - | Tiempo de fin en segundos (debe ser posterior a startS) |
|
||||
| precise | boolean | No | `false` | Recodificar para cortes exactos por fotograma en lugar de la búsqueda por fotograma clave |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/trim-video \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"startS": 5, "endS": 30, "precise": true}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
|
||||
"originalSize": 12500000,
|
||||
"processedSize": 4200000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Cuando `precise` es `false` (el valor predeterminado), la herramienta usa la búsqueda por fotograma clave, que es rápida pero puede comenzar unos fotogramas antes del tiempo solicitado.
|
||||
- Establecer `precise` en `true` recodifica el segmento para límites de fotograma exactos, pero tarda más.
|
||||
- El valor `endS` debe ser mayor que `startS`.
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
description: "Ajusta el brillo, el contraste, la saturación y la gamma de un vídeo."
|
||||
i18n_source_hash: 40483b79d44b
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: a1440b59a23a
|
||||
---
|
||||
|
||||
# Video Color {#video-color}
|
||||
|
||||
Ajusta el brillo, el contraste, la saturación y la corrección de gamma de un vídeo.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-color`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un campo JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| brightness | number | No | `0` | Ajuste de brillo (-1 a 1) |
|
||||
| contrast | number | No | `1` | Multiplicador de contraste (0-4) |
|
||||
| saturation | number | No | `1` | Multiplicador de saturación (0-3). Ponlo en 0 para escala de grises |
|
||||
| gamma | number | No | `1` | Corrección de gamma (0.1-10) |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/video-color \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"brightness": 0.1, "contrast": 1.2, "saturation": 1.5}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
|
||||
"originalSize": 12500000,
|
||||
"processedSize": 12300000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Todos los valores en sus predeterminados (brillo 0, contraste 1, saturación 1, gamma 1) no producen ningún cambio.
|
||||
- Establecer la saturación en `0` convierte el vídeo a escala de grises.
|
||||
- Los valores de gamma por debajo de 1 aclaran las sombras, mientras que los valores por encima de 1 las oscurecen.
|
||||
@@ -0,0 +1,45 @@
|
||||
---
|
||||
description: "Normaliza el volumen de audio del vídeo al estándar de emisión."
|
||||
i18n_source_hash: 078f1e819c9a
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 17d9fefa34bc
|
||||
---
|
||||
|
||||
# Normalize Audio {#normalize-audio}
|
||||
|
||||
Normaliza el volumen de audio del vídeo al estándar de sonoridad de emisión EBU R128.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-loudnorm`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo. Esta herramienta no tiene ajustes configurables.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
Esta herramienta no tiene parámetros. Aplica la normalización de sonoridad EBU R128 a la pista de audio.
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/video-loudnorm \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4"
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
|
||||
"originalSize": 12500000,
|
||||
"processedSize": 12500000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Usa el filtro `loudnorm` de FFmpeg dirigido a una sonoridad integrada de -16 LUFS con un pico verdadero de -1.5 dBTP y un rango de sonoridad de 11 LU (estándar de emisión EBU R128).
|
||||
- La frecuencia de muestreo del audio de origen se conserva en la salida.
|
||||
- Si el vídeo no tiene pista de audio, la petición devuelve un error 400.
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
description: "Elimina los metadatos de un vídeo e informa de lo que se encontró."
|
||||
i18n_source_hash: 69621bfb98ca
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 494ab59d19a6
|
||||
---
|
||||
|
||||
# Clean Video Metadata {#clean-video-metadata}
|
||||
|
||||
Elimina los metadatos (fecha de creación, coordenadas GPS, modelo de cámara, etiquetas de software, etc.) de un vídeo e informa de lo que se eliminó.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-metadata`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo. Esta herramienta no tiene ajustes configurables.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
Esta herramienta no tiene parámetros. Elimina todos los metadatos del contenedor de vídeo.
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/video-metadata \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4"
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip_clean.mp4",
|
||||
"originalSize": 12500000,
|
||||
"processedSize": 12480000,
|
||||
"metadata": {
|
||||
"container": "mov,mp4,m4a,3gp,3g2,mj2",
|
||||
"durationS": 42.5,
|
||||
"bitrateKbps": 2350,
|
||||
"streams": [
|
||||
{ "type": "video", "codec": "h264", "width": 1920, "height": 1080 },
|
||||
{ "type": "audio", "codec": "aac", "sampleRate": 48000 }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Los metadatos eliminados incluyen marcas de tiempo de creación, datos de GPS/ubicación, información de cámara/dispositivo y etiquetas de software.
|
||||
- Los flujos de vídeo y audio se copian sin recodificar, por lo que no hay pérdida de calidad.
|
||||
- Útil para la privacidad antes de compartir vídeos públicamente.
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
description: "Acelera o ralentiza un vídeo."
|
||||
i18n_source_hash: 98dfc75c0507
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 9455e0f99776
|
||||
---
|
||||
|
||||
# Video Speed {#video-speed}
|
||||
|
||||
Acelera o ralentiza un vídeo con la opción de conservar el tono del audio.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-speed`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un campo JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| factor | number | No | `2` | Multiplicador de velocidad (0.25-4). Los valores por encima de 1 aceleran, por debajo de 1 ralentizan |
|
||||
| keepPitch | boolean | No | `true` | Conservar el tono del audio al cambiar la velocidad |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/video-speed \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"factor": 0.5, "keepPitch": true}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
|
||||
"originalSize": 12500000,
|
||||
"processedSize": 24800000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Un factor de `2` duplica la velocidad de reproducción (reduce la duración a la mitad). Un factor de `0.5` reduce la velocidad de reproducción a la mitad (duplica la duración).
|
||||
- Cuando `keepPitch` es `true`, el audio se estira en el tiempo para que las voces suenen naturales. Cuando es `false`, el tono cambia proporcionalmente con la velocidad.
|
||||
- El rango válido es de 0.25x a 4x.
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
description: "Extrae fotogramas de un vídeo como un ZIP de imágenes."
|
||||
i18n_source_hash: b06f038dafb3
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 96639415435f
|
||||
---
|
||||
|
||||
# Video to Frames {#video-to-frames}
|
||||
|
||||
Extrae fotogramas individuales de un vídeo y descárgalos como un archivo ZIP de imágenes PNG o JPG.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-to-frames`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un campo JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| mode | string | No | `"all"` | Modo de extracción: `all`, `nth`, `timestamps` |
|
||||
| n | integer | No | `10` | Extraer cada N-ésimo fotograma (2-1000). Solo se usa cuando el modo es `"nth"` |
|
||||
| timestamps | string | No | `""` | Marcas de tiempo en segundos separadas por comas. Obligatorio cuando el modo es `"timestamps"` |
|
||||
| format | string | No | `"png"` | Formato de imagen para los fotogramas extraídos: `png`, `jpg` |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
Extraer cada 30º fotograma como JPG:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/video-to-frames \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"mode": "nth", "n": 30, "format": "jpg"}'
|
||||
```
|
||||
|
||||
Extraer fotogramas en marcas de tiempo específicas:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/video-to-frames \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"mode": "timestamps", "timestamps": "1.5,5,12.3"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip-frames.zip",
|
||||
"originalSize": 12500000,
|
||||
"processedSize": 45000000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- El modo `all` extrae cada fotograma y puede producir archivos ZIP muy grandes para vídeos largos. Usa el modo `nth` o `timestamps` para una extracción selectiva.
|
||||
- PNG conserva toda la calidad pero produce archivos más grandes. JPG es más pequeño pero con pérdida.
|
||||
- La respuesta se descarga como un archivo ZIP que contiene archivos de imagen numerados secuencialmente.
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
description: "Convierte un clip de vídeo en un GIF animado."
|
||||
i18n_source_hash: f729dde8cd55
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 4c14e0a22abb
|
||||
---
|
||||
|
||||
# Video to GIF {#video-to-gif}
|
||||
|
||||
Convierte un clip de vídeo en un GIF animado con velocidad de fotogramas, ancho, tiempo de inicio y duración configurables.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-to-gif`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un campo JSON `settings`. Este es un endpoint asíncrono: devuelve `202 Accepted` de inmediato y el progreso se transmite vía SSE en `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| fps | integer | No | `12` | Velocidad de fotogramas de salida (1-30) |
|
||||
| width | integer | No | `480` | Ancho de salida en píxeles (64-1280). El alto se escala proporcionalmente |
|
||||
| startS | number | No | `0` | Tiempo de inicio en segundos (debe ser >= 0) |
|
||||
| durationS | number | No | `5` | Duración en segundos (mayor que 0, máximo 60) |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/video-to-gif \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"fps": 15, "width": 320, "startS": 2, "durationS": 8}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Los valores más bajos de `fps` y `width` producen archivos GIF más pequeños. Un GIF de 480px de ancho a 12 fps suele ser un buen equilibrio.
|
||||
- La duración máxima es de 60 segundos. Los clips más largos producen archivos muy grandes.
|
||||
- Las actualizaciones de progreso están disponibles vía SSE en `GET /api/v1/jobs/{jobId}/progress` hasta que el trabajo se completa.
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
description: "Convierte un clip de vídeo en una imagen WebP animada."
|
||||
i18n_source_hash: 7b1a22459bd1
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 9a8a0a4ffb44
|
||||
---
|
||||
|
||||
# Video to WebP {#video-to-webp}
|
||||
|
||||
Convierte un clip de vídeo en una imagen WebP animada con velocidad de fotogramas, ancho y calidad configurables.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-to-webp`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un campo JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| fps | integer | No | `12` | Velocidad de fotogramas de salida (1-30) |
|
||||
| width | integer | No | `480` | Ancho de salida en píxeles (16-1920). El alto se escala proporcionalmente |
|
||||
| quality | integer | No | `75` | Calidad de compresión WebP (1-100) |
|
||||
| loop | boolean | No | `true` | Reproducir la animación en bucle |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/video-to-webp \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"fps": 15, "width": 640, "quality": 80}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.webp",
|
||||
"originalSize": 12500000,
|
||||
"processedSize": 2800000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- El WebP animado produce archivos más pequeños que el GIF con mejor compatibilidad de color (paleta de 24 bits frente a 8 bits).
|
||||
- Los valores más bajos de `quality` producen archivos más pequeños a costa de la fidelidad visual.
|
||||
- Establece `loop` en `false` para animaciones que deban reproducirse una vez y detenerse.
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
description: "Incrusta una marca de agua de texto en los fotogramas del vídeo."
|
||||
i18n_source_hash: 937bb075b894
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 95035d60ba89
|
||||
---
|
||||
|
||||
# Watermark Video {#watermark-video}
|
||||
|
||||
Incrusta una marca de agua de texto en cada fotograma de un vídeo con posición, tamaño, opacidad y color configurables.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/watermark-video`
|
||||
|
||||
Acepta datos de formulario multipart con un archivo de vídeo y un campo JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| text | string | Yes | - | Texto de la marca de agua (1-200 caracteres) |
|
||||
| position | string | No | `"br"` | Posición en el fotograma: `tl`, `tc`, `tr`, `l`, `c`, `r`, `bl`, `bc`, `br` |
|
||||
| fontSize | integer | No | `36` | Tamaño de fuente en píxeles (8-120) |
|
||||
| opacity | number | No | `0.5` | Opacidad de la marca de agua (0.05-1) |
|
||||
| color | string | No | `"#ffffff"` | Color hexadecimal para el texto (por ejemplo, `"#ffffff"`) |
|
||||
|
||||
### Position Values {#position-values}
|
||||
|
||||
- **tl** - Arriba a la izquierda, **tc** - Arriba al centro, **tr** - Arriba a la derecha
|
||||
- **l** - Centro a la izquierda, **c** - Centro, **r** - Centro a la derecha
|
||||
- **bl** - Abajo a la izquierda, **bc** - Abajo al centro, **br** - Abajo a la derecha
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/watermark-video \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@clip.mp4" \
|
||||
-F 'settings={"text": "PREVIEW", "position": "c", "fontSize": 48, "opacity": 0.3}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
|
||||
"originalSize": 12500000,
|
||||
"processedSize": 12400000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- La marca de agua se renderiza de forma permanente en los fotogramas del vídeo y no puede eliminarse después del procesamiento.
|
||||
- La marca de agua usa una fuente sans-serif integrada en FFmpeg.
|
||||
- Para marcas de agua de imagen, usa la herramienta Watermark de imagen en su lugar.
|
||||
Reference in New Issue
Block a user