feat(docs-i18n): translate all documentation into 20 languages

All 181 docs markdown files translated into 20 languages (apps/docs/<locale>/**). Companion to the i18n code PR; admin-merged because the file count exceeds GitHub's per-PR CI trigger limit. Validated by pnpm i18n:check (all surfaces, 0 stale/missing) and a clean all-locale docs build.
This commit is contained in:
SnapOtter
2026-07-11 13:52:47 +08:00
committed by GitHub
parent 00b651c9f8
commit 4963ab3bbd
3620 changed files with 306134 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
---
description: "Thêm các thanh màu đơn sắc để vừa với một tỷ lệ khung hình mục tiêu."
i18n_source_hash: b8e17dffc341
i18n_provenance: human
i18n_output_hash: 9fc281d6e853
---
# Aspect Pad {#aspect-pad}
Thêm các thanh letterbox hoặc pillarbox màu đơn sắc để đưa một video vừa vào một tỷ lệ khung hình mục tiêu mà không cắt xén.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/aspect-pad`
Chấp nhận dữ liệu biểu mẫu multipart với một tệp video và một trường JSON `settings`.
## Parameters {#parameters}
| Tham số | Kiểu | Bắt buộc | Mặc định | Mô tả |
|-----------|------|----------|---------|-------------|
| target | string | Không | `"9:16"` | Tỷ lệ khung hình mục tiêu: `16:9`, `9:16`, `1:1`, `4:3`, `3:4` |
| color | string | Không | `"#000000"` | Màu hex cho các thanh đệm (ví dụ `"#000000"` cho màu đen) |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/aspect-pad \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"target": "1:1", "color": "#ffffff"}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
"originalSize": 12500000,
"processedSize": 13200000
}
```
## Notes {#notes}
- Nếu video đã khớp với tỷ lệ khung hình mục tiêu, tệp được trả về không thay đổi.
- Dùng `9:16` cho các định dạng mạng xã hội dọc/khổ đứng (TikTok, Reels, Shorts).
- Để có đệm làm mờ thay vì màu đơn sắc, hãy dùng công cụ Blur Pad.
@@ -0,0 +1,48 @@
---
description: "Tạo tệp phụ đề từ bản âm thanh của video bằng AI."
i18n_source_hash: 35b1e78501ad
i18n_provenance: human
i18n_output_hash: df3eead3b365
---
# Auto Subtitles {#auto-subtitles}
Tạo tệp phụ đề từ bản âm thanh của một video bằng nhận dạng giọng nói hỗ trợ AI (faster-whisper). Hỗ trợ tự động phát hiện và 10 ngôn ngữ được chỉ định rõ ràng.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/auto-subtitles`
Chấp nhận dữ liệu biểu mẫu multipart với một tệp video và một trường JSON `settings`. Đây là một endpoint bất đồng bộ - nó trả về `202 Accepted` ngay lập tức và tiến độ được truyền qua SSE tại `GET /api/v1/jobs/{jobId}/progress`.
## Parameters {#parameters}
| Tham số | Kiểu | Bắt buộc | Mặc định | Mô tả |
|-----------|------|----------|---------|-------------|
| language | string | Không | `"auto"` | Ngôn ngữ giọng nói: `auto`, `en`, `de`, `fr`, `es`, `zh`, `ja`, `ko`, `id`, `th`, `vi` |
| format | string | Không | `"srt"` | Định dạng phụ đề đầu ra: `srt`, `vtt` |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/auto-subtitles \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"language": "en", "format": "srt"}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
## Notes {#notes}
- Đây là một công cụ AI yêu cầu cài đặt gói tính năng **transcription**. Nếu gói chưa được cài đặt, API trả về `501 Feature Not Installed` cùng hướng dẫn cài đặt nó qua giao diện quản trị.
- Tùy chọn ngôn ngữ `auto` dùng khả năng phát hiện ngôn ngữ tích hợp sẵn của whisper. Chỉ định ngôn ngữ rõ ràng cải thiện độ chính xác và tốc độ.
- SRT là định dạng phụ đề được hỗ trợ rộng rãi nhất. VTT (WebVTT) là tiêu chuẩn cho các trình phát video web.
- Cập nhật tiến độ có sẵn qua SSE tại `GET /api/v1/jobs/{jobId}/progress` cho đến khi công việc hoàn thành.
+49
View File
@@ -0,0 +1,49 @@
---
description: "Lấp đầy các thanh bằng một bản sao được làm mờ của video."
i18n_source_hash: 0c72aaefc6de
i18n_provenance: human
i18n_output_hash: ace4fdd6f723
---
# Blur Pad {#blur-pad}
Đưa một video vừa vào một tỷ lệ khung hình mục tiêu bằng cách lấp đầy vùng đệm bằng một bản sao được làm mờ, co giãn của video thay vì các thanh màu đơn sắc.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/blur-pad`
Chấp nhận dữ liệu biểu mẫu multipart với một tệp video và một trường JSON `settings`.
## Parameters {#parameters}
| Tham số | Kiểu | Bắt buộc | Mặc định | Mô tả |
|-----------|------|----------|---------|-------------|
| target | string | Không | `"16:9"` | Tỷ lệ khung hình mục tiêu: `16:9`, `9:16`, `1:1`, `4:3`, `3:4` |
| blur | number | Không | `20` | Sigma làm mờ Gaussian cho nền (2-50) |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/blur-pad \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"target": "16:9", "blur": 30}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
"originalSize": 12500000,
"processedSize": 14100000
}
```
## Notes {#notes}
- Giá trị làm mờ cao hơn tạo ra nền mềm hơn, trừu tượng hơn. Giá trị thấp hơn giữ nhiều chi tiết hiển thị hơn.
- Nếu video đã khớp với tỷ lệ khung hình mục tiêu, tệp được trả về không thay đổi.
- Để có đệm màu đơn sắc, hãy dùng công cụ Aspect Pad thay thế.
@@ -0,0 +1,47 @@
---
description: "Kết xuất phụ đề vĩnh viễn lên các khung hình video."
i18n_source_hash: 2d3111589db0
i18n_provenance: human
i18n_output_hash: beecb810bd54
---
# Burn Subtitles {#burn-subtitles}
Kết xuất vĩnh viễn (hard-code) phụ đề từ file SRT, VTT hoặc ASS lên mọi khung hình của video.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/burn-subtitles`
Nhận multipart form data gồm một file video và một file phụ đề. Đây là endpoint bất đồng bộ - nó trả về `202 Accepted` ngay lập tức và tiến độ được truyền qua SSE tại `GET /api/v1/jobs/{jobId}/progress`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| fontSize | integer | No | `24` | Cỡ chữ phụ đề tính bằng pixel (8-72) |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/burn-subtitles \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F "file=@subtitles.srt" \
-F 'settings={"fontSize": 28}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
## Notes {#notes}
- Tải lên hai file: file đầu tiên phải là video, file thứ hai phải là file phụ đề (.srt, .vtt hoặc .ass).
- Phụ đề đã burn là một phần vĩnh viễn của video và người xem không thể tắt được. Để có phụ đề bật/tắt được, hãy dùng công cụ Embed Subtitles.
- Cập nhật tiến độ có sẵn qua SSE tại `GET /api/v1/jobs/{jobId}/progress` cho đến khi tác vụ hoàn tất.
+48
View File
@@ -0,0 +1,48 @@
---
description: "Thay đổi tốc độ khung hình của video."
i18n_source_hash: 2bffbd04a1cb
i18n_provenance: human
i18n_output_hash: bdc2fade7408
---
# Change FPS {#change-fps}
Thay đổi tốc độ khung hình của video sang một giá trị mục tiêu từ 1 đến 120 fps.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/change-fps`
Nhận multipart form data gồm một file video và một trường JSON `settings`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| fps | number | No | `30` | Tốc độ khung hình mục tiêu (1-120) |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/change-fps \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"fps": 24}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
"originalSize": 12500000,
"processedSize": 10200000
}
```
## Notes {#notes}
- Giảm tốc độ khung hình sẽ loại bỏ các khung hình và giảm kích thước file. Tăng nó sẽ nhân đôi các khung hình để lấp đầy khoảng trống nhưng không thêm chi tiết chuyển động thực.
- Các giá trị mục tiêu phổ biến: 24 (điện ảnh), 30 (web/phát sóng), 60 (phát mượt).
- Track âm thanh được giữ nguyên ở tốc độ lấy mẫu gốc.
@@ -0,0 +1,47 @@
---
description: "Giảm kích thước file video với khả năng kiểm soát chất lượng."
i18n_source_hash: 9cc1f1acf74e
i18n_provenance: human
i18n_output_hash: 48b15d782a05
---
# Compress Video {#compress-video}
Giảm kích thước file video bằng cách sử dụng cường độ nén có thể cấu hình và tùy chọn giảm độ phân giải.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/compress-video`
Nhận multipart form data gồm một file video và một trường JSON `settings`. Đây là endpoint bất đồng bộ - nó trả về `202 Accepted` ngay lập tức và tiến độ được truyền qua SSE tại `GET /api/v1/jobs/{jobId}/progress`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| quality | string | No | `"balanced"` | Cường độ nén: `light`, `balanced`, `strong` |
| resolution | string | No | `"original"` | Độ phân giải đầu ra: `original`, `1080p`, `720p`, `480p` |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/compress-video \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"quality": "strong", "resolution": "720p"}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
## Notes {#notes}
- Preset `light` giữ chất lượng gần như gốc. Preset `strong` giảm kích thước file mạnh mẽ với cái giá là độ trung thực hình ảnh.
- Giảm độ phân giải (ví dụ từ 4K xuống 720p) kết hợp với nén để giảm kích thước đáng kể.
- Cập nhật tiến độ có sẵn qua SSE tại `GET /api/v1/jobs/{jobId}/progress` cho đến khi tác vụ hoàn tất.
+47
View File
@@ -0,0 +1,47 @@
---
description: "Chuyển đổi video giữa MP4, MOV, WebM, AVI và MKV."
i18n_source_hash: 8f9e6418b1c6
i18n_provenance: human
i18n_output_hash: da0eafc4efbf
---
# Convert Video {#convert-video}
Chuyển đổi video giữa các định dạng MP4, MOV, WebM, AVI và MKV với các preset chất lượng có thể cấu hình.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/convert-video`
Nhận multipart form data gồm một file video và một trường JSON `settings`. Đây là endpoint bất đồng bộ - nó trả về `202 Accepted` ngay lập tức và tiến độ được truyền qua SSE tại `GET /api/v1/jobs/{jobId}/progress`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| format | string | No | `"mp4"` | Định dạng đầu ra: `mp4`, `mov`, `webm`, `avi`, `mkv` |
| quality | string | No | `"balanced"` | Preset chất lượng: `high`, `balanced`, `small` |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/convert-video \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"format": "webm", "quality": "balanced"}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
## Notes {#notes}
- Preset chất lượng `high` tạo ra độ trung thực hình ảnh tốt nhất nhưng file lớn hơn. Preset `small` nén mạnh để có kích thước file nhỏ nhất.
- Đầu ra WebM dùng mã hóa VP9. MP4 và MOV dùng H.264. AVI và MKV có sẵn cho các quy trình cũ hoặc lưu trữ.
- Cập nhật tiến độ có sẵn qua SSE tại `GET /api/v1/jobs/{jobId}/progress` cho đến khi tác vụ hoàn tất.
+51
View File
@@ -0,0 +1,51 @@
---
description: "Cắt một vùng ra khỏi video."
i18n_source_hash: fab11f71a202
i18n_provenance: human
i18n_output_hash: 525678d36172
---
# Crop Video {#crop-video}
Cắt một vùng hình chữ nhật ra khỏi video bằng cách chỉ định kích thước và vị trí của vùng đó.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/crop-video`
Nhận multipart form data gồm một file video và một trường JSON `settings`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| width | integer | Yes | - | Chiều rộng vùng cắt tính bằng pixel (tối thiểu 16) |
| height | integer | Yes | - | Chiều cao vùng cắt tính bằng pixel (tối thiểu 16) |
| x | integer | No | `0` | Độ lệch ngang từ góc trên bên trái |
| y | integer | No | `0` | Độ lệch dọc từ góc trên bên trái |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/crop-video \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"width": 640, "height": 480, "x": 100, "y": 50}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
"originalSize": 12500000,
"processedSize": 5200000
}
```
## Notes {#notes}
- Vùng cắt phải nằm gọn trong kích thước video. Nếu `x + width` hoặc `y + height` vượt quá kích thước nguồn, yêu cầu trả về lỗi 400.
- Kích thước cắt tối thiểu là 16x16 pixel.
- Kích thước được làm tròn thành số chẵn theo yêu cầu của hầu hết các codec video.
@@ -0,0 +1,49 @@
---
description: "Ghép một track phụ đề vào container video."
i18n_source_hash: be272730fff5
i18n_provenance: human
i18n_output_hash: 0c0843db5789
---
# Embed Subtitles {#embed-subtitles}
Ghép một file phụ đề vào container video dưới dạng track phụ đề mềm mà người xem có thể bật hoặc tắt.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/embed-subtitles`
Nhận multipart form data gồm một file video và một file phụ đề, cùng với một trường JSON `settings`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| language | string | No | `"eng"` | Mã ngôn ngữ ISO 639-2/B (3 chữ cái thường, ví dụ `"eng"`, `"fra"`, `"deu"`) |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/embed-subtitles \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F "file=@subtitles.srt" \
-F 'settings={"language": "fra"}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
"originalSize": 12500000,
"processedSize": 12520000
}
```
## Notes {#notes}
- Tải lên hai file: file đầu tiên phải là video, file thứ hai phải là file phụ đề (.srt, .vtt hoặc .ass).
- Phụ đề nhúng (mềm) có thể được người xem bật/tắt trong trình phát media của họ. Để có phụ đề luôn hiển thị vĩnh viễn, hãy dùng công cụ Burn Subtitles.
- Mã ngôn ngữ được lưu dưới dạng metadata trong container và giúp các trình phát media gắn nhãn track phụ đề.
+48
View File
@@ -0,0 +1,48 @@
---
description: "Tách track âm thanh ra khỏi video."
i18n_source_hash: f5b8330a5f89
i18n_provenance: human
i18n_output_hash: 0fde41386c51
---
# Extract Audio {#extract-audio}
Trích xuất track âm thanh từ một file video và lưu dưới dạng MP3, WAV, M4A hoặc OGG.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/extract-audio`
Nhận multipart form data gồm một file video và một trường JSON `settings`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| format | string | No | `"mp3"` | Định dạng âm thanh đầu ra: `mp3`, `wav`, `m4a`, `ogg` |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/extract-audio \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"format": "mp3"}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp3",
"originalSize": 12500000,
"processedSize": 3200000
}
```
## Notes {#notes}
- Nếu video không có track âm thanh, yêu cầu trả về lỗi 400.
- MP3 có mất dữ liệu nhưng tương thích rộng rãi. WAV không mất dữ liệu nhưng lớn. M4A (AAC) mang lại sự cân bằng tốt giữa chất lượng và kích thước. OGG có sẵn cho các quy trình dùng codec mở.
- Khi âm thanh nguồn đã là AAC và định dạng đầu ra là M4A, luồng âm thanh được sao chép mà không mã hóa lại.
@@ -0,0 +1,45 @@
---
description: "Tách track phụ đề ra khỏi video dưới dạng file SRT."
i18n_source_hash: 48db860f6676
i18n_provenance: human
i18n_output_hash: a2556b59979b
---
# Extract Subtitles {#extract-subtitles}
Trích xuất track phụ đề nhúng từ một container video và tải xuống dưới dạng file SRT.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/extract-subtitles`
Nhận multipart form data gồm một file video. Công cụ này không có cài đặt nào có thể cấu hình.
## Parameters {#parameters}
Công cụ này không có tham số nào. Nó trích xuất track phụ đề đầu tiên tìm thấy trong container video.
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/extract-subtitles \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4"
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.srt",
"originalSize": 12500000,
"processedSize": 4500
}
```
## Notes {#notes}
- Video phải chứa một track phụ đề nhúng. Nếu không tìm thấy track phụ đề nào, yêu cầu trả về lỗi 400.
- Nếu video có nhiều track phụ đề, track đầu tiên sẽ được trích xuất.
- Định dạng đầu ra là SRT bất kể định dạng phụ đề gốc trong container là gì.
+48
View File
@@ -0,0 +1,48 @@
---
description: "Chuyển đổi ảnh GIF động thành video MP4, WebM hoặc MOV."
i18n_source_hash: c3737b31146d
i18n_provenance: human
i18n_output_hash: cc47385043bb
---
# GIF to Video {#gif-to-video}
Chuyển đổi ảnh GIF động thành file video MP4, WebM hoặc MOV gọn nhẹ.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/gif-to-video`
Nhận multipart form data gồm một file GIF và một trường JSON `settings`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| format | string | No | `"mp4"` | Định dạng đầu ra: `mp4`, `webm`, `mov` |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/gif-to-video \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@animation.gif" \
-F 'settings={"format": "mp4"}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/animation.mp4",
"originalSize": 8500000,
"processedSize": 950000
}
```
## Notes {#notes}
- Chuyển đổi GIF sang video thường giảm kích thước file 80-90% trong khi vẫn giữ nguyên chất lượng hình ảnh.
- Chỉ chấp nhận file GIF động. Ảnh tĩnh nên dùng công cụ Convert của hình ảnh.
- MP4 và MOV dùng mã hóa H.264, WebM dùng VP9.
@@ -0,0 +1,54 @@
---
description: "Biến một tập ảnh thành video trình chiếu."
i18n_source_hash: 2c6f183feb6d
i18n_provenance: human
i18n_output_hash: 6594de4c660e
---
# Images to Video {#images-to-video}
Biến một tập ảnh thành video trình chiếu với thời lượng mỗi ảnh, độ phân giải và tốc độ khung hình có thể cấu hình.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/images-to-video`
Nhận multipart form data gồm hai hoặc nhiều file ảnh và một trường JSON `settings`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| secondsPerImage | number | No | `2` | Thời lượng hiển thị mỗi ảnh tính bằng giây (0.5-10) |
| resolution | string | No | `"720p"` | Độ phân giải đầu ra: `1080p`, `720p`, `square` |
| fps | integer | No | `30` | Tốc độ khung hình đầu ra (10-60) |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/images-to-video \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@slide1.jpg" \
-F "file=@slide2.jpg" \
-F "file=@slide3.jpg" \
-F "file=@slide4.jpg" \
-F 'settings={"secondsPerImage": 3, "resolution": "1080p"}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/slideshow.mp4",
"originalSize": 3500000,
"processedSize": 1200000
}
```
## Notes {#notes}
- Chấp nhận 2-60 file ảnh mỗi yêu cầu. Các ảnh xuất hiện trong video theo thứ tự tải lên.
- Ảnh được đổi kích thước và thêm viền đệm để vừa với độ phân giải mục tiêu trong khi giữ nguyên tỷ lệ khung hình.
- Tùy chọn độ phân giải `square` tạo ra video 1080x1080, hữu ích cho mạng xã hội.
- Định dạng đầu ra luôn là MP4 (H.264).
+46
View File
@@ -0,0 +1,46 @@
---
description: "Nối nhiều clip video thành một file."
i18n_source_hash: 90463dfbb580
i18n_provenance: human
i18n_output_hash: 7a48a5e1d2f7
---
# Merge Videos {#merge-videos}
Nối nhiều clip video thành một file MP4 duy nhất. Tất cả đầu vào được chuẩn hóa về độ phân giải của video đầu tiên và 30 fps.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/merge-videos`
Nhận multipart form data gồm hai hoặc nhiều file video. Đây là endpoint bất đồng bộ - nó trả về `202 Accepted` ngay lập tức và tiến độ được truyền qua SSE tại `GET /api/v1/jobs/{jobId}/progress`.
## Parameters {#parameters}
Công cụ này không có tham số cài đặt nào. Tải lên 2-10 file video dưới dạng nhiều phần `file`.
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/merge-videos \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@intro.mp4" \
-F "file=@main.mp4" \
-F "file=@outro.mp4"
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
## Notes {#notes}
- Các clip được ghép nối theo thứ tự tải lên.
- Tất cả các clip được mã hóa lại để khớp với độ phân giải, tốc độ khung hình (30 fps) và codec (H.264) của clip đầu tiên. Các đầu vào không khớp được tự động chuẩn hóa.
- Chấp nhận 2-10 file video mỗi yêu cầu.
- Cập nhật tiến độ có sẵn qua SSE tại `GET /api/v1/jobs/{jobId}/progress` cho đến khi tác vụ hoàn tất.
+44
View File
@@ -0,0 +1,44 @@
---
description: "Loại bỏ track âm thanh khỏi video."
i18n_source_hash: 9a0c60bbcaa3
i18n_provenance: human
i18n_output_hash: 9cad30dc4363
---
# Mute Video {#mute-video}
Loại bỏ track âm thanh khỏi video, chỉ để lại luồng hình ảnh.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/mute-video`
Nhận multipart form data gồm một file video. Công cụ này không có cài đặt nào có thể cấu hình.
## Parameters {#parameters}
Công cụ này không có tham số nào. Nó tách track âm thanh khỏi video được tải lên.
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/mute-video \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4"
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
"originalSize": 12500000,
"processedSize": 8900000
}
```
## Notes {#notes}
- Luồng video được sao chép mà không mã hóa lại, nên không có mất mát chất lượng.
- Nếu video đầu vào không có track âm thanh, file được trả về không thay đổi.
+46
View File
@@ -0,0 +1,46 @@
---
description: "Thay track âm thanh của video bằng một file khác."
i18n_source_hash: fabc2a953103
i18n_provenance: human
i18n_output_hash: c7e7556e8aef
---
# Replace Audio {#replace-audio}
Thay track âm thanh của video bằng một file âm thanh. Tải lên cả một video và một file âm thanh.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/replace-audio`
Nhận multipart form data gồm chính xác hai file: một file video theo sau là một file âm thanh.
## Parameters {#parameters}
Công cụ này không có tham số cài đặt nào. Tải lên một file video và một file âm thanh dưới dạng hai phần `file`.
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/replace-audio \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F "file=@voiceover.mp3"
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
"originalSize": 12500000,
"processedSize": 13100000
}
```
## Notes {#notes}
- Phải tải lên chính xác hai file: file đầu tiên phải là video, file thứ hai phải là file âm thanh.
- Nếu file âm thanh dài hơn video, nó được cắt để khớp với thời lượng video. Nếu ngắn hơn, phần video còn lại phát trong im lặng.
- Luồng video được sao chép mà không mã hóa lại, nên không có mất mát chất lượng video.
+61
View File
@@ -0,0 +1,61 @@
---
description: "Đổi tỷ lệ video sang độ phân giải mới hoặc kích thước preset."
i18n_source_hash: bb1f67871fea
i18n_provenance: human
i18n_output_hash: d47762829e04
---
# Resize Video {#resize-video}
Đổi tỷ lệ video sang độ phân giải mới bằng cách dùng kích thước pixel tùy chỉnh hoặc một preset chuẩn.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/resize-video`
Nhận multipart form data gồm một file video và một trường JSON `settings`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| width | integer | No | - | Chiều rộng mục tiêu tính bằng pixel (16-7680) |
| height | integer | No | - | Chiều cao mục tiêu tính bằng pixel (16-4320) |
| preset | string | No | `"custom"` | Preset độ phân giải: `custom`, `2160p`, `1440p`, `1080p`, `720p`, `480p`, `360p` |
Khi `preset``"custom"`, phải cung cấp ít nhất một trong `width` hoặc `height`. Kích thước còn lại đổi tỷ lệ theo tương ứng.
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/resize-video \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"preset": "720p"}'
```
Đổi kích thước sang kích thước tùy chỉnh:
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/resize-video \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"width": 1280, "height": 720}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
"originalSize": 25000000,
"processedSize": 8500000
}
```
## Notes {#notes}
- Các giá trị preset ánh xạ tới các chiều cao chuẩn (ví dụ `720p` = 1280x720, `1080p` = 1920x1080). Chiều rộng đổi tỷ lệ theo tỷ lệ khung hình của nguồn.
- Kích thước được làm tròn thành số chẵn theo yêu cầu của hầu hết các codec video.
- Độ phân giải tối đa được hỗ trợ là 7680x4320 (8K UHD).
+44
View File
@@ -0,0 +1,44 @@
---
description: "Phát ngược một clip video."
i18n_source_hash: 98226f4e092d
i18n_provenance: human
i18n_output_hash: 26e70b4998ec
---
# Reverse Video {#reverse-video}
Phát ngược một clip video. Track âm thanh cũng được đảo ngược.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/reverse-video`
Nhận multipart form data gồm một file video. Công cụ này không có cài đặt nào có thể cấu hình.
## Parameters {#parameters}
Công cụ này không có tham số nào. Nó đảo ngược toàn bộ video.
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/reverse-video \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4"
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
"originalSize": 12500000,
"processedSize": 12600000
}
```
## Notes {#notes}
- Giới hạn ở các clip dài tối đa 5 phút. Các video dài hơn bị từ chối với lỗi 400.
- Cả track video và âm thanh đều được đảo ngược. Để đảo ngược video mà không có âm thanh, hãy mute nó trước.
+55
View File
@@ -0,0 +1,55 @@
---
description: "Xoay hoặc lật một video."
i18n_source_hash: cf9620ca62c7
i18n_provenance: human
i18n_output_hash: e972d6730756
---
# Rotate Video {#rotate-video}
Xoay video 90, 180 hoặc 270 độ, hoặc lật nó theo chiều ngang hoặc chiều dọc.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/rotate-video`
Nhận multipart form data gồm một file video và một trường JSON `settings`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| transform | string | Yes | - | Phép biến đổi cần áp dụng: `cw90`, `ccw90`, `180`, `hflip`, `vflip` |
### Transform Values {#transform-values}
- **cw90** - Xoay 90 độ theo chiều kim đồng hồ
- **ccw90** - Xoay 90 độ ngược chiều kim đồng hồ
- **180** - Xoay 180 độ
- **hflip** - Lật ngang (soi gương)
- **vflip** - Lật dọc
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/rotate-video \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"transform": "cw90"}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
"originalSize": 12500000,
"processedSize": 12400000
}
```
## Notes {#notes}
- Xoay 90 hoặc 270 độ sẽ hoán đổi chiều rộng và chiều cao của video.
- Các thao tác lật (hflip, vflip) không thay đổi kích thước video.
@@ -0,0 +1,46 @@
---
description: "Giảm rung máy quay với ổn định hai lượt."
i18n_source_hash: ec908e91a752
i18n_provenance: human
i18n_output_hash: aabe0811d9bd
---
# Stabilize Video {#stabilize-video}
Giảm rung máy quay trong cảnh quay cầm tay bằng cách sử dụng ổn định vidstab hai lượt của FFmpeg.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/stabilize-video`
Nhận multipart form data gồm một file video và một trường JSON `settings`. Đây là endpoint bất đồng bộ - nó trả về `202 Accepted` ngay lập tức và tiến độ được truyền qua SSE tại `GET /api/v1/jobs/{jobId}/progress`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| smoothing | integer | No | `15` | Kích thước cửa sổ làm mượt tính bằng khung hình (5-60). Giá trị cao hơn tạo chuyển động mượt hơn |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/stabilize-video \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"smoothing": 30}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
## Notes {#notes}
- Ổn định là một quá trình hai lượt: lượt đầu tiên phân tích chuyển động của máy quay, và lượt thứ hai áp dụng hiệu chỉnh. Việc này mất khoảng gấp đôi thời gian so với các công cụ một lượt.
- Giá trị làm mượt cao hơn loại bỏ nhiều rung hơn nhưng có thể tạo ra một chút cắt xén phóng to ở các cạnh.
- Cập nhật tiến độ có sẵn qua SSE tại `GET /api/v1/jobs/{jobId}/progress` cho đến khi tác vụ hoàn tất.
+50
View File
@@ -0,0 +1,50 @@
---
description: "Cắt một clip ra khỏi video bằng cách chỉ định thời điểm bắt đầu và kết thúc."
i18n_source_hash: c84481641979
i18n_provenance: human
i18n_output_hash: 4fcd2ffb3ccc
---
# Trim Video {#trim-video}
Cắt một clip ra khỏi video bằng cách chỉ định thời điểm bắt đầu và kết thúc tính bằng giây, với tùy chọn cắt chính xác theo khung hình.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/trim-video`
Nhận multipart form data gồm một file video và một trường JSON `settings`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| startS | number | No | `0` | Thời điểm bắt đầu tính bằng giây (phải >= 0) |
| endS | number | Yes | - | Thời điểm kết thúc tính bằng giây (phải sau startS) |
| precise | boolean | No | `false` | Mã hóa lại để cắt chính xác theo khung hình thay vì tua theo keyframe |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/trim-video \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"startS": 5, "endS": 30, "precise": true}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
"originalSize": 12500000,
"processedSize": 4200000
}
```
## Notes {#notes}
- Khi `precise``false` (mặc định), công cụ dùng cách tua theo keyframe, vốn nhanh nhưng có thể bắt đầu sớm hơn thời điểm yêu cầu vài khung hình.
- Đặt `precise` thành `true` sẽ mã hóa lại đoạn để có ranh giới khung hình chính xác, nhưng mất nhiều thời gian hơn.
- Giá trị `endS` phải lớn hơn `startS`.
+51
View File
@@ -0,0 +1,51 @@
---
description: "Điều chỉnh độ sáng, độ tương phản, độ bão hòa và gamma của video."
i18n_source_hash: 40483b79d44b
i18n_provenance: human
i18n_output_hash: 65c3dcdcaba5
---
# Video Color {#video-color}
Điều chỉnh độ sáng, độ tương phản, độ bão hòa và hiệu chỉnh gamma trên video.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/video-color`
Nhận multipart form data gồm một file video và một trường JSON `settings`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| brightness | number | No | `0` | Điều chỉnh độ sáng (-1 đến 1) |
| contrast | number | No | `1` | Hệ số nhân độ tương phản (0-4) |
| saturation | number | No | `1` | Hệ số nhân độ bão hòa (0-3). Đặt về 0 để có ảnh xám |
| gamma | number | No | `1` | Hiệu chỉnh gamma (0.1-10) |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/video-color \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"brightness": 0.1, "contrast": 1.2, "saturation": 1.5}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
"originalSize": 12500000,
"processedSize": 12300000
}
```
## Notes {#notes}
- Tất cả các giá trị ở mặc định (brightness 0, contrast 1, saturation 1, gamma 1) không tạo ra thay đổi nào.
- Đặt saturation về `0` sẽ chuyển video thành ảnh xám.
- Giá trị gamma dưới 1 làm sáng vùng tối, trong khi giá trị trên 1 làm tối chúng.
@@ -0,0 +1,45 @@
---
description: "Chuẩn hóa âm lượng của video theo tiêu chuẩn phát sóng."
i18n_source_hash: 078f1e819c9a
i18n_provenance: human
i18n_output_hash: 863140216785
---
# Normalize Audio {#normalize-audio}
Chuẩn hóa âm lượng âm thanh của video theo tiêu chuẩn độ ồn phát sóng EBU R128.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/video-loudnorm`
Nhận multipart form data gồm một file video. Công cụ này không có cài đặt nào có thể cấu hình.
## Parameters {#parameters}
Công cụ này không có tham số nào. Nó áp dụng chuẩn hóa độ ồn EBU R128 cho track âm thanh.
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/video-loudnorm \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4"
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
"originalSize": 12500000,
"processedSize": 12500000
}
```
## Notes {#notes}
- Dùng bộ lọc `loudnorm` của FFmpeg nhắm tới độ ồn tích hợp -16 LUFS với đỉnh thực -1.5 dBTP và dải độ ồn 11 LU (tiêu chuẩn phát sóng EBU R128).
- Tốc độ lấy mẫu âm thanh nguồn được giữ nguyên ở đầu ra.
- Nếu video không có track âm thanh, yêu cầu trả về lỗi 400.
@@ -0,0 +1,54 @@
---
description: "Xóa metadata khỏi video và báo cáo những gì đã tìm thấy."
i18n_source_hash: 69621bfb98ca
i18n_provenance: human
i18n_output_hash: bfe8c73c659d
---
# Clean Video Metadata {#clean-video-metadata}
Xóa metadata (ngày tạo, tọa độ GPS, model máy quay, thẻ phần mềm, v.v.) khỏi video và báo cáo những gì đã được xóa.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/video-metadata`
Nhận multipart form data gồm một file video. Công cụ này không có cài đặt nào có thể cấu hình.
## Parameters {#parameters}
Công cụ này không có tham số nào. Nó xóa toàn bộ metadata khỏi container video.
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/video-metadata \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4"
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip_clean.mp4",
"originalSize": 12500000,
"processedSize": 12480000,
"metadata": {
"container": "mov,mp4,m4a,3gp,3g2,mj2",
"durationS": 42.5,
"bitrateKbps": 2350,
"streams": [
{ "type": "video", "codec": "h264", "width": 1920, "height": 1080 },
{ "type": "audio", "codec": "aac", "sampleRate": 48000 }
]
}
}
```
## Notes {#notes}
- Metadata bị xóa bao gồm dấu thời gian tạo, dữ liệu GPS/vị trí, thông tin máy quay/thiết bị và thẻ phần mềm.
- Các luồng video và âm thanh được sao chép mà không mã hóa lại, nên không có mất mát chất lượng.
- Hữu ích cho quyền riêng tư trước khi chia sẻ video công khai.
+49
View File
@@ -0,0 +1,49 @@
---
description: "Tăng tốc hoặc làm chậm một video."
i18n_source_hash: 98dfc75c0507
i18n_provenance: human
i18n_output_hash: 3c44c5c1863a
---
# Video Speed {#video-speed}
Tăng tốc hoặc làm chậm một video với tùy chọn giữ nguyên cao độ âm thanh.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/video-speed`
Nhận multipart form data gồm một file video và một trường JSON `settings`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| factor | number | No | `2` | Hệ số nhân tốc độ (0.25-4). Giá trị trên 1 tăng tốc, dưới 1 làm chậm |
| keepPitch | boolean | No | `true` | Giữ nguyên cao độ âm thanh khi thay đổi tốc độ |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/video-speed \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"factor": 0.5, "keepPitch": true}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
"originalSize": 12500000,
"processedSize": 24800000
}
```
## Notes {#notes}
- Hệ số `2` tăng gấp đôi tốc độ phát (giảm một nửa thời lượng). Hệ số `0.5` giảm một nửa tốc độ phát (tăng gấp đôi thời lượng).
- Khi `keepPitch``true`, âm thanh được kéo giãn thời gian để giọng nói nghe tự nhiên. Khi `false`, cao độ dịch chuyển theo tỷ lệ với tốc độ.
- Phạm vi hợp lệ là 0.25x đến 4x.
@@ -0,0 +1,62 @@
---
description: "Trích xuất khung hình từ video dưới dạng file ZIP chứa ảnh."
i18n_source_hash: b06f038dafb3
i18n_provenance: human
i18n_output_hash: 816aa65c95ac
---
# Video to Frames {#video-to-frames}
Trích xuất các khung hình riêng lẻ từ video và tải xuống dưới dạng file ZIP chứa ảnh PNG hoặc JPG.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/video-to-frames`
Nhận multipart form data gồm một file video và một trường JSON `settings`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| mode | string | No | `"all"` | Chế độ trích xuất: `all`, `nth`, `timestamps` |
| n | integer | No | `10` | Trích xuất mỗi khung hình thứ N (2-1000). Chỉ dùng khi mode là `"nth"` |
| timestamps | string | No | `""` | Các dấu thời gian phân tách bằng dấu phẩy tính bằng giây. Bắt buộc khi mode là `"timestamps"` |
| format | string | No | `"png"` | Định dạng ảnh cho các khung hình trích xuất: `png`, `jpg` |
## Example Request {#example-request}
Trích xuất mỗi khung hình thứ 30 dưới dạng JPG:
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/video-to-frames \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"mode": "nth", "n": 30, "format": "jpg"}'
```
Trích xuất các khung hình tại các dấu thời gian cụ thể:
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/video-to-frames \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"mode": "timestamps", "timestamps": "1.5,5,12.3"}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip-frames.zip",
"originalSize": 12500000,
"processedSize": 45000000
}
```
## Notes {#notes}
- Chế độ `all` trích xuất mọi khung hình và có thể tạo ra file ZIP rất lớn với các video dài. Dùng chế độ `nth` hoặc `timestamps` để trích xuất có chọn lọc.
- PNG giữ nguyên chất lượng đầy đủ nhưng tạo ra file lớn hơn. JPG nhỏ hơn nhưng có mất dữ liệu.
- Phản hồi tải xuống dưới dạng file ZIP chứa các file ảnh được đánh số tuần tự.
+49
View File
@@ -0,0 +1,49 @@
---
description: "Biến một clip video thành ảnh GIF động."
i18n_source_hash: f729dde8cd55
i18n_provenance: human
i18n_output_hash: 46fc0cd846d6
---
# Video to GIF {#video-to-gif}
Biến một clip video thành ảnh GIF động với tốc độ khung hình, chiều rộng, thời điểm bắt đầu và thời lượng có thể cấu hình.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/video-to-gif`
Nhận multipart form data gồm một file video và một trường JSON `settings`. Đây là endpoint bất đồng bộ - nó trả về `202 Accepted` ngay lập tức và tiến độ được truyền qua SSE tại `GET /api/v1/jobs/{jobId}/progress`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| fps | integer | No | `12` | Tốc độ khung hình đầu ra (1-30) |
| width | integer | No | `480` | Chiều rộng đầu ra tính bằng pixel (64-1280). Chiều cao đổi tỷ lệ theo tương ứng |
| startS | number | No | `0` | Thời điểm bắt đầu tính bằng giây (phải >= 0) |
| durationS | number | No | `5` | Thời lượng tính bằng giây (trên 0, tối đa 60) |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/video-to-gif \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"fps": 15, "width": 320, "startS": 2, "durationS": 8}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
## Notes {#notes}
- Giá trị `fps``width` thấp hơn tạo ra file GIF nhỏ hơn. Một GIF rộng 480px ở 12 fps thường là sự cân bằng tốt.
- Thời lượng tối đa là 60 giây. Các clip dài hơn tạo ra file rất lớn.
- Cập nhật tiến độ có sẵn qua SSE tại `GET /api/v1/jobs/{jobId}/progress` cho đến khi tác vụ hoàn tất.
+51
View File
@@ -0,0 +1,51 @@
---
description: "Chuyển đổi một clip video thành ảnh WebP động."
i18n_source_hash: 7b1a22459bd1
i18n_provenance: human
i18n_output_hash: 39aa5bc2b67b
---
# Video to WebP {#video-to-webp}
Chuyển đổi một clip video thành ảnh WebP động với tốc độ khung hình, chiều rộng và chất lượng có thể cấu hình.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/video-to-webp`
Nhận multipart form data gồm một file video và một trường JSON `settings`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| fps | integer | No | `12` | Tốc độ khung hình đầu ra (1-30) |
| width | integer | No | `480` | Chiều rộng đầu ra tính bằng pixel (16-1920). Chiều cao đổi tỷ lệ theo tương ứng |
| quality | integer | No | `75` | Chất lượng nén WebP (1-100) |
| loop | boolean | No | `true` | Lặp lại hoạt ảnh |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/video-to-webp \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"fps": 15, "width": 640, "quality": 80}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.webp",
"originalSize": 12500000,
"processedSize": 2800000
}
```
## Notes {#notes}
- WebP động tạo ra file nhỏ hơn GIF với khả năng hỗ trợ màu tốt hơn (bảng màu 24-bit so với 8-bit).
- Giá trị `quality` thấp hơn tạo ra file nhỏ hơn với cái giá là độ trung thực hình ảnh.
- Đặt `loop` thành `false` cho các hoạt ảnh chỉ phát một lần rồi dừng.
@@ -0,0 +1,58 @@
---
description: "Kết xuất watermark văn bản lên các khung hình video."
i18n_source_hash: 937bb075b894
i18n_provenance: human
i18n_output_hash: cea9f9ac47b7
---
# Watermark Video {#watermark-video}
Kết xuất watermark văn bản lên mọi khung hình của video với vị trí, kích thước, độ mờ và màu sắc có thể cấu hình.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/video/watermark-video`
Nhận multipart form data gồm một file video và một trường JSON `settings`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| text | string | Yes | - | Văn bản watermark (1-200 ký tự) |
| position | string | No | `"br"` | Vị trí trên khung hình: `tl`, `tc`, `tr`, `l`, `c`, `r`, `bl`, `bc`, `br` |
| fontSize | integer | No | `36` | Cỡ chữ tính bằng pixel (8-120) |
| opacity | number | No | `0.5` | Độ mờ watermark (0.05-1) |
| color | string | No | `"#ffffff"` | Màu hex cho văn bản (ví dụ `"#ffffff"`) |
### Position Values {#position-values}
- **tl** - Trên bên trái, **tc** - Trên giữa, **tr** - Trên bên phải
- **l** - Giữa bên trái, **c** - Chính giữa, **r** - Giữa bên phải
- **bl** - Dưới bên trái, **bc** - Dưới giữa, **br** - Dưới bên phải
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/video/watermark-video \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@clip.mp4" \
-F 'settings={"text": "PREVIEW", "position": "c", "fontSize": 48, "opacity": 0.3}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/clip.mp4",
"originalSize": 12500000,
"processedSize": 12400000
}
```
## Notes {#notes}
- Watermark được kết xuất vĩnh viễn vào các khung hình video và không thể xóa sau khi xử lý.
- Watermark dùng font sans-serif tích hợp sẵn trong FFmpeg.
- Để có watermark bằng ảnh, hãy dùng công cụ Watermark của hình ảnh.