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:
SnapOtter
2026-07-11 13:01:55 +08:00
committed by GitHub
parent 2e91368816
commit 00b651c9f8
353 changed files with 564607 additions and 2594 deletions
+6 -6
View File
@@ -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).
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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).
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+7 -7
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+6 -6
View File
@@ -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.
+7 -7
View File
@@ -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.