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: "เพิ่มแถบสีทึบเพื่อให้พอดีกับอัตราส่วนภาพเป้าหมาย"
|
||||
i18n_source_hash: b8e17dffc341
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: e7d22fd2f071
|
||||
---
|
||||
|
||||
# Aspect Pad {#aspect-pad}
|
||||
|
||||
เพิ่มแถบสีทึบแบบเลตเตอร์บ็อกซ์หรือพิลลาร์บ็อกซ์เพื่อให้วิดีโอพอดีกับอัตราส่วนภาพเป้าหมายโดยไม่ต้องครอป
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/aspect-pad`
|
||||
|
||||
รับข้อมูลแบบ multipart form data พร้อมไฟล์วิดีโอและฟิลด์ JSON `settings`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| target | string | No | `"9:16"` | อัตราส่วนภาพเป้าหมาย: `16:9`, `9:16`, `1:1`, `4:3`, `3:4` |
|
||||
| color | string | No | `"#000000"` | สีฐานสิบหกสำหรับแถบเติมขอบ (เช่น `"#000000"` สำหรับสีดำ) |
|
||||
|
||||
## 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}
|
||||
|
||||
- หากวิดีโอตรงกับอัตราส่วนภาพเป้าหมายอยู่แล้ว ไฟล์จะถูกคืนกลับมาโดยไม่เปลี่ยนแปลง
|
||||
- ใช้ `9:16` สำหรับรูปแบบโซเชียลมีเดียแนวตั้ง (TikTok, Reels, Shorts)
|
||||
- หากต้องการแถบเติมขอบแบบเบลอแทนสีทึบ ให้ใช้เครื่องมือ Blur Pad
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
description: "สร้างไฟล์คำบรรยายจากแทร็กเสียงของวิดีโอโดยใช้ AI"
|
||||
i18n_source_hash: 35b1e78501ad
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 97d932c276f1
|
||||
---
|
||||
|
||||
# Auto Subtitles {#auto-subtitles}
|
||||
|
||||
สร้างไฟล์คำบรรยายจากแทร็กเสียงของวิดีโอโดยใช้การรู้จำเสียงพูดที่ขับเคลื่อนด้วย AI (faster-whisper) รองรับการตรวจจับอัตโนมัติและ 10 ภาษาที่ระบุชัดเจน
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/auto-subtitles`
|
||||
|
||||
รับข้อมูลแบบ multipart form data พร้อมไฟล์วิดีโอและฟิลด์ JSON `settings` นี่เป็นเอนด์พอยต์แบบอะซิงโครนัส คืนค่า `202 Accepted` ทันทีและสตรีมความคืบหน้าผ่าน SSE ที่ `GET /api/v1/jobs/{jobId}/progress`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| language | string | No | `"auto"` | ภาษาของเสียงพูด: `auto`, `en`, `de`, `fr`, `es`, `zh`, `ja`, `ko`, `id`, `th`, `vi` |
|
||||
| format | string | No | `"srt"` | รูปแบบคำบรรยายผลลัพธ์: `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}
|
||||
|
||||
- นี่เป็นเครื่องมือ AI ที่ต้องติดตั้งชุดฟีเจอร์ **transcription** หากยังไม่ได้ติดตั้งชุดฟีเจอร์ API จะคืนค่า `501 Feature Not Installed` พร้อมคำแนะนำในการติดตั้งผ่าน admin UI
|
||||
- ตัวเลือกภาษา `auto` ใช้การตรวจจับภาษาในตัวของ whisper การระบุภาษาชัดเจนจะช่วยเพิ่มความแม่นยำและความเร็ว
|
||||
- SRT เป็นรูปแบบคำบรรยายที่ได้รับการรองรับกว้างขวางที่สุด ส่วน VTT (WebVTT) เป็นมาตรฐานสำหรับโปรแกรมเล่นวิดีโอบนเว็บ
|
||||
- การอัปเดตความคืบหน้ามีให้ผ่าน SSE ที่ `GET /api/v1/jobs/{jobId}/progress` จนกว่างานจะเสร็จสมบูรณ์
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
description: "เติมแถบขอบด้วยสำเนาที่เบลอของวิดีโอ"
|
||||
i18n_source_hash: 0c72aaefc6de
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 8d840178f18a
|
||||
---
|
||||
|
||||
# Blur Pad {#blur-pad}
|
||||
|
||||
ปรับวิดีโอให้พอดีกับอัตราส่วนภาพเป้าหมายโดยเติมพื้นที่ขอบด้วยสำเนาของวิดีโอที่เบลอและปรับขนาด แทนที่จะเป็นแถบสีทึบ
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/blur-pad`
|
||||
|
||||
รับข้อมูลแบบ multipart form data พร้อมไฟล์วิดีโอและฟิลด์ JSON `settings`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| target | string | No | `"16:9"` | อัตราส่วนภาพเป้าหมาย: `16:9`, `9:16`, `1:1`, `4:3`, `3:4` |
|
||||
| blur | number | No | `20` | ค่าซิกมาของการเบลอแบบเกาส์เซียนสำหรับพื้นหลัง (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}
|
||||
|
||||
- ค่าเบลอที่สูงขึ้นจะให้พื้นหลังที่นุ่มนวลและเป็นนามธรรมมากขึ้น ค่าที่ต่ำกว่าจะคงรายละเอียดให้มองเห็นได้มากขึ้น
|
||||
- หากวิดีโอตรงกับอัตราส่วนภาพเป้าหมายอยู่แล้ว ไฟล์จะถูกคืนกลับมาโดยไม่เปลี่ยนแปลง
|
||||
- หากต้องการแถบเติมขอบแบบสีทึบ ให้ใช้เครื่องมือ Aspect Pad แทน
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
description: "เรนเดอร์คำบรรยายลงบนเฟรมของวิดีโออย่างถาวร"
|
||||
i18n_source_hash: 2d3111589db0
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: a2f5b4e33234
|
||||
---
|
||||
|
||||
# Burn Subtitles {#burn-subtitles}
|
||||
|
||||
เรนเดอร์ (ฝังถาวร) คำบรรยายจากไฟล์ SRT, VTT หรือ ASS ลงบนทุกเฟรมของวิดีโอ
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/burn-subtitles`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอและไฟล์คำบรรยาย นี่คือ endpoint แบบ async โดยจะคืนค่า `202 Accepted` ทันที และความคืบหน้าจะถูกสตรีมผ่าน SSE ที่ `GET /api/v1/jobs/{jobId}/progress`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| fontSize | integer | No | `24` | ขนาดฟอนต์ของคำบรรยายเป็นพิกเซล (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}
|
||||
|
||||
- อัปโหลดสองไฟล์: ไฟล์แรกต้องเป็นวิดีโอ ไฟล์ที่สองต้องเป็นไฟล์คำบรรยาย (.srt, .vtt หรือ .ass)
|
||||
- คำบรรยายที่ฝังลงไปจะเป็นส่วนหนึ่งของวิดีโออย่างถาวรและผู้ชมไม่สามารถปิดได้ หากต้องการคำบรรยายที่เปิด/ปิดได้ ให้ใช้เครื่องมือ Embed Subtitles แทน
|
||||
- การอัปเดตความคืบหน้าดูได้ผ่าน SSE ที่ `GET /api/v1/jobs/{jobId}/progress` จนกว่างานจะเสร็จสมบูรณ์
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
description: "เปลี่ยนอัตราเฟรมของวิดีโอ"
|
||||
i18n_source_hash: 2bffbd04a1cb
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 19bbfa611ccc
|
||||
---
|
||||
|
||||
# Change FPS {#change-fps}
|
||||
|
||||
เปลี่ยนอัตราเฟรมของวิดีโอเป็นค่าเป้าหมายระหว่าง 1 ถึง 120 fps
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/change-fps`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอและฟิลด์ JSON `settings`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| fps | number | No | `30` | อัตราเฟรมเป้าหมาย (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}
|
||||
|
||||
- การลดอัตราเฟรมจะตัดเฟรมออกและลดขนาดไฟล์ การเพิ่มอัตราเฟรมจะทำเฟรมซ้ำเพื่อเติมช่องว่างแต่ไม่ได้เพิ่มรายละเอียดการเคลื่อนไหวจริง
|
||||
- ค่าเป้าหมายที่พบบ่อย: 24 (โรงภาพยนตร์), 30 (เว็บ/การออกอากาศ), 60 (การเล่นที่ราบรื่น)
|
||||
- แทร็กเสียงจะถูกคงไว้ที่อัตราการสุ่มตัวอย่างเดิม
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
description: "ลดขนาดไฟล์วิดีโอพร้อมควบคุมคุณภาพ"
|
||||
i18n_source_hash: 9cc1f1acf74e
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: bb162b8009ff
|
||||
---
|
||||
|
||||
# Compress Video {#compress-video}
|
||||
|
||||
ลดขนาดไฟล์วิดีโอโดยใช้ระดับการบีบอัดที่กำหนดค่าได้ และการลดความละเอียดเสริม
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/compress-video`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอและฟิลด์ JSON `settings` นี่คือ endpoint แบบ async โดยจะคืนค่า `202 Accepted` ทันที และความคืบหน้าจะถูกสตรีมผ่าน SSE ที่ `GET /api/v1/jobs/{jobId}/progress`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| quality | string | No | `"balanced"` | ระดับการบีบอัด: `light`, `balanced`, `strong` |
|
||||
| resolution | string | No | `"original"` | ความละเอียดเอาต์พุต: `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}
|
||||
|
||||
- พรีเซ็ต `light` คงคุณภาพให้ใกล้เคียงต้นฉบับ ส่วนพรีเซ็ต `strong` ลดขนาดไฟล์อย่างมากโดยแลกกับความคมชัดของภาพ
|
||||
- การลดความละเอียด (เช่น จาก 4K เป็น 720p) จะเสริมกับการบีบอัดเพื่อลดขนาดได้อย่างมีนัยสำคัญ
|
||||
- การอัปเดตความคืบหน้าดูได้ผ่าน SSE ที่ `GET /api/v1/jobs/{jobId}/progress` จนกว่างานจะเสร็จสมบูรณ์
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
description: "แปลงวิดีโอระหว่าง MP4, MOV, WebM, AVI และ MKV"
|
||||
i18n_source_hash: 8f9e6418b1c6
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 986fc3037ab7
|
||||
---
|
||||
|
||||
# Convert Video {#convert-video}
|
||||
|
||||
แปลงวิดีโอระหว่างรูปแบบ MP4, MOV, WebM, AVI และ MKV พร้อมพรีเซ็ตคุณภาพที่กำหนดค่าได้
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/convert-video`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอและฟิลด์ JSON `settings` นี่คือ endpoint แบบ async โดยจะคืนค่า `202 Accepted` ทันที และความคืบหน้าจะถูกสตรีมผ่าน SSE ที่ `GET /api/v1/jobs/{jobId}/progress`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| format | string | No | `"mp4"` | รูปแบบเอาต์พุต: `mp4`, `mov`, `webm`, `avi`, `mkv` |
|
||||
| quality | string | No | `"balanced"` | พรีเซ็ตคุณภาพ: `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}
|
||||
|
||||
- พรีเซ็ตคุณภาพ `high` ให้ความคมชัดของภาพดีที่สุดแต่ไฟล์ใหญ่กว่า ส่วนพรีเซ็ต `small` บีบอัดอย่างมากเพื่อขนาดไฟล์ที่เล็กที่สุด
|
||||
- เอาต์พุต WebM ใช้การเข้ารหัส VP9 ส่วน MP4 และ MOV ใช้ H.264 ส่วน AVI และ MKV มีให้ใช้สำหรับเวิร์กโฟลว์แบบเก่าหรือการเก็บถาวร
|
||||
- การอัปเดตความคืบหน้าดูได้ผ่าน SSE ที่ `GET /api/v1/jobs/{jobId}/progress` จนกว่างานจะเสร็จสมบูรณ์
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
description: "ครอบตัดพื้นที่ออกจากวิดีโอ"
|
||||
i18n_source_hash: fab11f71a202
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: eff4173c6cb4
|
||||
---
|
||||
|
||||
# Crop Video {#crop-video}
|
||||
|
||||
ครอบตัดพื้นที่รูปสี่เหลี่ยมออกจากวิดีโอโดยระบุขนาดและตำแหน่งของพื้นที่นั้น
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/crop-video`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอและฟิลด์ JSON `settings`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| width | integer | Yes | - | ความกว้างของพื้นที่ครอบตัดเป็นพิกเซล (ต่ำสุด 16) |
|
||||
| height | integer | Yes | - | ความสูงของพื้นที่ครอบตัดเป็นพิกเซล (ต่ำสุด 16) |
|
||||
| x | integer | No | `0` | ระยะเลื่อนแนวนอนจากมุมบนซ้าย |
|
||||
| y | integer | No | `0` | ระยะเลื่อนแนวตั้งจากมุมบนซ้าย |
|
||||
|
||||
## 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}
|
||||
|
||||
- พื้นที่ครอบตัดต้องอยู่ภายในขนาดของวิดีโอ หาก `x + width` หรือ `y + height` เกินขนาดต้นฉบับ คำขอจะคืนค่าข้อผิดพลาด 400
|
||||
- ขนาดครอบตัดต่ำสุดคือ 16x16 พิกเซล
|
||||
- ขนาดจะถูกปัดเป็นเลขคู่ตามที่โคเดกวิดีโอส่วนใหญ่กำหนด
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
description: "รวมแทร็กคำบรรยายเข้าไปในคอนเทนเนอร์วิดีโอ"
|
||||
i18n_source_hash: be272730fff5
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 0482713d4e1b
|
||||
---
|
||||
|
||||
# Embed Subtitles {#embed-subtitles}
|
||||
|
||||
รวมไฟล์คำบรรยายเข้าไปในคอนเทนเนอร์วิดีโอเป็นแทร็กคำบรรยายแบบ soft ที่ผู้ชมสามารถเปิดหรือปิดได้
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/embed-subtitles`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอและไฟล์คำบรรยาย รวมถึงฟิลด์ JSON `settings`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| language | string | No | `"eng"` | รหัสภาษา ISO 639-2/B (ตัวพิมพ์เล็ก 3 ตัว เช่น `"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}
|
||||
|
||||
- อัปโหลดสองไฟล์: ไฟล์แรกต้องเป็นวิดีโอ ไฟล์ที่สองต้องเป็นไฟล์คำบรรยาย (.srt, .vtt หรือ .ass)
|
||||
- คำบรรยายแบบฝัง (soft) ผู้ชมสามารถเปิด/ปิดได้ในโปรแกรมเล่นสื่อของตน หากต้องการคำบรรยายที่มองเห็นอย่างถาวร ให้ใช้เครื่องมือ Burn Subtitles แทน
|
||||
- รหัสภาษาจะถูกจัดเก็บเป็นเมทาดาทาในคอนเทนเนอร์และช่วยให้โปรแกรมเล่นสื่อระบุป้ายกำกับแทร็กคำบรรยายได้
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
description: "ดึงแทร็กเสียงออกจากวิดีโอ"
|
||||
i18n_source_hash: f5b8330a5f89
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: a531d61f0f39
|
||||
---
|
||||
|
||||
# Extract Audio {#extract-audio}
|
||||
|
||||
ดึงแทร็กเสียงออกจากไฟล์วิดีโอและบันทึกเป็น MP3, WAV, M4A หรือ OGG
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/extract-audio`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอและฟิลด์ JSON `settings`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| format | string | No | `"mp3"` | รูปแบบเสียงเอาต์พุต: `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}
|
||||
|
||||
- หากวิดีโอไม่มีแทร็กเสียง คำขอจะคืนค่าข้อผิดพลาด 400
|
||||
- MP3 เป็นแบบ lossy แต่รองรับได้อย่างกว้างขวาง WAV เป็นแบบ lossless แต่ไฟล์ใหญ่ M4A (AAC) ให้สมดุลที่ดีระหว่างคุณภาพและขนาด OGG มีให้ใช้สำหรับเวิร์กโฟลว์โคเดกแบบเปิด
|
||||
- เมื่อเสียงต้นฉบับเป็น AAC อยู่แล้วและรูปแบบเอาต์พุตเป็น M4A สตรีมเสียงจะถูกคัดลอกโดยไม่เข้ารหัสใหม่
|
||||
@@ -0,0 +1,45 @@
|
||||
---
|
||||
description: "ดึงแทร็กคำบรรยายออกจากวิดีโอเป็นไฟล์ SRT"
|
||||
i18n_source_hash: 48db860f6676
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: cc48f65d3c4f
|
||||
---
|
||||
|
||||
# Extract Subtitles {#extract-subtitles}
|
||||
|
||||
ดึงแทร็กคำบรรยายที่ฝังอยู่ออกจากคอนเทนเนอร์วิดีโอและดาวน์โหลดเป็นไฟล์ SRT
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/extract-subtitles`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอ เครื่องมือนี้ไม่มีการตั้งค่าที่กำหนดค่าได้
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
เครื่องมือนี้ไม่มีพารามิเตอร์ โดยจะดึงแทร็กคำบรรยายแทร็กแรกที่พบในคอนเทนเนอร์วิดีโอ
|
||||
|
||||
## 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}
|
||||
|
||||
- วิดีโอต้องมีแทร็กคำบรรยายที่ฝังอยู่ หากไม่พบแทร็กคำบรรยาย คำขอจะคืนค่าข้อผิดพลาด 400
|
||||
- หากวิดีโอมีแทร็กคำบรรยายหลายแทร็ก จะดึงแทร็กแรกออกมา
|
||||
- รูปแบบเอาต์พุตเป็น SRT ไม่ว่ารูปแบบคำบรรยายเดิมในคอนเทนเนอร์จะเป็นอะไร
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
description: "แปลง GIF แบบเคลื่อนไหวเป็นวิดีโอ MP4, WebM หรือ MOV"
|
||||
i18n_source_hash: c3737b31146d
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 81937820f0ee
|
||||
---
|
||||
|
||||
# GIF to Video {#gif-to-video}
|
||||
|
||||
แปลง GIF แบบเคลื่อนไหวเป็นไฟล์วิดีโอ MP4, WebM หรือ MOV ที่กะทัดรัด
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/gif-to-video`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์ GIF และฟิลด์ JSON `settings`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| format | string | No | `"mp4"` | รูปแบบเอาต์พุต: `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}
|
||||
|
||||
- การแปลง GIF เป็นวิดีโอโดยทั่วไปจะลดขนาดไฟล์ลง 80-90% ในขณะที่คงคุณภาพของภาพไว้เท่าเดิม
|
||||
- รับเฉพาะไฟล์ GIF แบบเคลื่อนไหว ภาพนิ่งควรใช้เครื่องมือ Convert สำหรับรูปภาพ
|
||||
- MP4 และ MOV ใช้การเข้ารหัส H.264 ส่วน WebM ใช้ VP9
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
description: "เปลี่ยนชุดรูปภาพเป็นวิดีโอสไลด์โชว์"
|
||||
i18n_source_hash: 2c6f183feb6d
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: aef2becd4214
|
||||
---
|
||||
|
||||
# Images to Video {#images-to-video}
|
||||
|
||||
เปลี่ยนชุดรูปภาพเป็นวิดีโอสไลด์โชว์ พร้อมกำหนดค่าระยะเวลาต่อรูป ความละเอียด และอัตราเฟรมได้
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/images-to-video`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์รูปภาพตั้งแต่สองไฟล์ขึ้นไปและฟิลด์ JSON `settings`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| secondsPerImage | number | No | `2` | ระยะเวลาแสดงต่อรูปเป็นวินาที (0.5-10) |
|
||||
| resolution | string | No | `"720p"` | ความละเอียดเอาต์พุต: `1080p`, `720p`, `square` |
|
||||
| fps | integer | No | `30` | อัตราเฟรมเอาต์พุต (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}
|
||||
|
||||
- รับไฟล์รูปภาพ 2-60 ไฟล์ต่อคำขอ รูปภาพจะปรากฏในวิดีโอตามลำดับการอัปโหลด
|
||||
- รูปภาพจะถูกปรับขนาดและเติมขอบให้พอดีกับความละเอียดเป้าหมายโดยคงอัตราส่วนภาพไว้
|
||||
- ตัวเลือกความละเอียด `square` จะสร้างวิดีโอขนาด 1080x1080 ซึ่งมีประโยชน์สำหรับโซเชียลมีเดีย
|
||||
- รูปแบบเอาต์พุตเป็น MP4 (H.264) เสมอ
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
description: "รวมคลิปวิดีโอหลายคลิปเป็นไฟล์เดียว"
|
||||
i18n_source_hash: 90463dfbb580
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 7ad888455b63
|
||||
---
|
||||
|
||||
# Merge Videos {#merge-videos}
|
||||
|
||||
รวมคลิปวิดีโอหลายคลิปเป็นไฟล์ MP4 เดียว อินพุตทั้งหมดจะถูกปรับให้เป็นความละเอียดของวิดีโอแรกและ 30 fps
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/merge-videos`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอตั้งแต่สองไฟล์ขึ้นไป นี่คือ endpoint แบบ async โดยจะคืนค่า `202 Accepted` ทันที และความคืบหน้าจะถูกสตรีมผ่าน SSE ที่ `GET /api/v1/jobs/{jobId}/progress`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
เครื่องมือนี้ไม่มีพารามิเตอร์การตั้งค่า อัปโหลดไฟล์วิดีโอ 2-10 ไฟล์เป็นหลายส่วน `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}
|
||||
|
||||
- คลิปจะถูกต่อเข้าด้วยกันตามลำดับที่อัปโหลด
|
||||
- คลิปทั้งหมดจะถูกเข้ารหัสใหม่ให้ตรงกับความละเอียด อัตราเฟรม (30 fps) และโคเดก (H.264) ของคลิปแรก อินพุตที่ไม่ตรงกันจะถูกปรับให้เป็นมาตรฐานโดยอัตโนมัติ
|
||||
- รับไฟล์วิดีโอ 2-10 ไฟล์ต่อคำขอ
|
||||
- การอัปเดตความคืบหน้าดูได้ผ่าน SSE ที่ `GET /api/v1/jobs/{jobId}/progress` จนกว่างานจะเสร็จสมบูรณ์
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
description: "ลบแทร็กเสียงออกจากวิดีโอ"
|
||||
i18n_source_hash: 9a0c60bbcaa3
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 26ff9775dcf7
|
||||
---
|
||||
|
||||
# Mute Video {#mute-video}
|
||||
|
||||
ลบแทร็กเสียงออกจากวิดีโอ เหลือไว้เพียงสตรีมภาพ
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/mute-video`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอ เครื่องมือนี้ไม่มีการตั้งค่าที่กำหนดค่าได้
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
เครื่องมือนี้ไม่มีพารามิเตอร์ โดยจะตัดแทร็กเสียงออกจากวิดีโอที่อัปโหลด
|
||||
|
||||
## 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}
|
||||
|
||||
- สตรีมวิดีโอจะถูกคัดลอกโดยไม่เข้ารหัสใหม่ จึงไม่มีการสูญเสียคุณภาพ
|
||||
- หากวิดีโออินพุตไม่มีแทร็กเสียง ไฟล์จะถูกคืนค่ากลับมาโดยไม่เปลี่ยนแปลง
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
description: "สลับแทร็กเสียงของวิดีโอด้วยไฟล์อื่น"
|
||||
i18n_source_hash: fabc2a953103
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: b4c67b682f10
|
||||
---
|
||||
|
||||
# Replace Audio {#replace-audio}
|
||||
|
||||
สลับแทร็กเสียงของวิดีโอด้วยไฟล์เสียง อัปโหลดทั้งไฟล์วิดีโอและไฟล์เสียง
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/replace-audio`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมสองไฟล์พอดี: ไฟล์วิดีโอตามด้วยไฟล์เสียง
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
เครื่องมือนี้ไม่มีพารามิเตอร์การตั้งค่า อัปโหลดไฟล์วิดีโอและไฟล์เสียงเป็นสองส่วน `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}
|
||||
|
||||
- ต้องอัปโหลดสองไฟล์พอดี: ไฟล์แรกต้องเป็นวิดีโอ ไฟล์ที่สองต้องเป็นไฟล์เสียง
|
||||
- หากไฟล์เสียงยาวกว่าวิดีโอ จะถูกตัดให้ตรงกับระยะเวลาของวิดีโอ หากสั้นกว่า วิดีโอส่วนที่เหลือจะเล่นแบบเงียบ
|
||||
- สตรีมวิดีโอจะถูกคัดลอกโดยไม่เข้ารหัสใหม่ จึงไม่มีการสูญเสียคุณภาพวิดีโอ
|
||||
@@ -0,0 +1,61 @@
|
||||
---
|
||||
description: "ปรับสเกลวิดีโอเป็นความละเอียดใหม่หรือขนาดพรีเซ็ต"
|
||||
i18n_source_hash: bb1f67871fea
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: d8c1f10a9885
|
||||
---
|
||||
|
||||
# Resize Video {#resize-video}
|
||||
|
||||
ปรับสเกลวิดีโอเป็นความละเอียดใหม่โดยใช้ขนาดพิกเซลกำหนดเองหรือพรีเซ็ตมาตรฐาน
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/resize-video`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอและฟิลด์ JSON `settings`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| width | integer | No | - | ความกว้างเป้าหมายเป็นพิกเซล (16-7680) |
|
||||
| height | integer | No | - | ความสูงเป้าหมายเป็นพิกเซล (16-4320) |
|
||||
| preset | string | No | `"custom"` | พรีเซ็ตความละเอียด: `custom`, `2160p`, `1440p`, `1080p`, `720p`, `480p`, `360p` |
|
||||
|
||||
เมื่อ `preset` เป็น `"custom"` ต้องระบุ `width` หรือ `height` อย่างน้อยหนึ่งค่า อีกมิติหนึ่งจะปรับสเกลตามสัดส่วน
|
||||
|
||||
## 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"}'
|
||||
```
|
||||
|
||||
ปรับขนาดเป็นมิติกำหนดเอง:
|
||||
|
||||
```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}
|
||||
|
||||
- ค่าพรีเซ็ตแมปไปยังความสูงมาตรฐาน (เช่น `720p` = 1280x720, `1080p` = 1920x1080) ความกว้างจะปรับสเกลตามสัดส่วนจากอัตราส่วนภาพต้นฉบับ
|
||||
- ขนาดจะถูกปัดเป็นเลขคู่ตามที่โคเดกวิดีโอส่วนใหญ่กำหนด
|
||||
- ความละเอียดสูงสุดที่รองรับคือ 7680x4320 (8K UHD)
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
description: "เล่นคลิปวิดีโอย้อนกลับ"
|
||||
i18n_source_hash: 98226f4e092d
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: f6586eb6107b
|
||||
---
|
||||
|
||||
# Reverse Video {#reverse-video}
|
||||
|
||||
เล่นคลิปวิดีโอย้อนกลับ แทร็กเสียงก็จะถูกย้อนกลับด้วย
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/reverse-video`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอ เครื่องมือนี้ไม่มีการตั้งค่าที่กำหนดค่าได้
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
เครื่องมือนี้ไม่มีพารามิเตอร์ โดยจะย้อนกลับทั้งวิดีโอ
|
||||
|
||||
## 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}
|
||||
|
||||
- จำกัดที่คลิปยาวไม่เกิน 5 นาที วิดีโอที่ยาวกว่านั้นจะถูกปฏิเสธด้วยข้อผิดพลาด 400
|
||||
- ทั้งแทร็กวิดีโอและเสียงจะถูกย้อนกลับ หากต้องการย้อนวิดีโอโดยไม่มีเสียง ให้ปิดเสียงก่อน
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
description: "หมุนหรือพลิกวิดีโอ"
|
||||
i18n_source_hash: cf9620ca62c7
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: be3d42db6f24
|
||||
---
|
||||
|
||||
# Rotate Video {#rotate-video}
|
||||
|
||||
หมุนวิดีโอ 90, 180 หรือ 270 องศา หรือพลิกในแนวนอนหรือแนวตั้ง
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/rotate-video`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอและฟิลด์ JSON `settings`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| transform | string | Yes | - | การแปลงที่จะใช้: `cw90`, `ccw90`, `180`, `hflip`, `vflip` |
|
||||
|
||||
### Transform Values {#transform-values}
|
||||
|
||||
- **cw90** - หมุน 90 องศาตามเข็มนาฬิกา
|
||||
- **ccw90** - หมุน 90 องศาทวนเข็มนาฬิกา
|
||||
- **180** - หมุน 180 องศา
|
||||
- **hflip** - พลิกแนวนอน (กระจก)
|
||||
- **vflip** - พลิกแนวตั้ง
|
||||
|
||||
## 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}
|
||||
|
||||
- การหมุน 90 หรือ 270 องศาจะสลับความกว้างและความสูงของวิดีโอ
|
||||
- การพลิก (hflip, vflip) ไม่เปลี่ยนขนาดของวิดีโอ
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
description: "ลดการสั่นของกล้องด้วยการปรับเสถียรภาพแบบสองรอบ"
|
||||
i18n_source_hash: ec908e91a752
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: cf41d5eb1bda
|
||||
---
|
||||
|
||||
# Stabilize Video {#stabilize-video}
|
||||
|
||||
ลดการสั่นของกล้องในภาพที่ถ่ายด้วยมือโดยใช้การปรับเสถียรภาพแบบสองรอบ vidstab ของ FFmpeg
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/stabilize-video`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอและฟิลด์ JSON `settings` นี่คือ endpoint แบบ async โดยจะคืนค่า `202 Accepted` ทันที และความคืบหน้าจะถูกสตรีมผ่าน SSE ที่ `GET /api/v1/jobs/{jobId}/progress`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| smoothing | integer | No | `15` | ขนาดหน้าต่างการปรับให้เรียบเป็นเฟรม (5-60) ค่าที่สูงขึ้นจะให้การเคลื่อนไหวที่เรียบเนียนกว่า |
|
||||
|
||||
## 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}
|
||||
|
||||
- การปรับเสถียรภาพเป็นกระบวนการสองรอบ: รอบแรกวิเคราะห์การเคลื่อนไหวของกล้อง และรอบที่สองใช้การแก้ไข กระบวนการนี้ใช้เวลาราวสองเท่าของเครื่องมือแบบรอบเดียว
|
||||
- ค่าการปรับให้เรียบที่สูงขึ้นจะลดการสั่นได้มากกว่าแต่อาจทำให้เกิดการครอบตัดซูมเล็กน้อยที่ขอบ
|
||||
- การอัปเดตความคืบหน้าดูได้ผ่าน SSE ที่ `GET /api/v1/jobs/{jobId}/progress` จนกว่างานจะเสร็จสมบูรณ์
|
||||
@@ -0,0 +1,50 @@
|
||||
---
|
||||
description: "ตัดคลิปออกจากวิดีโอโดยระบุเวลาเริ่มต้นและสิ้นสุด"
|
||||
i18n_source_hash: c84481641979
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: e5befa0b31e0
|
||||
---
|
||||
|
||||
# Trim Video {#trim-video}
|
||||
|
||||
ตัดคลิปออกจากวิดีโอโดยระบุเวลาเริ่มต้นและสิ้นสุดเป็นวินาที พร้อมตัวเลือกสำหรับการตัดที่แม่นยำระดับเฟรม
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/trim-video`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอและฟิลด์ JSON `settings`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| startS | number | No | `0` | เวลาเริ่มต้นเป็นวินาที (ต้อง >= 0) |
|
||||
| endS | number | Yes | - | เวลาสิ้นสุดเป็นวินาที (ต้องอยู่หลัง startS) |
|
||||
| precise | boolean | No | `false` | เข้ารหัสใหม่เพื่อการตัดที่แม่นยำระดับเฟรมแทนการค้นหาตาม 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}
|
||||
|
||||
- เมื่อ `precise` เป็น `false` (ค่าเริ่มต้น) เครื่องมือจะใช้การค้นหาตาม keyframe ซึ่งเร็วแต่อาจเริ่มก่อนเวลาที่ร้องขอไม่กี่เฟรม
|
||||
- การตั้ง `precise` เป็น `true` จะเข้ารหัสส่วนดังกล่าวใหม่เพื่อขอบเขตเฟรมที่แม่นยำ แต่ใช้เวลานานกว่า
|
||||
- ค่า `endS` ต้องมากกว่า `startS`
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
description: "ปรับความสว่าง คอนทราสต์ ความอิ่มตัวของสี และแกมมาของวิดีโอ"
|
||||
i18n_source_hash: 40483b79d44b
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: a91bf630c222
|
||||
---
|
||||
|
||||
# Video Color {#video-color}
|
||||
|
||||
ปรับความสว่าง คอนทราสต์ ความอิ่มตัวของสี และการแก้ไขแกมมาบนวิดีโอ
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-color`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอและฟิลด์ JSON `settings`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| brightness | number | No | `0` | การปรับความสว่าง (-1 ถึง 1) |
|
||||
| contrast | number | No | `1` | ตัวคูณคอนทราสต์ (0-4) |
|
||||
| saturation | number | No | `1` | ตัวคูณความอิ่มตัวของสี (0-3) ตั้งเป็น 0 สำหรับภาพขาวดำ |
|
||||
| gamma | number | No | `1` | การแก้ไขแกมมา (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}
|
||||
|
||||
- ค่าทั้งหมดที่ค่าเริ่มต้น (brightness 0, contrast 1, saturation 1, gamma 1) จะไม่เกิดการเปลี่ยนแปลง
|
||||
- การตั้งความอิ่มตัวของสีเป็น `0` จะแปลงวิดีโอเป็นภาพขาวดำ
|
||||
- ค่าแกมมาต่ำกว่า 1 จะทำให้เงาสว่างขึ้น ในขณะที่ค่าสูงกว่า 1 จะทำให้เงามืดลง
|
||||
@@ -0,0 +1,45 @@
|
||||
---
|
||||
description: "ปรับระดับความดังเสียงของวิดีโอให้เป็นมาตรฐานการออกอากาศ"
|
||||
i18n_source_hash: 078f1e819c9a
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 65ca4caaefc8
|
||||
---
|
||||
|
||||
# Normalize Audio {#normalize-audio}
|
||||
|
||||
ปรับระดับความดังเสียงของวิดีโอให้เป็นมาตรฐานความดังการออกอากาศ EBU R128
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-loudnorm`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอ เครื่องมือนี้ไม่มีการตั้งค่าที่กำหนดค่าได้
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
เครื่องมือนี้ไม่มีพารามิเตอร์ โดยจะใช้การปรับระดับความดัง EBU R128 กับแทร็กเสียง
|
||||
|
||||
## 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}
|
||||
|
||||
- ใช้ฟิลเตอร์ `loudnorm` ของ FFmpeg โดยกำหนดเป้าหมายความดังรวม -16 LUFS พร้อม true peak -1.5 dBTP และช่วงความดัง 11 LU (มาตรฐานการออกอากาศ EBU R128)
|
||||
- อัตราการสุ่มตัวอย่างเสียงต้นฉบับจะถูกคงไว้ในเอาต์พุต
|
||||
- หากวิดีโอไม่มีแทร็กเสียง คำขอจะคืนค่าข้อผิดพลาด 400
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
description: "ลบเมทาดาทาออกจากวิดีโอและรายงานสิ่งที่พบ"
|
||||
i18n_source_hash: 69621bfb98ca
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 82fb16d4f68a
|
||||
---
|
||||
|
||||
# Clean Video Metadata {#clean-video-metadata}
|
||||
|
||||
ลบเมทาดาทา (วันที่สร้าง พิกัด GPS รุ่นกล้อง แท็กซอฟต์แวร์ ฯลฯ) ออกจากวิดีโอและรายงานสิ่งที่ถูกลบ
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-metadata`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอ เครื่องมือนี้ไม่มีการตั้งค่าที่กำหนดค่าได้
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
เครื่องมือนี้ไม่มีพารามิเตอร์ โดยจะลบเมทาดาทาทั้งหมดออกจากคอนเทนเนอร์วิดีโอ
|
||||
|
||||
## 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}
|
||||
|
||||
- เมทาดาทาที่ถูกลบรวมถึงเวลาที่สร้าง ข้อมูล GPS/ตำแหน่ง ข้อมูลกล้อง/อุปกรณ์ และแท็กซอฟต์แวร์
|
||||
- สตรีมวิดีโอและเสียงจะถูกคัดลอกโดยไม่เข้ารหัสใหม่ จึงไม่มีการสูญเสียคุณภาพ
|
||||
- มีประโยชน์ต่อความเป็นส่วนตัวก่อนแชร์วิดีโอสู่สาธารณะ
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
description: "เร่งความเร็วหรือชะลอความเร็ววิดีโอ"
|
||||
i18n_source_hash: 98dfc75c0507
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 140ec89a2608
|
||||
---
|
||||
|
||||
# Video Speed {#video-speed}
|
||||
|
||||
เร่งความเร็วหรือชะลอความเร็ววิดีโอ พร้อมตัวเลือกในการคงระดับเสียง (pitch) ของเสียง
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-speed`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอและฟิลด์ JSON `settings`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| factor | number | No | `2` | ตัวคูณความเร็ว (0.25-4) ค่าที่มากกว่า 1 จะเร่งความเร็ว ค่าที่น้อยกว่า 1 จะชะลอความเร็ว |
|
||||
| keepPitch | boolean | No | `true` | คงระดับเสียง (pitch) ไว้เมื่อเปลี่ยนความเร็ว |
|
||||
|
||||
## 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}
|
||||
|
||||
- factor `2` จะเพิ่มความเร็วการเล่นเป็นสองเท่า (ลดระยะเวลาลงครึ่งหนึ่ง) factor `0.5` จะลดความเร็วการเล่นลงครึ่งหนึ่ง (เพิ่มระยะเวลาเป็นสองเท่า)
|
||||
- เมื่อ `keepPitch` เป็น `true` เสียงจะถูกยืดตามเวลาเพื่อให้เสียงพูดฟังดูเป็นธรรมชาติ เมื่อ `false` ระดับเสียงจะเปลี่ยนตามสัดส่วนกับความเร็ว
|
||||
- ช่วงที่ถูกต้องคือ 0.25x ถึง 4x
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
description: "ดึงเฟรมออกจากวิดีโอเป็นไฟล์ ZIP ของรูปภาพ"
|
||||
i18n_source_hash: b06f038dafb3
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: d417bfb81fba
|
||||
---
|
||||
|
||||
# Video to Frames {#video-to-frames}
|
||||
|
||||
ดึงเฟรมแต่ละเฟรมออกจากวิดีโอและดาวน์โหลดเป็นไฟล์ ZIP ของรูปภาพ PNG หรือ JPG
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-to-frames`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอและฟิลด์ JSON `settings`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| mode | string | No | `"all"` | โหมดการดึง: `all`, `nth`, `timestamps` |
|
||||
| n | integer | No | `10` | ดึงทุกเฟรมที่ N (2-1000) ใช้เฉพาะเมื่อ mode เป็น `"nth"` |
|
||||
| timestamps | string | No | `""` | เวลาประทับคั่นด้วยจุลภาคเป็นวินาที จำเป็นเมื่อ mode เป็น `"timestamps"` |
|
||||
| format | string | No | `"png"` | รูปแบบรูปภาพสำหรับเฟรมที่ดึง: `png`, `jpg` |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
ดึงทุกเฟรมที่ 30 เป็น 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"}'
|
||||
```
|
||||
|
||||
ดึงเฟรมที่เวลาประทับที่ระบุ:
|
||||
|
||||
```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}
|
||||
|
||||
- โหมด `all` จะดึงทุกเฟรมและอาจสร้างไฟล์ ZIP ที่ใหญ่มากสำหรับวิดีโอยาว ใช้โหมด `nth` หรือ `timestamps` สำหรับการดึงแบบเลือก
|
||||
- PNG คงคุณภาพเต็มแต่สร้างไฟล์ใหญ่กว่า JPG เล็กกว่าแต่เป็นแบบ lossy
|
||||
- การตอบกลับจะดาวน์โหลดเป็นไฟล์ ZIP ที่มีไฟล์รูปภาพเรียงหมายเลขตามลำดับ
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
description: "เปลี่ยนคลิปวิดีโอเป็น GIF แบบเคลื่อนไหว"
|
||||
i18n_source_hash: f729dde8cd55
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 6af900c3e580
|
||||
---
|
||||
|
||||
# Video to GIF {#video-to-gif}
|
||||
|
||||
เปลี่ยนคลิปวิดีโอเป็น GIF แบบเคลื่อนไหว พร้อมกำหนดค่าอัตราเฟรม ความกว้าง เวลาเริ่มต้น และระยะเวลาได้
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-to-gif`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอและฟิลด์ JSON `settings` นี่คือ endpoint แบบ async โดยจะคืนค่า `202 Accepted` ทันที และความคืบหน้าจะถูกสตรีมผ่าน SSE ที่ `GET /api/v1/jobs/{jobId}/progress`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| fps | integer | No | `12` | อัตราเฟรมเอาต์พุต (1-30) |
|
||||
| width | integer | No | `480` | ความกว้างเอาต์พุตเป็นพิกเซล (64-1280) ความสูงจะปรับสเกลตามสัดส่วน |
|
||||
| startS | number | No | `0` | เวลาเริ่มต้นเป็นวินาที (ต้อง >= 0) |
|
||||
| durationS | number | No | `5` | ระยะเวลาเป็นวินาที (มากกว่า 0 สูงสุด 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}
|
||||
|
||||
- ค่า `fps` และ `width` ที่ต่ำลงจะสร้างไฟล์ GIF ที่เล็กกว่า GIF กว้าง 480px ที่ 12 fps มักเป็นสมดุลที่ดี
|
||||
- ระยะเวลาสูงสุดคือ 60 วินาที คลิปที่ยาวกว่าจะสร้างไฟล์ที่ใหญ่มาก
|
||||
- การอัปเดตความคืบหน้าดูได้ผ่าน SSE ที่ `GET /api/v1/jobs/{jobId}/progress` จนกว่างานจะเสร็จสมบูรณ์
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
description: "แปลงคลิปวิดีโอเป็นภาพ WebP แบบเคลื่อนไหว"
|
||||
i18n_source_hash: 7b1a22459bd1
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 1259ed8ae506
|
||||
---
|
||||
|
||||
# Video to WebP {#video-to-webp}
|
||||
|
||||
แปลงคลิปวิดีโอเป็นภาพ WebP แบบเคลื่อนไหว พร้อมกำหนดค่าอัตราเฟรม ความกว้าง และคุณภาพได้
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-to-webp`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอและฟิลด์ JSON `settings`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| fps | integer | No | `12` | อัตราเฟรมเอาต์พุต (1-30) |
|
||||
| width | integer | No | `480` | ความกว้างเอาต์พุตเป็นพิกเซล (16-1920) ความสูงจะปรับสเกลตามสัดส่วน |
|
||||
| quality | integer | No | `75` | คุณภาพการบีบอัด WebP (1-100) |
|
||||
| loop | boolean | No | `true` | วนเล่นภาพเคลื่อนไหว |
|
||||
|
||||
## 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 แบบเคลื่อนไหวสร้างไฟล์ที่เล็กกว่า GIF พร้อมรองรับสีได้ดีกว่า (พาเลตต์ 24-bit เทียบกับ 8-bit)
|
||||
- ค่า `quality` ที่ต่ำลงจะสร้างไฟล์ที่เล็กกว่าโดยแลกกับความคมชัดของภาพ
|
||||
- ตั้ง `loop` เป็น `false` สำหรับภาพเคลื่อนไหวที่ควรเล่นครั้งเดียวแล้วหยุด
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
description: "ฝังลายน้ำข้อความลงบนเฟรมของวิดีโอ"
|
||||
i18n_source_hash: 937bb075b894
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: d293cc610da3
|
||||
---
|
||||
|
||||
# Watermark Video {#watermark-video}
|
||||
|
||||
ฝังลายน้ำข้อความลงบนทุกเฟรมของวิดีโอ พร้อมกำหนดค่าตำแหน่ง ขนาด ความทึบแสง และสีได้
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/watermark-video`
|
||||
|
||||
รับข้อมูลแบบ multipart form พร้อมไฟล์วิดีโอและฟิลด์ JSON `settings`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| text | string | Yes | - | ข้อความลายน้ำ (1-200 อักขระ) |
|
||||
| position | string | No | `"br"` | ตำแหน่งบนเฟรม: `tl`, `tc`, `tr`, `l`, `c`, `r`, `bl`, `bc`, `br` |
|
||||
| fontSize | integer | No | `36` | ขนาดฟอนต์เป็นพิกเซล (8-120) |
|
||||
| opacity | number | No | `0.5` | ความทึบแสงของลายน้ำ (0.05-1) |
|
||||
| color | string | No | `"#ffffff"` | สี Hex สำหรับข้อความ (เช่น `"#ffffff"`) |
|
||||
|
||||
### Position Values {#position-values}
|
||||
|
||||
- **tl** - บนซ้าย, **tc** - บนกลาง, **tr** - บนขวา
|
||||
- **l** - กลางซ้าย, **c** - ตรงกลาง, **r** - กลางขวา
|
||||
- **bl** - ล่างซ้าย, **bc** - ล่างกลาง, **br** - ล่างขวา
|
||||
|
||||
## 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}
|
||||
|
||||
- ลายน้ำจะถูกเรนเดอร์ลงในเฟรมของวิดีโออย่างถาวรและไม่สามารถลบออกได้หลังการประมวลผล
|
||||
- ลายน้ำใช้ฟอนต์ sans-serif ที่มีอยู่ในตัวของ FFmpeg
|
||||
- สำหรับลายน้ำแบบรูปภาพ ให้ใช้เครื่องมือ Watermark สำหรับรูปภาพแทน
|
||||
Reference in New Issue
Block a user