mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
feat(i18n): 21-language pipeline, landing/docs/API wiring, landing+API translations
Shared Claude Code translation pipeline (scripts/i18n, no API key) plus Astro/VitePress/Scalar i18n wiring. Landing and API reference translated into all 20 languages; docs i18n wiring + English source anchors. The translated docs markdown (apps/docs/<locale>/**, 3,620 files) follows in a companion PR because it exceeds GitHub's per-PR CI file limit.
This commit is contained in:
@@ -2,24 +2,24 @@
|
||||
description: Add solid-color bars to fit a target aspect ratio.
|
||||
---
|
||||
|
||||
# Aspect Pad
|
||||
# Aspect Pad {#aspect-pad}
|
||||
|
||||
Add solid-color letterbox or pillarbox bars to fit a video into a target aspect ratio without cropping.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/aspect-pad`
|
||||
|
||||
Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| target | string | No | `"9:16"` | Target aspect ratio: `16:9`, `9:16`, `1:1`, `4:3`, `3:4` |
|
||||
| color | string | No | `"#000000"` | Hex color for the padding bars (e.g. `"#000000"` for black) |
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/aspect-pad \
|
||||
@@ -28,7 +28,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/aspect-pad \
|
||||
-F 'settings={"target": "1:1", "color": "#ffffff"}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -39,7 +39,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/aspect-pad \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- If the video already matches the target aspect ratio, the file is returned unchanged.
|
||||
- Use `9:16` for vertical/portrait social media formats (TikTok, Reels, Shorts).
|
||||
|
||||
@@ -2,24 +2,24 @@
|
||||
description: Generate subtitle files from video audio tracks using AI.
|
||||
---
|
||||
|
||||
# Auto Subtitles
|
||||
# Auto Subtitles {#auto-subtitles}
|
||||
|
||||
Generate subtitle files from a video's audio track using AI-powered speech recognition (faster-whisper). Supports auto-detection and 10 explicit languages.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/auto-subtitles`
|
||||
|
||||
Accepts multipart form data with a video file and a JSON `settings` field. This is an async endpoint - it returns `202 Accepted` immediately and progress is streamed via SSE at `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| language | string | No | `"auto"` | Speech language: `auto`, `en`, `de`, `fr`, `es`, `zh`, `ja`, `ko`, `id`, `th`, `vi` |
|
||||
| format | string | No | `"srt"` | Output subtitle format: `srt`, `vtt` |
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/auto-subtitles \
|
||||
@@ -28,7 +28,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/auto-subtitles \
|
||||
-F 'settings={"language": "en", "format": "srt"}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -37,7 +37,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/auto-subtitles \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- This is an AI tool that requires the **transcription** feature bundle to be installed. If the bundle is not installed, the API returns `501 Feature Not Installed` with instructions to install it via the admin UI.
|
||||
- The `auto` language option uses whisper's built-in language detection. Specifying the language explicitly improves accuracy and speed.
|
||||
|
||||
@@ -2,24 +2,24 @@
|
||||
description: Fill bars with a blurred copy of the video.
|
||||
---
|
||||
|
||||
# Blur Pad
|
||||
# Blur Pad {#blur-pad}
|
||||
|
||||
Fit a video into a target aspect ratio by filling the padding area with a blurred, scaled copy of the video instead of solid-color bars.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/blur-pad`
|
||||
|
||||
Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| target | string | No | `"16:9"` | Target aspect ratio: `16:9`, `9:16`, `1:1`, `4:3`, `3:4` |
|
||||
| blur | number | No | `20` | Gaussian blur sigma for the background (2-50) |
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/blur-pad \
|
||||
@@ -28,7 +28,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/blur-pad \
|
||||
-F 'settings={"target": "16:9", "blur": 30}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -39,7 +39,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/blur-pad \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- Higher blur values produce a softer, more abstract background. Lower values keep more detail visible.
|
||||
- If the video already matches the target aspect ratio, the file is returned unchanged.
|
||||
|
||||
@@ -2,23 +2,23 @@
|
||||
description: Permanently render subtitles onto video frames.
|
||||
---
|
||||
|
||||
# Burn Subtitles
|
||||
# Burn Subtitles {#burn-subtitles}
|
||||
|
||||
Permanently render (hard-code) subtitles from an SRT, VTT, or ASS file onto every frame of a video.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/burn-subtitles`
|
||||
|
||||
Accepts multipart form data with a video file and a subtitle file. This is an async endpoint - it returns `202 Accepted` immediately and progress is streamed via SSE at `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| fontSize | integer | No | `24` | Subtitle font size in pixels (8-72) |
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/burn-subtitles \
|
||||
@@ -28,7 +28,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/burn-subtitles \
|
||||
-F 'settings={"fontSize": 28}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -37,7 +37,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/burn-subtitles \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- Upload two files: the first must be a video, the second must be a subtitle file (.srt, .vtt, or .ass).
|
||||
- Burned subtitles are permanently part of the video and cannot be turned off by the viewer. For toggleable subtitles, use the Embed Subtitles tool instead.
|
||||
|
||||
@@ -2,23 +2,23 @@
|
||||
description: Change the frame rate of a video.
|
||||
---
|
||||
|
||||
# Change FPS
|
||||
# Change FPS {#change-fps}
|
||||
|
||||
Change the frame rate of a video to a target value between 1 and 120 fps.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/change-fps`
|
||||
|
||||
Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| fps | number | No | `30` | Target frame rate (1-120) |
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/change-fps \
|
||||
@@ -27,7 +27,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/change-fps \
|
||||
-F 'settings={"fps": 24}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -38,7 +38,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/change-fps \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- Lowering the frame rate drops frames and reduces file size. Increasing it duplicates frames to fill the gap but does not add real motion detail.
|
||||
- Common target values: 24 (cinema), 30 (web/broadcast), 60 (smooth playback).
|
||||
|
||||
@@ -2,24 +2,24 @@
|
||||
description: Shrink video file size with quality control.
|
||||
---
|
||||
|
||||
# Compress Video
|
||||
# Compress Video {#compress-video}
|
||||
|
||||
Shrink video file size using configurable compression strength and optional resolution downscaling.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/compress-video`
|
||||
|
||||
Accepts multipart form data with a video file and a JSON `settings` field. This is an async endpoint - it returns `202 Accepted` immediately and progress is streamed via SSE at `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| quality | string | No | `"balanced"` | Compression strength: `light`, `balanced`, `strong` |
|
||||
| resolution | string | No | `"original"` | Output resolution: `original`, `1080p`, `720p`, `480p` |
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/compress-video \
|
||||
@@ -28,7 +28,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/compress-video \
|
||||
-F 'settings={"quality": "strong", "resolution": "720p"}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -37,7 +37,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/compress-video \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- The `light` preset preserves near-original quality. The `strong` preset reduces file size aggressively at the cost of visual fidelity.
|
||||
- Downscaling resolution (e.g. from 4K to 720p) compounds with compression for significant size reduction.
|
||||
|
||||
@@ -2,24 +2,24 @@
|
||||
description: Convert videos between MP4, MOV, WebM, AVI, and MKV.
|
||||
---
|
||||
|
||||
# Convert Video
|
||||
# Convert Video {#convert-video}
|
||||
|
||||
Convert videos between MP4, MOV, WebM, AVI, and MKV formats with configurable quality presets.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/convert-video`
|
||||
|
||||
Accepts multipart form data with a video file and a JSON `settings` field. This is an async endpoint - it returns `202 Accepted` immediately and progress is streamed via SSE at `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| format | string | No | `"mp4"` | Output format: `mp4`, `mov`, `webm`, `avi`, `mkv` |
|
||||
| quality | string | No | `"balanced"` | Quality preset: `high`, `balanced`, `small` |
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/convert-video \
|
||||
@@ -28,7 +28,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/convert-video \
|
||||
-F 'settings={"format": "webm", "quality": "balanced"}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -37,7 +37,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/convert-video \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- The `high` quality preset produces the best visual fidelity but larger files. The `small` preset aggressively compresses for minimum file size.
|
||||
- WebM output uses VP9 encoding. MP4 and MOV use H.264. AVI and MKV are available for legacy or archival workflows.
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
description: Crop a region out of a video.
|
||||
---
|
||||
|
||||
# Crop Video
|
||||
# Crop Video {#crop-video}
|
||||
|
||||
Crop a rectangular region out of a video by specifying the region's size and position.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/crop-video`
|
||||
|
||||
Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
@@ -21,7 +21,7 @@ Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
| x | integer | No | `0` | Horizontal offset from the top-left corner |
|
||||
| y | integer | No | `0` | Vertical offset from the top-left corner |
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/crop-video \
|
||||
@@ -30,7 +30,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/crop-video \
|
||||
-F 'settings={"width": 640, "height": 480, "x": 100, "y": 50}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -41,7 +41,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/crop-video \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- The crop region must fit within the video dimensions. If `x + width` or `y + height` exceeds the source size, the request returns a 400 error.
|
||||
- Minimum crop size is 16x16 pixels.
|
||||
|
||||
@@ -2,23 +2,23 @@
|
||||
description: Mux a subtitle track into the video container.
|
||||
---
|
||||
|
||||
# Embed Subtitles
|
||||
# Embed Subtitles {#embed-subtitles}
|
||||
|
||||
Mux a subtitle file into the video container as a soft subtitle track that viewers can toggle on or off.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/embed-subtitles`
|
||||
|
||||
Accepts multipart form data with a video file and a subtitle file, plus a JSON `settings` field.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| language | string | No | `"eng"` | ISO 639-2/B language code (3 lowercase letters, e.g. `"eng"`, `"fra"`, `"deu"`) |
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/embed-subtitles \
|
||||
@@ -28,7 +28,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/embed-subtitles \
|
||||
-F 'settings={"language": "fra"}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -39,7 +39,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/embed-subtitles \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- Upload two files: the first must be a video, the second must be a subtitle file (.srt, .vtt, or .ass).
|
||||
- Embedded (soft) subtitles can be toggled by the viewer in their media player. For permanently visible subtitles, use the Burn Subtitles tool instead.
|
||||
|
||||
@@ -2,23 +2,23 @@
|
||||
description: Pull the audio track out of a video.
|
||||
---
|
||||
|
||||
# Extract Audio
|
||||
# Extract Audio {#extract-audio}
|
||||
|
||||
Extract the audio track from a video file and save it as MP3, WAV, M4A, or OGG.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/extract-audio`
|
||||
|
||||
Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| format | string | No | `"mp3"` | Output audio format: `mp3`, `wav`, `m4a`, `ogg` |
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/extract-audio \
|
||||
@@ -27,7 +27,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/extract-audio \
|
||||
-F 'settings={"format": "mp3"}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -38,7 +38,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/extract-audio \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- If the video has no audio track, the request returns a 400 error.
|
||||
- MP3 is lossy but widely compatible. WAV is lossless but large. M4A (AAC) offers a good balance of quality and size. OGG is available for open codec workflows.
|
||||
|
||||
@@ -2,21 +2,21 @@
|
||||
description: Pull the subtitle track out of a video as an SRT file.
|
||||
---
|
||||
|
||||
# Extract Subtitles
|
||||
# Extract Subtitles {#extract-subtitles}
|
||||
|
||||
Extract the embedded subtitle track from a video container and download it as an SRT file.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/extract-subtitles`
|
||||
|
||||
Accepts multipart form data with a video file. This tool has no configurable settings.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
This tool has no parameters. It extracts the first subtitle track found in the video container.
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/extract-subtitles \
|
||||
@@ -24,7 +24,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/extract-subtitles \
|
||||
-F "file=@clip.mp4"
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -35,7 +35,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/extract-subtitles \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- The video must contain an embedded subtitle track. If no subtitle track is found, the request returns a 400 error.
|
||||
- If the video has multiple subtitle tracks, the first one is extracted.
|
||||
|
||||
@@ -2,23 +2,23 @@
|
||||
description: Convert an animated GIF into an MP4, WebM, or MOV video.
|
||||
---
|
||||
|
||||
# GIF to Video
|
||||
# GIF to Video {#gif-to-video}
|
||||
|
||||
Convert an animated GIF into a compact MP4, WebM, or MOV video file.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/gif-to-video`
|
||||
|
||||
Accepts multipart form data with a GIF file and a JSON `settings` field.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| format | string | No | `"mp4"` | Output format: `mp4`, `webm`, `mov` |
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/gif-to-video \
|
||||
@@ -27,7 +27,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/gif-to-video \
|
||||
-F 'settings={"format": "mp4"}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -38,7 +38,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/gif-to-video \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- Converting GIF to video typically reduces file size by 80-90% while maintaining the same visual quality.
|
||||
- Only animated GIF files are accepted. Static images should use the image Convert tool.
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
description: Turn a set of images into a slideshow video.
|
||||
---
|
||||
|
||||
# Images to Video
|
||||
# Images to Video {#images-to-video}
|
||||
|
||||
Turn a set of images into a slideshow video with configurable duration per image, resolution, and frame rate.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/images-to-video`
|
||||
|
||||
Accepts multipart form data with two or more image files and a JSON `settings` field.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
@@ -20,7 +20,7 @@ Accepts multipart form data with two or more image files and a JSON `settings` f
|
||||
| resolution | string | No | `"720p"` | Output resolution: `1080p`, `720p`, `square` |
|
||||
| fps | integer | No | `30` | Output frame rate (10-60) |
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/images-to-video \
|
||||
@@ -32,7 +32,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/images-to-video \
|
||||
-F 'settings={"secondsPerImage": 3, "resolution": "1080p"}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -43,7 +43,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/images-to-video \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- Accepts 2-60 image files per request. Images appear in the video in upload order.
|
||||
- Images are resized and padded to fit the target resolution while preserving aspect ratio.
|
||||
|
||||
@@ -2,21 +2,21 @@
|
||||
description: Join multiple video clips into one file.
|
||||
---
|
||||
|
||||
# Merge Videos
|
||||
# Merge Videos {#merge-videos}
|
||||
|
||||
Join multiple video clips into a single MP4 file. All inputs are normalized to the first video's resolution and 30 fps.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/merge-videos`
|
||||
|
||||
Accepts multipart form data with two or more video files. This is an async endpoint - it returns `202 Accepted` immediately and progress is streamed via SSE at `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
This tool has no settings parameters. Upload 2-10 video files as multiple `file` parts.
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/merge-videos \
|
||||
@@ -26,7 +26,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/merge-videos \
|
||||
-F "file=@outro.mp4"
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -35,7 +35,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/merge-videos \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- Clips are concatenated in the order they are uploaded.
|
||||
- All clips are re-encoded to match the first clip's resolution, frame rate (30 fps), and codec (H.264). Mismatched inputs are automatically normalized.
|
||||
|
||||
@@ -2,21 +2,21 @@
|
||||
description: Remove the audio track from a video.
|
||||
---
|
||||
|
||||
# Mute Video
|
||||
# Mute Video {#mute-video}
|
||||
|
||||
Remove the audio track from a video, leaving only the visual stream.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/mute-video`
|
||||
|
||||
Accepts multipart form data with a video file. This tool has no configurable settings.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
This tool has no parameters. It strips the audio track from the uploaded video.
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/mute-video \
|
||||
@@ -24,7 +24,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/mute-video \
|
||||
-F "file=@clip.mp4"
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -35,7 +35,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/mute-video \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- The video stream is copied without re-encoding, so there is no quality loss.
|
||||
- If the input video has no audio track, the file is returned unchanged.
|
||||
|
||||
@@ -2,21 +2,21 @@
|
||||
description: Swap the audio track of a video with another file.
|
||||
---
|
||||
|
||||
# Replace Audio
|
||||
# Replace Audio {#replace-audio}
|
||||
|
||||
Swap the audio track of a video with an audio file. Upload both a video and an audio file.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/replace-audio`
|
||||
|
||||
Accepts multipart form data with exactly two files: a video file followed by an audio file.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
This tool has no settings parameters. Upload a video file and an audio file as two `file` parts.
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/replace-audio \
|
||||
@@ -25,7 +25,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/replace-audio \
|
||||
-F "file=@voiceover.mp3"
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -36,7 +36,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/replace-audio \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- Exactly two files must be uploaded: the first must be a video, the second must be an audio file.
|
||||
- If the audio file is longer than the video, it is trimmed to match the video duration. If shorter, the remaining video plays in silence.
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
description: Scale a video to a new resolution or preset size.
|
||||
---
|
||||
|
||||
# Resize Video
|
||||
# Resize Video {#resize-video}
|
||||
|
||||
Scale a video to a new resolution using custom pixel dimensions or a standard preset.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/resize-video`
|
||||
|
||||
Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
@@ -22,7 +22,7 @@ Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
|
||||
When `preset` is `"custom"`, at least one of `width` or `height` must be provided. The other dimension scales proportionally.
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/resize-video \
|
||||
@@ -40,7 +40,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/resize-video \
|
||||
-F 'settings={"width": 1280, "height": 720}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -51,7 +51,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/resize-video \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- Preset values map to standard heights (e.g. `720p` = 1280x720, `1080p` = 1920x1080). Width scales proportionally from the source aspect ratio.
|
||||
- Dimensions are rounded to even numbers as required by most video codecs.
|
||||
|
||||
@@ -2,21 +2,21 @@
|
||||
description: Play a video clip backwards.
|
||||
---
|
||||
|
||||
# Reverse Video
|
||||
# Reverse Video {#reverse-video}
|
||||
|
||||
Play a video clip backwards. The audio track is also reversed.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/reverse-video`
|
||||
|
||||
Accepts multipart form data with a video file. This tool has no configurable settings.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
This tool has no parameters. It reverses the entire video.
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/reverse-video \
|
||||
@@ -24,7 +24,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/reverse-video \
|
||||
-F "file=@clip.mp4"
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -35,7 +35,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/reverse-video \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- Limited to clips up to 5 minutes in length. Longer videos are rejected with a 400 error.
|
||||
- Both video and audio tracks are reversed. To reverse video without audio, mute it first.
|
||||
|
||||
@@ -2,23 +2,23 @@
|
||||
description: Rotate or flip a video.
|
||||
---
|
||||
|
||||
# Rotate Video
|
||||
# Rotate Video {#rotate-video}
|
||||
|
||||
Rotate a video by 90, 180, or 270 degrees, or flip it horizontally or vertically.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/rotate-video`
|
||||
|
||||
Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| transform | string | Yes | - | Transformation to apply: `cw90`, `ccw90`, `180`, `hflip`, `vflip` |
|
||||
|
||||
### Transform Values
|
||||
### Transform Values {#transform-values}
|
||||
|
||||
- **cw90** - Rotate 90 degrees clockwise
|
||||
- **ccw90** - Rotate 90 degrees counter-clockwise
|
||||
@@ -26,7 +26,7 @@ Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
- **hflip** - Flip horizontally (mirror)
|
||||
- **vflip** - Flip vertically
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/rotate-video \
|
||||
@@ -35,7 +35,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/rotate-video \
|
||||
-F 'settings={"transform": "cw90"}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -46,7 +46,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/rotate-video \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- Rotations by 90 or 270 degrees swap the video's width and height.
|
||||
- Flip operations (hflip, vflip) do not change the video dimensions.
|
||||
|
||||
@@ -2,23 +2,23 @@
|
||||
description: Reduce camera shake with two-pass stabilization.
|
||||
---
|
||||
|
||||
# Stabilize Video
|
||||
# Stabilize Video {#stabilize-video}
|
||||
|
||||
Reduce camera shake in handheld footage using FFmpeg's two-pass vidstab stabilization.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/stabilize-video`
|
||||
|
||||
Accepts multipart form data with a video file and a JSON `settings` field. This is an async endpoint - it returns `202 Accepted` immediately and progress is streamed via SSE at `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| smoothing | integer | No | `15` | Smoothing window size in frames (5-60). Higher values produce smoother motion |
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/stabilize-video \
|
||||
@@ -27,7 +27,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/stabilize-video \
|
||||
-F 'settings={"smoothing": 30}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -36,7 +36,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/stabilize-video \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- Stabilization is a two-pass process: the first pass analyzes camera motion, and the second pass applies the correction. This takes roughly twice as long as single-pass tools.
|
||||
- Higher smoothing values remove more shake but may introduce a slight zoom crop at the edges.
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
description: Cut a clip out of a video by specifying start and end times.
|
||||
---
|
||||
|
||||
# Trim Video
|
||||
# Trim Video {#trim-video}
|
||||
|
||||
Cut a clip out of a video by specifying start and end times in seconds, with an option for frame-accurate cuts.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/trim-video`
|
||||
|
||||
Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
@@ -20,7 +20,7 @@ Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
| endS | number | Yes | - | End time in seconds (must be after startS) |
|
||||
| precise | boolean | No | `false` | Re-encode for frame-accurate cuts instead of keyframe seek |
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/trim-video \
|
||||
@@ -29,7 +29,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/trim-video \
|
||||
-F 'settings={"startS": 5, "endS": 30, "precise": true}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -40,7 +40,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/trim-video \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- When `precise` is `false` (the default), the tool uses keyframe seeking, which is fast but may start a few frames before the requested time.
|
||||
- Setting `precise` to `true` re-encodes the segment for exact frame boundaries, but takes longer.
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
description: Adjust brightness, contrast, saturation, and gamma of a video.
|
||||
---
|
||||
|
||||
# Video Color
|
||||
# Video Color {#video-color}
|
||||
|
||||
Adjust brightness, contrast, saturation, and gamma correction on a video.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-color`
|
||||
|
||||
Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
@@ -21,7 +21,7 @@ Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
| saturation | number | No | `1` | Saturation multiplier (0-3). Set to 0 for grayscale |
|
||||
| gamma | number | No | `1` | Gamma correction (0.1-10) |
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/video-color \
|
||||
@@ -30,7 +30,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/video-color \
|
||||
-F 'settings={"brightness": 0.1, "contrast": 1.2, "saturation": 1.5}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -41,7 +41,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/video-color \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- All values at their defaults (brightness 0, contrast 1, saturation 1, gamma 1) produce no change.
|
||||
- Setting saturation to `0` converts the video to grayscale.
|
||||
|
||||
@@ -2,21 +2,21 @@
|
||||
description: Normalize video audio volume to broadcast standard.
|
||||
---
|
||||
|
||||
# Normalize Audio
|
||||
# Normalize Audio {#normalize-audio}
|
||||
|
||||
Normalize video audio volume to the EBU R128 broadcast loudness standard.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-loudnorm`
|
||||
|
||||
Accepts multipart form data with a video file. This tool has no configurable settings.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
This tool has no parameters. It applies EBU R128 loudness normalization to the audio track.
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/video-loudnorm \
|
||||
@@ -24,7 +24,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/video-loudnorm \
|
||||
-F "file=@clip.mp4"
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -35,7 +35,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/video-loudnorm \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- Uses FFmpeg's `loudnorm` filter targeting -16 LUFS integrated loudness with -1.5 dBTP true peak and 11 LU loudness range (EBU R128 broadcast standard).
|
||||
- The source audio sample rate is preserved in the output.
|
||||
|
||||
@@ -2,21 +2,21 @@
|
||||
description: Strip metadata from a video and report what was found.
|
||||
---
|
||||
|
||||
# Clean Video Metadata
|
||||
# Clean Video Metadata {#clean-video-metadata}
|
||||
|
||||
Strip metadata (creation date, GPS coordinates, camera model, software tags, etc.) from a video and report what was removed.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-metadata`
|
||||
|
||||
Accepts multipart form data with a video file. This tool has no configurable settings.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
This tool has no parameters. It strips all metadata from the video container.
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/video-metadata \
|
||||
@@ -24,7 +24,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/video-metadata \
|
||||
-F "file=@clip.mp4"
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -44,7 +44,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/video-metadata \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- Metadata stripped includes creation timestamps, GPS/location data, camera/device info, and software tags.
|
||||
- The video and audio streams are copied without re-encoding, so there is no quality loss.
|
||||
|
||||
@@ -2,24 +2,24 @@
|
||||
description: Speed up or slow down a video.
|
||||
---
|
||||
|
||||
# Video Speed
|
||||
# Video Speed {#video-speed}
|
||||
|
||||
Speed up or slow down a video with an option to preserve audio pitch.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-speed`
|
||||
|
||||
Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| factor | number | No | `2` | Speed multiplier (0.25-4). Values above 1 speed up, below 1 slow down |
|
||||
| keepPitch | boolean | No | `true` | Preserve audio pitch when changing speed |
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/video-speed \
|
||||
@@ -28,7 +28,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/video-speed \
|
||||
-F 'settings={"factor": 0.5, "keepPitch": true}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -39,7 +39,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/video-speed \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- A factor of `2` doubles playback speed (halves duration). A factor of `0.5` halves playback speed (doubles duration).
|
||||
- When `keepPitch` is `true`, the audio is time-stretched so voices sound natural. When `false`, pitch shifts proportionally with speed.
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
description: Extract frames from a video as a ZIP of images.
|
||||
---
|
||||
|
||||
# Video to Frames
|
||||
# Video to Frames {#video-to-frames}
|
||||
|
||||
Extract individual frames from a video and download them as a ZIP archive of PNG or JPG images.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-to-frames`
|
||||
|
||||
Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
@@ -21,7 +21,7 @@ Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
| timestamps | string | No | `""` | Comma-separated timestamps in seconds. Required when mode is `"timestamps"` |
|
||||
| format | string | No | `"png"` | Image format for extracted frames: `png`, `jpg` |
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
Extract every 30th frame as JPG:
|
||||
|
||||
@@ -41,7 +41,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/video-to-frames \
|
||||
-F 'settings={"mode": "timestamps", "timestamps": "1.5,5,12.3"}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -52,7 +52,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/video-to-frames \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- The `all` mode extracts every frame and can produce very large ZIP files for long videos. Use `nth` or `timestamps` mode for selective extraction.
|
||||
- PNG preserves full quality but produces larger files. JPG is smaller but lossy.
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
description: Turn a video clip into an animated GIF.
|
||||
---
|
||||
|
||||
# Video to GIF
|
||||
# Video to GIF {#video-to-gif}
|
||||
|
||||
Turn a video clip into an animated GIF with configurable frame rate, width, start time, and duration.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-to-gif`
|
||||
|
||||
Accepts multipart form data with a video file and a JSON `settings` field. This is an async endpoint - it returns `202 Accepted` immediately and progress is streamed via SSE at `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
@@ -21,7 +21,7 @@ Accepts multipart form data with a video file and a JSON `settings` field. This
|
||||
| startS | number | No | `0` | Start time in seconds (must be >= 0) |
|
||||
| durationS | number | No | `5` | Duration in seconds (above 0, max 60) |
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/video-to-gif \
|
||||
@@ -30,7 +30,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/video-to-gif \
|
||||
-F 'settings={"fps": 15, "width": 320, "startS": 2, "durationS": 8}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -39,7 +39,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/video-to-gif \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- Lower `fps` and `width` values produce smaller GIF files. A 480px-wide GIF at 12 fps is usually a good balance.
|
||||
- Maximum duration is 60 seconds. Longer clips produce very large files.
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
description: Convert a video clip into an animated WebP image.
|
||||
---
|
||||
|
||||
# Video to WebP
|
||||
# Video to WebP {#video-to-webp}
|
||||
|
||||
Convert a video clip into an animated WebP image with configurable frame rate, width, and quality.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-to-webp`
|
||||
|
||||
Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
@@ -21,7 +21,7 @@ Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
| quality | integer | No | `75` | WebP compression quality (1-100) |
|
||||
| loop | boolean | No | `true` | Loop the animation |
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/video-to-webp \
|
||||
@@ -30,7 +30,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/video-to-webp \
|
||||
-F 'settings={"fps": 15, "width": 640, "quality": 80}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -41,7 +41,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/video-to-webp \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- Animated WebP produces smaller files than GIF with better color support (24-bit vs 8-bit palette).
|
||||
- Lower `quality` values produce smaller files at the cost of visual fidelity.
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
description: Burn a text watermark onto video frames.
|
||||
---
|
||||
|
||||
# Watermark Video
|
||||
# Watermark Video {#watermark-video}
|
||||
|
||||
Burn a text watermark onto every frame of a video with configurable position, size, opacity, and color.
|
||||
|
||||
## API Endpoint
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/watermark-video`
|
||||
|
||||
Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
|
||||
## Parameters
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
@@ -22,13 +22,13 @@ Accepts multipart form data with a video file and a JSON `settings` field.
|
||||
| opacity | number | No | `0.5` | Watermark opacity (0.05-1) |
|
||||
| color | string | No | `"#ffffff"` | Hex color for the text (e.g. `"#ffffff"`) |
|
||||
|
||||
### Position Values
|
||||
### Position Values {#position-values}
|
||||
|
||||
- **tl** - Top left, **tc** - Top center, **tr** - Top right
|
||||
- **l** - Middle left, **c** - Center, **r** - Middle right
|
||||
- **bl** - Bottom left, **bc** - Bottom center, **br** - Bottom right
|
||||
|
||||
## Example Request
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/video/watermark-video \
|
||||
@@ -37,7 +37,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/watermark-video \
|
||||
-F 'settings={"text": "PREVIEW", "position": "c", "fontSize": 48, "opacity": 0.3}'
|
||||
```
|
||||
|
||||
## Example Response
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -48,7 +48,7 @@ curl -X POST http://localhost:1349/api/v1/tools/video/watermark-video \
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
## Notes {#notes}
|
||||
|
||||
- The watermark is permanently rendered into the video frames and cannot be removed after processing.
|
||||
- The watermark uses a sans-serif font built into FFmpeg.
|
||||
|
||||
Reference in New Issue
Block a user