mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
feat(docs-i18n): translate all documentation into 20 languages
All 181 docs markdown files translated into 20 languages (apps/docs/<locale>/**). Companion to the i18n code PR; admin-merged because the file count exceeds GitHub's per-PR CI trigger limit. Validated by pnpm i18n:check (all surfaces, 0 stale/missing) and a clean all-locale docs build.
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
---
|
||||
description: "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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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ụ đề.
|
||||
@@ -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ì.
|
||||
@@ -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).
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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` là `"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).
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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` là `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`.
|
||||
@@ -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.
|
||||
@@ -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` là `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ự.
|
||||
@@ -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` và `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.
|
||||
@@ -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.
|
||||
Reference in New Issue
Block a user