API RapidVideoMaker
The REST API lets you process video files from any HTTP client — Python scripts, n8n workflows, third-party tools. Five modes available: Merge videos (multiple MP4), Edit audio (1 MP4 + 1 MP3), Create a video (1 JPG/PNG + 1 MP3), Overlay video (2 MP4 picture-in-picture). Processing is asynchronous: submit files, then poll for the result.
Quy trình làm việc hoàn chỉnh
Mỗi tích hợp đều theo cùng một chuỗi 4 bước:
POST /api/v1/render.phpmultipart/form-data với token Bearer. 1 ảnh JPG/PNG + 1 MP3 + mode=image_to_video → tạo video. 1 MP4 + 1 MP3 → chỉnh sửa âm thanh. Nhiều MP4 → ghép nối. Server trả về job_id duy nhất.GET /api/v1/jobs.php?job_id=…queued → processing → ready (hoặc error).ready, phản hồi chứa trường download_url sẵn sàng sử dụng.GET /api/download.php?job_id=…Xác thực
Mỗi yêu cầu phải bao gồm token API của bạn. Hai định dạng được chấp nhận:
Token của bạn có trong khu vực thành viên — một token mỗi tài khoản, được tạo tự động khi đăng ký.
Hạn ngạch
Mỗi tài khoản thành viên có 20 yêu cầu mỗi ngày, chia sẻ giữa giao diện web và API. Các công việc thất bại không tiêu thụ hạn ngạch. Bộ đếm đặt lại lúc nửa đêm UTC.
Phản hồi POST bao gồm quota_used và quota_remaining. Khi vượt giới hạn, server phản hồi 429.
Hàng đợi
Một công việc được xử lý mỗi lần. Nếu nhiều công việc được gửi đồng thời, chúng sẽ được xếp hàng và xử lý theo thứ tự đến. Trong khi chờ, phản hồi trạng thái bao gồm:
queue_position— vị trí công việc trong hàng đợi (1 = tiếp theo)queue_total— tổng số công việc đang chờeta_minutes— thời gian ước tính trước khi xử lý bắt đầu
/api/v1/jobs.php chấp nhận tối đa 12 cuộc gọi mỗi phút mỗi token. Khuyến nghị: 10 giây giữa mỗi cuộc gọi. Chuyển cảnh có sẵn
Truyền transition_type=none (mặc định) để ghép trực tiếp, hoặc một trong các loại dưới đây để mờ dần giữa các clip:
Thời lượng (transition_duration) từ 0.2 đến 2.0 giây.
Điểm cuối
Five modes, accessible via the mode field (omit mode with multiple MP4s to auto-detect fusion):
| Sử dụng | Chế độ API | Tệp bắt buộc | Mô tả |
|---|---|---|---|
| Ghép video | fusion |
2–20 tệp MP4 | Các đoạn clip được lắp ráp liên tiếp theo thứ tự được cung cấp. Chuyển cảnh tùy chọn giữa các clip. |
| Chỉnh sửa âm thanh | add_audio hoặc mix_audio |
1 MP4 + 1 MP3 | Thay thế hoặc làm phong phú thêm track âm thanh của video. Track video không bao giờ được mã hóa lại.add_audio — âm thanh gốc bị xóa và thay thế hoàn toàn bằng MP3.mix_audio — âm thanh gốc được giữ lại và MP3 được phủ lên. |
| Tạo video | image_to_video |
1 JPG/PNG + 1 MP3 | Tạo video từ ảnh tĩnh và tệp âm thanh. Lớp phủ văn bản, mờ dần, độ phân giải và fps có thể cấu hình qua trường options. |
| Overlay video | overlay_video |
2 MP4 | Chồng video thứ hai lên video chính. Vị trí, kích thước, độ mờ và âm thanh có thể cấu hình qua trường options. |
| Văn bản thành MP3 | text_to_mp3 |
(chỉ văn bản) | Chuyển đổi văn bản thành giọng nói và trả về tệp MP3. Không cần tải tệp lên — gửi mode=text_to_mp3, text và lang dưới dạng trường biểu mẫu. Hỗ trợ tất cả 20 ngôn ngữ của trang web. |
add_audio và mix_audio chỉ chấp nhận 1 MP4 + 1 MP3. image_to_video chỉ chấp nhận 1 JPG/PNG + 1 MP3.Tham số chung (multipart/form-data)
| Trường | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
| videos[] | File[] | CÓ | Tệp cần xử lý. Tùy thuộc vào chế độ: 2–20 MP4, hoặc 1 MP4 + 1 MP3, hoặc 1 ảnh (JPG/PNG) + 1 MP3. Tối đa 500 MB mỗi tệp. |
| mode | string | * | image_to_video | add_audio | mix_audio. Bắt buộc cho ba chế độ này. Bị bỏ qua chỉ khi tất cả tệp là MP4 (fusion). |
| order | JSON | Chỉ chế độ fusion — mảng JSON chỉ mục xác định thứ tự clip. | |
| transition_type | string | Chỉ chế độ fusion. Mặc định: none. | |
| transition_duration | float | Chỉ chế độ fusion. Thời lượng 0.2–2.0 giây. Mặc định: 0.5. | |
| options | JSON | Chỉ chế độ image_to_video — đối tượng JSON các tham số render. | |
| callback_url | string | URL công khai (http/https) được gọi khi công việc hoàn thành. Phản hồi bao gồm webhook_secret. |
Tham số options — chế độ image_to_video
Tất cả đều tùy chọn. Giá trị không được cung cấp → mặc định được áp dụng bởi worker.
| Khóa | Loại | Mặc định | Mô tả |
|---|---|---|---|
| text | string | "" | Văn bản hiển thị dưới dạng lớp phủ. Trống = không có văn bản. Tối đa 500 ký tự. |
| font_size | int | 60 | Kích thước phông chữ tính bằng pixel. Phạm vi: 10–300. |
| text_color | string | "white" | Màu văn bản (ví dụ: white, yellow, #ffffff). |
| text_position | string | "center" | Vị trí văn bản: center, top, bottom. |
| box | bool | true | Nền bán trong suốt phía sau văn bản. |
| box_color | string | "black@0.4" | Màu + độ mờ ở định dạng FFmpeg: color@opacity. |
| fade_duration | float | 0.5 | Thời lượng mờ vào/ra tính bằng giây (0–2). 0 = không có hiệu ứng. |
| width | int | 1080 | Chiều rộng video tính bằng pixel (64–3840, buộc chẵn). |
| height | int | 1920 | Chiều cao video tính bằng pixel (64–3840, buộc chẵn). |
| fps | int | 24 | Tốc độ khung hình (1–60). |
| image_fit | string | "contain" | Chế độ đóng khung: contain = toàn bộ ảnh hiển thị; cover = phóng to để lấp đầy toàn bộ khung. |
| bg_color | string | "black" | Màu nền nếu ảnh không lấp đầy độ phân giải mục tiêu. |
| enable_image_motion | bool | false | Bật hoạt ảnh ảnh. Nếu false, ảnh giữ nguyên tĩnh. |
| image_motion_effect | string | "ken_burns" | Hiệu ứng hoạt ảnh. Giá trị chấp nhận: zoom_in, zoom_out, pan_left_to_right, pan_right_to_left, ken_burns, v.v. |
| motion_intensity | float | 1.0 | Cường độ hoạt ảnh ảnh (0.25–2.0). Nhân biên độ zoom và tốc độ pan. |
| text_effect | string | "none" | Hoạt ảnh lớp phủ văn bản. Giá trị chấp nhận: none, fade_in, slide_up, slide_down, slide_left, bounce. |
| text_effect_intensity | float | 1.0 | Cường độ hoạt ảnh văn bản (0.25–2.0). Bị bỏ qua nếu text_effect là none. |
| text_border_width | int | 0 | Độ dày viền đen xung quanh ký tự tính bằng pixel (0 = vô hiệu hóa). |
| text_mode | string | "static" | Chế độ hiển thị văn bản. static (mặc định): toàn bộ văn bản hiển thị từ frame đầu tiên. word_by_word: từ xuất hiện lần lượt theo tốc độ word_reveal_speed. Không dùng cùng text_effect: nếu text_mode=word_by_word, text_effect sẽ bị bỏ qua. |
| word_reveal_speed | float | 1.5 | Tốc độ hiển thị từng từ theo từ/giây (0.3–5.0, mặc định 1.5). Chỉ dùng với text_mode=word_by_word. Giá trị khuyên dùng để đồng bộ OpenAI TTS: 2.0. |
| word_anim | string | "none" | Hoạt ảnh xuất hiện của từng từ. none (mặc định): hiển thị ngay lập tức. fade: mỗi từ mới xuất hiện với fade 0.2s và crossfade. Chỉ dùng với text_mode=word_by_word. |
Tham số options — chế độ overlay_video
Tất cả đều tùy chọn. Thứ tự tải lên quan trọng: tệp thứ nhất là video chính (nền), tệp thứ hai là video chồng (tiền cảnh). Dùng chroma_key để xóa nền xanh khỏi video chồng.
| Khóa | Loại | Mặc định | Mô tả |
|---|---|---|---|
| position | string | "bottom-right" | Góc đặt video chồng: top-left, top-right, bottom-left, bottom-right, hoặc center. |
| scale | float | 0.30 | Kích thước video chồng theo tỷ lệ chiều rộng video chính. 0.25 = 25% chiều rộng. Phạm vi: 0.05–1.0. |
| opacity | float | 1.0 | Độ trong suốt của video chồng. 1.0 = hoàn toàn hiện, 0.0 = vô hình. |
| margin | int | 10 | Khoảng cách tính bằng pixel giữa video chồng và cạnh khung. Bị bỏ qua khi position=center. Phạm vi: 0–200. |
| audio | string | "main" | Âm thanh cần giữ lại. main: chỉ âm thanh video chính. overlay: chỉ âm thanh video chồng. mix: trộn cả hai. |
| chroma_key | bool | false | Đặt thành true để xóa nền xanh thuần (#00FF00) khỏi video chồng — hữu ích cho webcam hoặc hoạt hình quay trên phông xanh. |
| chroma_similarity | float | 0.20 | Độ dung sai chroma key. Thấp = khớp chặt. Cao = xóa rộng hơn. Khuyến nghị: 0.10–0.20 cho màu xanh kỹ thuật số, 0.25–0.45 cho màn hình vật lý. Phạm vi: 0.01–0.60. |
Tham số options — Chỉnh sửa âm thanh (mix_audio)
Chỉ có sẵn với mode=mix_audio. Bị bỏ qua cho add_audio.
| Khóa | Loại | Mặc định | Mô tả |
|---|---|---|---|
| mp3_volume | float | 1.0 | Âm lượng của MP3 được phủ (0.0 = im lặng, 1.0 = âm lượng gốc, 2.0 = gấp đôi). |
Phản hồi thành công (HTTP 200)
Ví dụ curl — chế độ image_to_video
Ví dụ curl — Chỉnh sửa âm thanh
Ví dụ curl — chế độ overlay_video
Ví dụ curl — Ghép video
Các trạng thái có thể
| Trạng thái | Ý nghĩa | Trường bổ sung |
|---|---|---|
| queued | Trong hàng đợi, chưa được xử lý | queue_position, queue_total, eta_minutes |
| processing | Đang xử lý FFmpeg | — |
| ready | Hoàn thành — tệp có sẵn | download_url, created_at, expires_at |
| error | Xử lý thất bại | error (message) |
Phản hồi theo trạng thái
Ví dụ curl
Tham số chung (multipart/form-data)
| apidocs_th_param | Loại | Mặc định | apidocs_th_desc |
|---|---|---|---|
page | integer | 1 | Page number (starts at 1) |
limit | integer | 20 | Results per page (max 50, default 20) |
Phản hồi theo trạng thái
Đăng một job đã hoàn thành (status=ready) lên một hoặc nhiều tài khoản mạng xã hội. Token phải thuộc về tài khoản thành viên (không phải token quản trị viên).
account_id của mỗi tài khoản được hiển thị ở đó.Tham số chung (multipart/form-data)
| apidocs_th_param | Loại | apidocs_th_required | apidocs_th_desc |
|---|---|---|---|
job_id | string | apidocs_required | ID job (hex 32 ký tự) của video đã hoàn thành |
publications | array | apidocs_required | Mảng các đối tượng đăng bài (tối đa 10) |
Đối tượng đăng bài
| apidocs_th_param | Loại | apidocs_th_required | apidocs_th_desc |
|---|---|---|---|
account_id | integer | apidocs_required | ID tài khoản mạng xã hội đã kết nối — xem trên trang Xuất bản trong khu vực thành viên |
title | string | — | Tiêu đề video (tối đa 512 ký tự) |
description | string | — | Mô tả video (tối đa 5 000 ký tự) |
tags | string | — | Thẻ phân cách bằng dấu phẩy (tối đa 1 024 ký tự) |
visibility | string | — | public | private | unlisted — Mặc định: public |
tiktok_mode | string | — | draft | direct — Chỉ TikTok — mặc định: direct |
tiktok_privacy | string | chế độ direct | Chỉ TikTok — bắt buộc ở chế độ direct |
allow_comment | boolean | — | Chỉ TikTok — cho phép bình luận |
allow_duet | boolean | — | Chỉ TikTok — cho phép duet |
allow_stitch | boolean | — | Chỉ TikTok — cho phép stitch |
your_brand | boolean | — | Chỉ TikTok — nội dung quảng cáo hữu cơ ("Thương hiệu của bạn"). |
branded_content | boolean | — | Chỉ TikTok — tiết lộ nội dung thương hiệu |
tiktok_cover_ms | integer | — | Chỉ TikTok — dấu thời gian khung ảnh bìa theo ms (0–60 000, mặc định 1 000) |
Phản hồi theo trạng thái
Mã lỗi cho từng bài đăng
| apidocs_th_code | Ý nghĩa |
|---|---|
job_not_ready | Job chưa hoàn thành |
mode_not_supported | Không thể đăng job text_to_mp3 |
account_not_found | Không tìm thấy tài khoản hoặc đã ngắt kết nối |
tiktok_privacy_required | Cần mức quyền riêng tư ở chế độ direct |
publication_failed | Nhà cung cấp trả về lỗi khi tải lên |
Ví dụ cURL
Trả về tệp MP4 cuối cùng dưới dạng stream (Content-Type: video/mp4). Không yêu cầu token. Chỉ có sẵn khi trạng thái là ready.
Tệp được giữ trong 2 giờ sau khi công việc hoàn thành, sau đó bị xóa. Tải xuống ngay khi trạng thái trở thành ready.
Tham số tùy chọn
| Tham số | Mô tả |
|---|---|
| filename | Tên được đề xuất cho tệp đã tải xuống (ví dụ: video-cua-toi.mp4) |
Ví dụ curl
Webhook
Webhook là lựa chọn thay thế cho polling: thay vì kiểm tra trạng thái mỗi X giây, bạn cung cấp URL và server tự động gọi bạn khi công việc hoàn thành.
Cách hoạt động
- Truyền
callback_urltrong POST đến/api/v1/render.php - Phản hồi chứa
webhook_secret— giữ lại để xác minh chữ ký - Khi công việc đạt
readyhoặcerror, server gửi JSONPOSTđã ký đến URL của bạn - Xác minh chữ ký với
HMAC-SHA256(webhook_secret, raw_body)
callback_url phải là URL có thể truy cập công khai (http hoặc https). Địa chỉ IP riêng tư, loopback và dự phòng bị chặn ở phía server. Thời gian chờ: 10 giây. Payload nhận được
Header được gửi bởi server
| Tiêu đề | Giá trị |
|---|---|
| Content-Type | application/json |
| X-RVM-Signature | sha256=<hmac_hex> — chữ ký HMAC-SHA256 của body thô |
| X-RVM-Job-Id | job_id liên quan |
Xác minh chữ ký
Mã lỗi
| HTTP | Mã JSON | Nguyên nhân |
|---|---|---|
| 401 | unauthorized | Token bị thiếu, không hợp lệ hoặc bị thu hồi |
| 400 | missing_files | Không có tệp nào được nhận |
| 400 | too_few_files | Ít hơn 2 tệp được gửi |
| 400 | too_many_files | Hơn 20 tệp được gửi |
| 400 | invalid_mime | Tệp không được hỗ trợ — chỉ chấp nhận MP4, MP3 và JPG/PNG |
| 400 | wrong_file_count | Số lượng tệp không khớp với chế độ đã chọn |
| 400 | wrong_file_types | Loại tệp không khớp với chế độ đã chọn |
| 400 | invalid_file_combination | Kết hợp tệp không có chế độ được chỉ định không khớp với bất kỳ chế độ nào được hỗ trợ |
| 400 | invalid_options | Trường options không phải là JSON hợp lệ |
| 400 | invalid_option | Một giá trị trong options không hợp lệ |
| 400 | file_too_large | Một tệp vượt quá 500 MB |
| 400 | invalid_order | Mảng order không phải là hoán vị hợp lệ |
| 400 | invalid_job_id | Định dạng job_id sai (phải là 32 ký tự hex) |
| 404 | job_not_found | Không tìm thấy công việc — job_id không xác định hoặc chưa từng tồn tại |
| 410 | job_expired | Công việc đã hết hạn — tồn tại nhưng cửa sổ phục hồi 2 giờ đã qua |
| 429 | quota_exceeded | Đạt 20 công việc thành công/ngày |
| 429 | rate_limited | Hơn 12 cuộc gọi/phút trên /api/v1/jobs.php |
| 500 | server_error | Lỗi máy chủ nội bộ |
Ví dụ tích hợp
Ví dụ cho mỗi chế độ — cài đặt requests với pip install requests.
Cấu hình chung
Chế độ image_to_video — ảnh + âm thanh → video
Chỉnh sửa âm thanh
Chế độ overlay_video — hình trong hình
Ghép video
Polling + tải xuống (chung cho tất cả các chế độ)
Hai cách tiếp cận trong n8n: polling (vòng lặp trạng thái) hoặc webhook (server gọi n8n). Webhook được khuyến nghị.
Cách A — Webhook (được khuyến nghị)
Chỉ 3 node, không có vòng lặp.
Node 1 — Kích hoạt Webhook
Thêm node Webhook làm đầu vào quy trình làm việc (phương thức POST).
Node 2 — Tạo công việc (HTTP Request)
| Phương thức | POST |
| URL | https://rapidvideomaker.com/api/v1/render.php |
| Xác thực | Header Auth — Authorization: Bearer rvm_… |
| Loại nội dung Body | Form-Data Multipart |
| Body params | Trường nhị phân videos[] cho mỗi clip + Trường văn bản callback_url |
Giữ webhook_secret từ phản hồi trong biến quy trình làm việc để xác minh chữ ký.
Node 3 — Xử lý kết quả (trong quy trình làm việc được kích hoạt bởi webhook)
Khi n8n nhận POST của server, $json.status là ready hoặc error.
{{ $headers['x-rvm-signature'] }} với HMAC-SHA256 từ webhook_secret của bạn.Cách B — Polling (không có webhook)
5 node, vòng lặp trạng thái mỗi 10 giây.
Node 1 — Tạo công việc — cùng cấu hình không có callback_url.
Node 2 — Chờ — 10 giây.
Node 3 — Poll trạng thái (HTTP Request GET)
| URL | https://rapidvideomaker.com/api/v1/jobs.php |
| Query params | job_id = {{ $('Node 1').item.json.job_id }} |
| Xác thực | Header Auth — cùng token |
Node 4 — If: {{ $json.status }} === 'ready' → true: Node 5 / false: quay lại Node 2.
Node 5 — Tải xuống: HTTP Request GET trên {{ $json.download_url }}.
Bước 1 — Tạo công việc (chọn chế độ)
Bước 2 — Polling
Bước 3 — Tải xuống
Thực hành tốt nhất
- Tần suất polling: endpoint
/api/v1/jobs.phpgiới hạn 12 cuộc gọi/phút mỗi token. Chờ ít nhất 5 giây giữa các cuộc gọi. - Thời gian chờ: triển khai thời gian chờ phía client (ví dụ: 10 phút).
- Tải xuống nhanh: tải xuống tệp ngay khi trạng thái là
ready. Bị xóa 2 giờ sau khi công việc hoàn thành. - Quản lý hạn ngạch: kiểm tra
quota_remainingtrong phản hồi POST. - Lỗi mạng: khi gặp lỗi mạng trong quá trình polling, hãy chờ và thử lại.