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: "Tambahkan bilah berwarna solid agar pas dengan rasio aspek target."
|
||||
i18n_source_hash: b8e17dffc341
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: f4eb09a4ca68
|
||||
---
|
||||
|
||||
# Aspect Pad {#aspect-pad}
|
||||
|
||||
Tambahkan bilah letterbox atau pillarbox berwarna solid agar video pas dengan rasio aspek target tanpa memotong.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/aspect-pad`
|
||||
|
||||
Menerima data form multipart berisi file video dan sebuah field JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| target | string | No | `"9:16"` | Rasio aspek target: `16:9`, `9:16`, `1:1`, `4:3`, `3:4` |
|
||||
| color | string | No | `"#000000"` | Warna hex untuk bilah padding (mis. `"#000000"` untuk hitam) |
|
||||
|
||||
## 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}
|
||||
|
||||
- Jika video sudah cocok dengan rasio aspek target, file dikembalikan tanpa perubahan.
|
||||
- Gunakan `9:16` untuk format media sosial vertikal/potret (TikTok, Reels, Shorts).
|
||||
- Untuk padding buram alih-alih warna solid, gunakan alat Blur Pad.
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
description: "Hasilkan file subtitle dari trek audio video menggunakan AI."
|
||||
i18n_source_hash: 35b1e78501ad
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 872aa84c28d0
|
||||
---
|
||||
|
||||
# Auto Subtitles {#auto-subtitles}
|
||||
|
||||
Hasilkan file subtitle dari trek audio video menggunakan pengenalan suara bertenaga AI (faster-whisper). Mendukung deteksi otomatis dan 10 bahasa eksplisit.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/auto-subtitles`
|
||||
|
||||
Menerima data form multipart berisi file video dan sebuah field JSON `settings`. Ini adalah endpoint async - ia mengembalikan `202 Accepted` segera dan progres dialirkan melalui SSE di `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| language | string | No | `"auto"` | Bahasa ucapan: `auto`, `en`, `de`, `fr`, `es`, `zh`, `ja`, `ko`, `id`, `th`, `vi` |
|
||||
| format | string | No | `"srt"` | Format subtitle output: `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}
|
||||
|
||||
- Ini adalah alat AI yang membutuhkan feature bundle **transcription** untuk terpasang. Jika bundle tidak terpasang, API mengembalikan `501 Feature Not Installed` dengan instruksi untuk memasangnya melalui UI admin.
|
||||
- Opsi bahasa `auto` menggunakan deteksi bahasa bawaan whisper. Menentukan bahasa secara eksplisit meningkatkan akurasi dan kecepatan.
|
||||
- SRT adalah format subtitle yang paling banyak didukung. VTT (WebVTT) adalah standar untuk pemutar video web.
|
||||
- Pembaruan progres tersedia melalui SSE di `GET /api/v1/jobs/{jobId}/progress` hingga job selesai.
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
description: "Isi bilah dengan salinan video yang diburamkan."
|
||||
i18n_source_hash: 0c72aaefc6de
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 8e02d63b8195
|
||||
---
|
||||
|
||||
# Blur Pad {#blur-pad}
|
||||
|
||||
Sesuaikan video ke rasio aspek target dengan mengisi area padding menggunakan salinan video yang diburamkan dan diskalakan alih-alih bilah berwarna solid.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/blur-pad`
|
||||
|
||||
Menerima data form multipart berisi file video dan sebuah field JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| target | string | No | `"16:9"` | Rasio aspek target: `16:9`, `9:16`, `1:1`, `4:3`, `3:4` |
|
||||
| blur | number | No | `20` | Sigma blur Gaussian untuk latar belakang (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}
|
||||
|
||||
- Nilai blur yang lebih tinggi menghasilkan latar belakang yang lebih lembut dan abstrak. Nilai yang lebih rendah mempertahankan lebih banyak detail yang terlihat.
|
||||
- Jika video sudah cocok dengan rasio aspek target, file dikembalikan tanpa perubahan.
|
||||
- Untuk padding berwarna solid, gunakan alat Aspect Pad.
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
description: "Merender subtitle secara permanen ke dalam frame video."
|
||||
i18n_source_hash: 2d3111589db0
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 22d4ab26b1cb
|
||||
---
|
||||
|
||||
# Burn Subtitles {#burn-subtitles}
|
||||
|
||||
Merender secara permanen (hard-code) subtitle dari file SRT, VTT, atau ASS ke setiap frame video.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/burn-subtitles`
|
||||
|
||||
Menerima multipart form data dengan file video dan file subtitle. Ini adalah endpoint asinkron - ia langsung mengembalikan `202 Accepted` dan progres dialirkan melalui SSE di `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| fontSize | integer | No | `24` | Ukuran font subtitle dalam piksel (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}
|
||||
|
||||
- Unggah dua file: yang pertama harus berupa video, yang kedua harus berupa file subtitle (.srt, .vtt, atau .ass).
|
||||
- Subtitle yang di-burn menjadi bagian permanen dari video dan tidak dapat dimatikan oleh penonton. Untuk subtitle yang bisa dialihkan, gunakan alat Embed Subtitles sebagai gantinya.
|
||||
- Pembaruan progres tersedia melalui SSE di `GET /api/v1/jobs/{jobId}/progress` hingga job selesai.
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
description: "Mengubah frame rate sebuah video."
|
||||
i18n_source_hash: 2bffbd04a1cb
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: e94b80dc805d
|
||||
---
|
||||
|
||||
# Change FPS {#change-fps}
|
||||
|
||||
Mengubah frame rate sebuah video ke nilai target antara 1 dan 120 fps.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/change-fps`
|
||||
|
||||
Menerima multipart form data dengan file video dan field JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| fps | number | No | `30` | Frame rate target (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}
|
||||
|
||||
- Menurunkan frame rate akan membuang frame dan mengurangi ukuran file. Menaikkannya akan menduplikasi frame untuk mengisi celah tetapi tidak menambahkan detail gerak yang sebenarnya.
|
||||
- Nilai target umum: 24 (sinema), 30 (web/siaran), 60 (pemutaran mulus).
|
||||
- Trek audio dipertahankan pada sample rate aslinya.
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
description: "Memperkecil ukuran file video dengan kontrol kualitas."
|
||||
i18n_source_hash: 9cc1f1acf74e
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 211aa4a824b9
|
||||
---
|
||||
|
||||
# Compress Video {#compress-video}
|
||||
|
||||
Memperkecil ukuran file video menggunakan kekuatan kompresi yang dapat dikonfigurasi dan penurunan resolusi opsional.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/compress-video`
|
||||
|
||||
Menerima multipart form data dengan file video dan field JSON `settings`. Ini adalah endpoint asinkron - ia langsung mengembalikan `202 Accepted` dan progres dialirkan melalui SSE di `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| quality | string | No | `"balanced"` | Kekuatan kompresi: `light`, `balanced`, `strong` |
|
||||
| resolution | string | No | `"original"` | Resolusi keluaran: `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` mempertahankan kualitas mendekati aslinya. Preset `strong` mengurangi ukuran file secara agresif dengan mengorbankan ketepatan visual.
|
||||
- Menurunkan resolusi (mis. dari 4K ke 720p) berkombinasi dengan kompresi untuk pengurangan ukuran yang signifikan.
|
||||
- Pembaruan progres tersedia melalui SSE di `GET /api/v1/jobs/{jobId}/progress` hingga job selesai.
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
description: "Mengonversi video antara MP4, MOV, WebM, AVI, dan MKV."
|
||||
i18n_source_hash: 8f9e6418b1c6
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 964d81cde713
|
||||
---
|
||||
|
||||
# Convert Video {#convert-video}
|
||||
|
||||
Mengonversi video antara format MP4, MOV, WebM, AVI, dan MKV dengan preset kualitas yang dapat dikonfigurasi.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/convert-video`
|
||||
|
||||
Menerima multipart form data dengan file video dan field JSON `settings`. Ini adalah endpoint asinkron - ia langsung mengembalikan `202 Accepted` dan progres dialirkan melalui SSE di `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| format | string | No | `"mp4"` | Format keluaran: `mp4`, `mov`, `webm`, `avi`, `mkv` |
|
||||
| quality | string | No | `"balanced"` | Preset kualitas: `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 kualitas `high` menghasilkan ketepatan visual terbaik tetapi file lebih besar. Preset `small` mengompresi secara agresif untuk ukuran file minimum.
|
||||
- Keluaran WebM menggunakan enkoding VP9. MP4 dan MOV menggunakan H.264. AVI dan MKV tersedia untuk alur kerja lama atau pengarsipan.
|
||||
- Pembaruan progres tersedia melalui SSE di `GET /api/v1/jobs/{jobId}/progress` hingga job selesai.
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
description: "Memotong sebuah region dari video."
|
||||
i18n_source_hash: fab11f71a202
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: d39bff80ab88
|
||||
---
|
||||
|
||||
# Crop Video {#crop-video}
|
||||
|
||||
Memotong sebuah region persegi panjang dari video dengan menentukan ukuran dan posisi region tersebut.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/crop-video`
|
||||
|
||||
Menerima multipart form data dengan file video dan field JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| width | integer | Yes | - | Lebar region potong dalam piksel (minimum 16) |
|
||||
| height | integer | Yes | - | Tinggi region potong dalam piksel (minimum 16) |
|
||||
| x | integer | No | `0` | Offset horizontal dari sudut kiri atas |
|
||||
| y | integer | No | `0` | Offset vertikal dari sudut kiri atas |
|
||||
|
||||
## 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}
|
||||
|
||||
- Region potong harus muat di dalam dimensi video. Jika `x + width` atau `y + height` melebihi ukuran sumber, permintaan akan mengembalikan galat 400.
|
||||
- Ukuran potong minimum adalah 16x16 piksel.
|
||||
- Dimensi dibulatkan ke angka genap sebagaimana disyaratkan oleh sebagian besar codec video.
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
description: "Mux sebuah trek subtitle ke dalam kontainer video."
|
||||
i18n_source_hash: be272730fff5
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: da795534962e
|
||||
---
|
||||
|
||||
# Embed Subtitles {#embed-subtitles}
|
||||
|
||||
Mux sebuah file subtitle ke dalam kontainer video sebagai trek subtitle lunak yang dapat dinyalakan atau dimatikan oleh penonton.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/embed-subtitles`
|
||||
|
||||
Menerima multipart form data dengan file video dan file subtitle, ditambah field JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| language | string | No | `"eng"` | Kode bahasa ISO 639-2/B (3 huruf kecil, mis. `"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}
|
||||
|
||||
- Unggah dua file: yang pertama harus berupa video, yang kedua harus berupa file subtitle (.srt, .vtt, atau .ass).
|
||||
- Subtitle tersemat (lunak) dapat dialihkan oleh penonton di pemutar media mereka. Untuk subtitle yang terlihat permanen, gunakan alat Burn Subtitles sebagai gantinya.
|
||||
- Kode bahasa disimpan sebagai metadata di dalam kontainer dan membantu pemutar media melabeli trek subtitle.
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
description: "Menarik trek audio keluar dari sebuah video."
|
||||
i18n_source_hash: f5b8330a5f89
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 0b4eec43daee
|
||||
---
|
||||
|
||||
# Extract Audio {#extract-audio}
|
||||
|
||||
Mengekstrak trek audio dari file video dan menyimpannya sebagai MP3, WAV, M4A, atau OGG.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/extract-audio`
|
||||
|
||||
Menerima multipart form data dengan file video dan field JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| format | string | No | `"mp3"` | Format audio keluaran: `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}
|
||||
|
||||
- Jika video tidak memiliki trek audio, permintaan akan mengembalikan galat 400.
|
||||
- MP3 bersifat lossy tetapi kompatibel secara luas. WAV bersifat lossless tetapi berukuran besar. M4A (AAC) menawarkan keseimbangan yang baik antara kualitas dan ukuran. OGG tersedia untuk alur kerja codec terbuka.
|
||||
- Ketika audio sumber sudah AAC dan format keluaran adalah M4A, aliran audio disalin tanpa enkoding ulang.
|
||||
@@ -0,0 +1,45 @@
|
||||
---
|
||||
description: "Menarik trek subtitle keluar dari video sebagai file SRT."
|
||||
i18n_source_hash: 48db860f6676
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: e099d1fbddcb
|
||||
---
|
||||
|
||||
# Extract Subtitles {#extract-subtitles}
|
||||
|
||||
Mengekstrak trek subtitle tersemat dari kontainer video dan mengunduhnya sebagai file SRT.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/extract-subtitles`
|
||||
|
||||
Menerima multipart form data dengan file video. Alat ini tidak memiliki pengaturan yang dapat dikonfigurasi.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
Alat ini tidak memiliki parameter. Ia mengekstrak trek subtitle pertama yang ditemukan di dalam kontainer 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 harus berisi trek subtitle tersemat. Jika tidak ada trek subtitle yang ditemukan, permintaan akan mengembalikan galat 400.
|
||||
- Jika video memiliki beberapa trek subtitle, yang pertama akan diekstrak.
|
||||
- Format keluaran adalah SRT terlepas dari format subtitle asli di dalam kontainer.
|
||||
@@ -0,0 +1,48 @@
|
||||
---
|
||||
description: "Mengonversi GIF animasi menjadi video MP4, WebM, atau MOV."
|
||||
i18n_source_hash: c3737b31146d
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 835cddac950a
|
||||
---
|
||||
|
||||
# GIF to Video {#gif-to-video}
|
||||
|
||||
Mengonversi GIF animasi menjadi file video MP4, WebM, atau MOV yang ringkas.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/gif-to-video`
|
||||
|
||||
Menerima multipart form data dengan file GIF dan field JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| format | string | No | `"mp4"` | Format keluaran: `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}
|
||||
|
||||
- Mengonversi GIF ke video biasanya mengurangi ukuran file sebesar 80-90% sambil mempertahankan kualitas visual yang sama.
|
||||
- Hanya file GIF animasi yang diterima. Gambar statis sebaiknya menggunakan alat Convert gambar.
|
||||
- MP4 dan MOV menggunakan enkoding H.264, WebM menggunakan VP9.
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
description: "Mengubah sekumpulan gambar menjadi video slideshow."
|
||||
i18n_source_hash: 2c6f183feb6d
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: c0be97a6ba9d
|
||||
---
|
||||
|
||||
# Images to Video {#images-to-video}
|
||||
|
||||
Mengubah sekumpulan gambar menjadi video slideshow dengan durasi per gambar, resolusi, dan frame rate yang dapat dikonfigurasi.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/images-to-video`
|
||||
|
||||
Menerima multipart form data dengan dua gambar atau lebih dan field JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| secondsPerImage | number | No | `2` | Durasi tampil per gambar dalam detik (0.5-10) |
|
||||
| resolution | string | No | `"720p"` | Resolusi keluaran: `1080p`, `720p`, `square` |
|
||||
| fps | integer | No | `30` | Frame rate keluaran (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}
|
||||
|
||||
- Menerima 2-60 file gambar per permintaan. Gambar muncul di video sesuai urutan unggahan.
|
||||
- Gambar diubah ukurannya dan diberi padding agar pas dengan resolusi target sambil mempertahankan rasio aspek.
|
||||
- Opsi resolusi `square` menghasilkan video 1080x1080, berguna untuk media sosial.
|
||||
- Format keluaran selalu MP4 (H.264).
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
description: "Menggabungkan beberapa klip video menjadi satu file."
|
||||
i18n_source_hash: 90463dfbb580
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 286a874d50e2
|
||||
---
|
||||
|
||||
# Merge Videos {#merge-videos}
|
||||
|
||||
Menggabungkan beberapa klip video menjadi satu file MP4. Semua masukan dinormalisasi ke resolusi video pertama dan 30 fps.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/merge-videos`
|
||||
|
||||
Menerima multipart form data dengan dua file video atau lebih. Ini adalah endpoint asinkron - ia langsung mengembalikan `202 Accepted` dan progres dialirkan melalui SSE di `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
Alat ini tidak memiliki parameter pengaturan. Unggah 2-10 file video sebagai beberapa bagian `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}
|
||||
|
||||
- Klip digabungkan sesuai urutan unggahannya.
|
||||
- Semua klip dienkode ulang agar sesuai dengan resolusi, frame rate (30 fps), dan codec (H.264) klip pertama. Masukan yang tidak cocok dinormalisasi secara otomatis.
|
||||
- Menerima 2-10 file video per permintaan.
|
||||
- Pembaruan progres tersedia melalui SSE di `GET /api/v1/jobs/{jobId}/progress` hingga job selesai.
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
description: "Menghapus trek audio dari sebuah video."
|
||||
i18n_source_hash: 9a0c60bbcaa3
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 798031cf35ed
|
||||
---
|
||||
|
||||
# Mute Video {#mute-video}
|
||||
|
||||
Menghapus trek audio dari sebuah video, menyisakan hanya aliran visual.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/mute-video`
|
||||
|
||||
Menerima multipart form data dengan file video. Alat ini tidak memiliki pengaturan yang dapat dikonfigurasi.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
Alat ini tidak memiliki parameter. Ia melepas trek audio dari video yang diunggah.
|
||||
|
||||
## 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}
|
||||
|
||||
- Aliran video disalin tanpa enkoding ulang, jadi tidak ada kehilangan kualitas.
|
||||
- Jika video masukan tidak memiliki trek audio, file dikembalikan tanpa perubahan.
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
description: "Mengganti trek audio sebuah video dengan file lain."
|
||||
i18n_source_hash: fabc2a953103
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 3c52247a7d87
|
||||
---
|
||||
|
||||
# Replace Audio {#replace-audio}
|
||||
|
||||
Mengganti trek audio sebuah video dengan file audio. Unggah baik video maupun file audio.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/replace-audio`
|
||||
|
||||
Menerima multipart form data dengan tepat dua file: file video diikuti oleh file audio.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
Alat ini tidak memiliki parameter pengaturan. Unggah file video dan file audio sebagai dua bagian `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}
|
||||
|
||||
- Tepat dua file harus diunggah: yang pertama harus berupa video, yang kedua harus berupa file audio.
|
||||
- Jika file audio lebih panjang dari video, ia dipangkas agar sesuai dengan durasi video. Jika lebih pendek, sisa video diputar dalam keheningan.
|
||||
- Aliran video disalin tanpa enkoding ulang, jadi tidak ada kehilangan kualitas video.
|
||||
@@ -0,0 +1,61 @@
|
||||
---
|
||||
description: "Menskalakan video ke resolusi baru atau ukuran preset."
|
||||
i18n_source_hash: bb1f67871fea
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: a76e54e2071c
|
||||
---
|
||||
|
||||
# Resize Video {#resize-video}
|
||||
|
||||
Menskalakan video ke resolusi baru menggunakan dimensi piksel kustom atau preset standar.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/resize-video`
|
||||
|
||||
Menerima multipart form data dengan file video dan field JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| width | integer | No | - | Lebar target dalam piksel (16-7680) |
|
||||
| height | integer | No | - | Tinggi target dalam piksel (16-4320) |
|
||||
| preset | string | No | `"custom"` | Preset resolusi: `custom`, `2160p`, `1440p`, `1080p`, `720p`, `480p`, `360p` |
|
||||
|
||||
Ketika `preset` adalah `"custom"`, setidaknya salah satu dari `width` atau `height` harus disediakan. Dimensi lainnya diskalakan secara proporsional.
|
||||
|
||||
## 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"}'
|
||||
```
|
||||
|
||||
Ubah ukuran ke dimensi kustom:
|
||||
|
||||
```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}
|
||||
|
||||
- Nilai preset memetakan ke tinggi standar (mis. `720p` = 1280x720, `1080p` = 1920x1080). Lebar diskalakan secara proporsional dari rasio aspek sumber.
|
||||
- Dimensi dibulatkan ke angka genap sebagaimana disyaratkan oleh sebagian besar codec video.
|
||||
- Resolusi maksimum yang didukung adalah 7680x4320 (8K UHD).
|
||||
@@ -0,0 +1,44 @@
|
||||
---
|
||||
description: "Memutar klip video secara terbalik."
|
||||
i18n_source_hash: 98226f4e092d
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 9288194d9456
|
||||
---
|
||||
|
||||
# Reverse Video {#reverse-video}
|
||||
|
||||
Memutar klip video secara terbalik. Trek audio juga dibalik.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/reverse-video`
|
||||
|
||||
Menerima multipart form data dengan file video. Alat ini tidak memiliki pengaturan yang dapat dikonfigurasi.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
Alat ini tidak memiliki parameter. Ia membalik seluruh 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}
|
||||
|
||||
- Dibatasi hingga klip dengan durasi maksimum 5 menit. Video yang lebih panjang ditolak dengan galat 400.
|
||||
- Baik trek video maupun audio dibalik. Untuk membalik video tanpa audio, matikan audionya terlebih dahulu.
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
description: "Memutar atau membalik sebuah video."
|
||||
i18n_source_hash: cf9620ca62c7
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 1ab72e809197
|
||||
---
|
||||
|
||||
# Rotate Video {#rotate-video}
|
||||
|
||||
Memutar video sebesar 90, 180, atau 270 derajat, atau membaliknya secara horizontal maupun vertikal.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/rotate-video`
|
||||
|
||||
Menerima multipart form data dengan file video dan field JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| transform | string | Yes | - | Transformasi yang diterapkan: `cw90`, `ccw90`, `180`, `hflip`, `vflip` |
|
||||
|
||||
### Transform Values {#transform-values}
|
||||
|
||||
- **cw90** - Putar 90 derajat searah jarum jam
|
||||
- **ccw90** - Putar 90 derajat berlawanan arah jarum jam
|
||||
- **180** - Putar 180 derajat
|
||||
- **hflip** - Balik secara horizontal (cermin)
|
||||
- **vflip** - Balik secara vertikal
|
||||
|
||||
## 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}
|
||||
|
||||
- Rotasi sebesar 90 atau 270 derajat menukar lebar dan tinggi video.
|
||||
- Operasi balik (hflip, vflip) tidak mengubah dimensi video.
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
description: "Mengurangi guncangan kamera dengan stabilisasi dua-lintasan."
|
||||
i18n_source_hash: ec908e91a752
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 74980e750521
|
||||
---
|
||||
|
||||
# Stabilize Video {#stabilize-video}
|
||||
|
||||
Mengurangi guncangan kamera pada rekaman genggam menggunakan stabilisasi vidstab dua-lintasan dari FFmpeg.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/stabilize-video`
|
||||
|
||||
Menerima multipart form data dengan file video dan field JSON `settings`. Ini adalah endpoint asinkron - ia langsung mengembalikan `202 Accepted` dan progres dialirkan melalui SSE di `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| smoothing | integer | No | `15` | Ukuran jendela penghalusan dalam frame (5-60). Nilai lebih tinggi menghasilkan gerak lebih mulus |
|
||||
|
||||
## 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}
|
||||
|
||||
- Stabilisasi adalah proses dua-lintasan: lintasan pertama menganalisis gerakan kamera, dan lintasan kedua menerapkan koreksinya. Ini memakan waktu kira-kira dua kali lebih lama daripada alat satu-lintasan.
|
||||
- Nilai penghalusan lebih tinggi menghilangkan lebih banyak guncangan tetapi dapat menimbulkan sedikit zoom crop di tepian.
|
||||
- Pembaruan progres tersedia melalui SSE di `GET /api/v1/jobs/{jobId}/progress` hingga job selesai.
|
||||
@@ -0,0 +1,50 @@
|
||||
---
|
||||
description: "Memotong sebuah klip dari video dengan menentukan waktu mulai dan selesai."
|
||||
i18n_source_hash: c84481641979
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 5155f2376f3d
|
||||
---
|
||||
|
||||
# Trim Video {#trim-video}
|
||||
|
||||
Memotong sebuah klip dari video dengan menentukan waktu mulai dan selesai dalam detik, dengan opsi untuk potongan yang akurat per frame.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/trim-video`
|
||||
|
||||
Menerima multipart form data dengan file video dan field JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| startS | number | No | `0` | Waktu mulai dalam detik (harus >= 0) |
|
||||
| endS | number | Yes | - | Waktu selesai dalam detik (harus setelah startS) |
|
||||
| precise | boolean | No | `false` | Enkode ulang untuk potongan yang akurat per frame alih-alih pencarian 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}
|
||||
|
||||
- Ketika `precise` adalah `false` (nilai bawaan), alat menggunakan pencarian keyframe, yang cepat tetapi dapat memulai beberapa frame sebelum waktu yang diminta.
|
||||
- Menyetel `precise` ke `true` mengenkode ulang segmen untuk batas frame yang tepat, tetapi memakan waktu lebih lama.
|
||||
- Nilai `endS` harus lebih besar dari `startS`.
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
description: "Menyesuaikan kecerahan, kontras, saturasi, dan gamma sebuah video."
|
||||
i18n_source_hash: 40483b79d44b
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 3fd38383e25f
|
||||
---
|
||||
|
||||
# Video Color {#video-color}
|
||||
|
||||
Menyesuaikan kecerahan, kontras, saturasi, dan koreksi gamma pada sebuah video.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-color`
|
||||
|
||||
Menerima multipart form data dengan file video dan field JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| brightness | number | No | `0` | Penyesuaian kecerahan (-1 hingga 1) |
|
||||
| contrast | number | No | `1` | Pengali kontras (0-4) |
|
||||
| saturation | number | No | `1` | Pengali saturasi (0-3). Setel ke 0 untuk grayscale |
|
||||
| gamma | number | No | `1` | Koreksi 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}
|
||||
|
||||
- Semua nilai pada nilai bawaannya (brightness 0, contrast 1, saturation 1, gamma 1) tidak menghasilkan perubahan.
|
||||
- Menyetel saturation ke `0` mengonversi video menjadi grayscale.
|
||||
- Nilai gamma di bawah 1 mencerahkan bayangan, sementara nilai di atas 1 menggelapkannya.
|
||||
@@ -0,0 +1,45 @@
|
||||
---
|
||||
description: "Menormalkan volume audio video ke standar siaran."
|
||||
i18n_source_hash: 078f1e819c9a
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 4c658bcf24f2
|
||||
---
|
||||
|
||||
# Normalize Audio {#normalize-audio}
|
||||
|
||||
Menormalkan volume audio video ke standar loudness siaran EBU R128.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-loudnorm`
|
||||
|
||||
Menerima multipart form data dengan file video. Alat ini tidak memiliki pengaturan yang dapat dikonfigurasi.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
Alat ini tidak memiliki parameter. Ia menerapkan normalisasi loudness EBU R128 ke trek audio.
|
||||
|
||||
## 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}
|
||||
|
||||
- Menggunakan filter `loudnorm` FFmpeg yang menargetkan loudness terintegrasi -16 LUFS dengan true peak -1.5 dBTP dan rentang loudness 11 LU (standar siaran EBU R128).
|
||||
- Sample rate audio sumber dipertahankan pada keluaran.
|
||||
- Jika video tidak memiliki trek audio, permintaan akan mengembalikan galat 400.
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
description: "Menghapus metadata dari sebuah video dan melaporkan apa yang ditemukan."
|
||||
i18n_source_hash: 69621bfb98ca
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: b141779e166e
|
||||
---
|
||||
|
||||
# Clean Video Metadata {#clean-video-metadata}
|
||||
|
||||
Menghapus metadata (tanggal pembuatan, koordinat GPS, model kamera, tag perangkat lunak, dll.) dari sebuah video dan melaporkan apa yang dihapus.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-metadata`
|
||||
|
||||
Menerima multipart form data dengan file video. Alat ini tidak memiliki pengaturan yang dapat dikonfigurasi.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
Alat ini tidak memiliki parameter. Ia menghapus semua metadata dari kontainer 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 yang dihapus mencakup stempel waktu pembuatan, data GPS/lokasi, info kamera/perangkat, dan tag perangkat lunak.
|
||||
- Aliran video dan audio disalin tanpa enkoding ulang, jadi tidak ada kehilangan kualitas.
|
||||
- Berguna untuk privasi sebelum membagikan video secara publik.
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
description: "Mempercepat atau memperlambat sebuah video."
|
||||
i18n_source_hash: 98dfc75c0507
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: b42ef4592619
|
||||
---
|
||||
|
||||
# Video Speed {#video-speed}
|
||||
|
||||
Mempercepat atau memperlambat sebuah video dengan opsi untuk mempertahankan pitch audio.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-speed`
|
||||
|
||||
Menerima multipart form data dengan file video dan field JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| factor | number | No | `2` | Pengali kecepatan (0.25-4). Nilai di atas 1 mempercepat, di bawah 1 memperlambat |
|
||||
| keepPitch | boolean | No | `true` | Mempertahankan pitch audio saat mengubah kecepatan |
|
||||
|
||||
## 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}
|
||||
|
||||
- Faktor `2` menggandakan kecepatan pemutaran (memangkas durasi setengahnya). Faktor `0.5` memangkas kecepatan pemutaran setengahnya (menggandakan durasi).
|
||||
- Ketika `keepPitch` adalah `true`, audio direntangkan-waktu agar suara terdengar alami. Ketika `false`, pitch bergeser secara proporsional dengan kecepatan.
|
||||
- Rentang yang valid adalah 0.25x hingga 4x.
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
description: "Mengekstrak frame dari video sebagai ZIP berisi gambar."
|
||||
i18n_source_hash: b06f038dafb3
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 9c215f505e55
|
||||
---
|
||||
|
||||
# Video to Frames {#video-to-frames}
|
||||
|
||||
Mengekstrak frame individual dari sebuah video dan mengunduhnya sebagai arsip ZIP berisi gambar PNG atau JPG.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-to-frames`
|
||||
|
||||
Menerima multipart form data dengan file video dan field JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| mode | string | No | `"all"` | Mode ekstraksi: `all`, `nth`, `timestamps` |
|
||||
| n | integer | No | `10` | Ekstrak setiap frame ke-N (2-1000). Hanya digunakan ketika mode adalah `"nth"` |
|
||||
| timestamps | string | No | `""` | Stempel waktu dalam detik yang dipisahkan koma. Diperlukan ketika mode adalah `"timestamps"` |
|
||||
| format | string | No | `"png"` | Format gambar untuk frame yang diekstrak: `png`, `jpg` |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
Ekstrak setiap frame ke-30 sebagai 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"}'
|
||||
```
|
||||
|
||||
Ekstrak frame pada stempel waktu tertentu:
|
||||
|
||||
```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}
|
||||
|
||||
- Mode `all` mengekstrak setiap frame dan dapat menghasilkan file ZIP yang sangat besar untuk video panjang. Gunakan mode `nth` atau `timestamps` untuk ekstraksi selektif.
|
||||
- PNG mempertahankan kualitas penuh tetapi menghasilkan file lebih besar. JPG lebih kecil tetapi lossy.
|
||||
- Respons diunduh sebagai arsip ZIP yang berisi file gambar bernomor urut.
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
description: "Mengubah klip video menjadi GIF animasi."
|
||||
i18n_source_hash: f729dde8cd55
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 2c3a08842c3e
|
||||
---
|
||||
|
||||
# Video to GIF {#video-to-gif}
|
||||
|
||||
Mengubah klip video menjadi GIF animasi dengan frame rate, lebar, waktu mulai, dan durasi yang dapat dikonfigurasi.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-to-gif`
|
||||
|
||||
Menerima multipart form data dengan file video dan field JSON `settings`. Ini adalah endpoint asinkron - ia langsung mengembalikan `202 Accepted` dan progres dialirkan melalui SSE di `GET /api/v1/jobs/{jobId}/progress`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| fps | integer | No | `12` | Frame rate keluaran (1-30) |
|
||||
| width | integer | No | `480` | Lebar keluaran dalam piksel (64-1280). Tinggi diskalakan secara proporsional |
|
||||
| startS | number | No | `0` | Waktu mulai dalam detik (harus >= 0) |
|
||||
| durationS | number | No | `5` | Durasi dalam detik (di atas 0, maks 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}
|
||||
|
||||
- Nilai `fps` dan `width` yang lebih rendah menghasilkan file GIF lebih kecil. GIF selebar 480px pada 12 fps biasanya merupakan keseimbangan yang baik.
|
||||
- Durasi maksimum adalah 60 detik. Klip yang lebih panjang menghasilkan file yang sangat besar.
|
||||
- Pembaruan progres tersedia melalui SSE di `GET /api/v1/jobs/{jobId}/progress` hingga job selesai.
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
description: "Mengonversi klip video menjadi gambar WebP animasi."
|
||||
i18n_source_hash: 7b1a22459bd1
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: a91d22f8854f
|
||||
---
|
||||
|
||||
# Video to WebP {#video-to-webp}
|
||||
|
||||
Mengonversi klip video menjadi gambar WebP animasi dengan frame rate, lebar, dan kualitas yang dapat dikonfigurasi.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/video-to-webp`
|
||||
|
||||
Menerima multipart form data dengan file video dan field JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| fps | integer | No | `12` | Frame rate keluaran (1-30) |
|
||||
| width | integer | No | `480` | Lebar keluaran dalam piksel (16-1920). Tinggi diskalakan secara proporsional |
|
||||
| quality | integer | No | `75` | Kualitas kompresi WebP (1-100) |
|
||||
| loop | boolean | No | `true` | Mengulang animasi |
|
||||
|
||||
## 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 animasi menghasilkan file lebih kecil daripada GIF dengan dukungan warna lebih baik (palet 24-bit vs 8-bit).
|
||||
- Nilai `quality` yang lebih rendah menghasilkan file lebih kecil dengan mengorbankan ketepatan visual.
|
||||
- Setel `loop` ke `false` untuk animasi yang seharusnya diputar sekali lalu berhenti.
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
description: "Menempelkan watermark teks ke frame video."
|
||||
i18n_source_hash: 937bb075b894
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 27e0b794e5ec
|
||||
---
|
||||
|
||||
# Watermark Video {#watermark-video}
|
||||
|
||||
Menempelkan watermark teks ke setiap frame video dengan posisi, ukuran, opasitas, dan warna yang dapat dikonfigurasi.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/video/watermark-video`
|
||||
|
||||
Menerima multipart form data dengan file video dan field JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| text | string | Yes | - | Teks watermark (1-200 karakter) |
|
||||
| position | string | No | `"br"` | Posisi pada frame: `tl`, `tc`, `tr`, `l`, `c`, `r`, `bl`, `bc`, `br` |
|
||||
| fontSize | integer | No | `36` | Ukuran font dalam piksel (8-120) |
|
||||
| opacity | number | No | `0.5` | Opasitas watermark (0.05-1) |
|
||||
| color | string | No | `"#ffffff"` | Warna heksadesimal untuk teks (mis. `"#ffffff"`) |
|
||||
|
||||
### Position Values {#position-values}
|
||||
|
||||
- **tl** - Kiri atas, **tc** - Tengah atas, **tr** - Kanan atas
|
||||
- **l** - Kiri tengah, **c** - Tengah, **r** - Kanan tengah
|
||||
- **bl** - Kiri bawah, **bc** - Tengah bawah, **br** - Kanan bawah
|
||||
|
||||
## 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 dirender secara permanen ke dalam frame video dan tidak dapat dihapus setelah pemrosesan.
|
||||
- Watermark menggunakan font sans-serif bawaan FFmpeg.
|
||||
- Untuk watermark gambar, gunakan alat Watermark gambar sebagai gantinya.
|
||||
Reference in New Issue
Block a user