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.
সম্পূর্ণ ওয়ার্কফ্লো
প্রতিটি ইন্টিগ্রেশন একই ৪-ধাপের ক্রম অনুসরণ করে:
POST /api/v1/render.phpmultipart/form-data হিসেবে ফাইল পাঠান। ১টি JPG/PNG ছবি + ১টি MP3 + mode=image_to_video → ভিডিও জেনারেশন। ১টি MP4 + ১টি MP3 → অডিও সম্পাদনা। একাধিক MP4 → মার্জ। সার্ভার একটি অনন্য job_id ফেরত দেয়।GET /api/v1/jobs.php?job_id=…queued → processing → ready (বা error) পর্যন্ত অগ্রসর হয়।ready হলে, রেসপন্সে ব্যবহারের জন্য প্রস্তুত download_url ফিল্ড থাকে।GET /api/download.php?job_id=…প্রমাণীকরণ
প্রতিটি অনুরোধে আপনার API টোকন থাকতে হবে। দুটি ফরম্যাট গ্রহণযোগ্য:
আপনার টোকন আপনার সদস্য এলাকায় পাওয়া যাবে — প্রতি অ্যাকাউন্টে একটি টোকন, নিবন্ধনে স্বয়ংক্রিয়ভাবে তৈরি হয়।
কোটা
প্রতিটি সদস্য অ্যাকাউন্টে প্রতিদিন ২০টি অনুরোধ আছে, ওয়েব ইন্টারফেস এবং API এর মধ্যে ভাগ করা। ব্যর্থ জব কোটা ব্যবহার করে না।
POST রেসপন্সে quota_used এবং quota_remaining অন্তর্ভুক্ত। সীমা অতিক্রম হলে সার্ভার 429 দিয়ে সাড়া দেয়।
কিউ
একসময়ে একটি জব প্রসেস হয়। একাধিক জব একসাথে জমা দিলে সেগুলো কিউতে যায়। অপেক্ষার সময় স্ট্যাটাস রেসপন্সে অন্তর্ভুক্ত:
queue_position— কিউতে জবের অবস্থান (১ = পরবর্তী প্রসেসের জন্য)queue_total— অপেক্ষারত জবের মোট সংখ্যাeta_minutes— প্রসেসিং শুরু হওয়ার আগে আনুমানিক সময়
/api/v1/jobs.php এন্ডপয়েন্ট প্রতি টোকনে প্রতি মিনিটে ১২টি কল গ্রহণ করে। তার বেশি হলে 429 ফেরত আসে। উপলব্ধ ট্রানজিশন
সরাসরি মার্জের জন্য transition_type=none (ডিফল্ট) পাস করুন, অথবা ক্লিপের মধ্যে ফেডের জন্য নিচের টাইপগুলোর একটি:
সময়কাল (transition_duration) ০.২ থেকে ২.০ সেকেন্ডের মধ্যে।
এন্ডপয়েন্ট
Five modes, accessible via the mode field (omit mode with multiple MP4s to auto-detect fusion):
| ব্যবহার | API মোড | প্রয়োজনীয় ফাইল | বিবরণ |
|---|---|---|---|
| ভিডিও মার্জ করুন | fusion |
২–২০টি MP4 ফাইল | ক্লিপগুলো নির্দিষ্ট ক্রমে একসাথে যুক্ত হয়। ক্লিপের মধ্যে ঐচ্ছিক ট্রানজিশন। |
| অডিও সম্পাদনা | add_audio বা mix_audio |
১টি MP4 + ১টি MP3 | ভিডিওর অডিও ট্র্যাক প্রতিস্থাপন বা সমৃদ্ধ করে। ভিডিও ট্র্যাক কখনো রি-এনকোড হয় না (-c:v copy). |
| ভিডিও তৈরি করুন | image_to_video |
১টি JPG/PNG + ১টি MP3 | একটি স্থির ছবি এবং অডিও ফাইল থেকে ভিডিও তৈরি করে। টেক্সট ওভারলে, ফেড, রেজোলিউশন এবং FPS options ফিল্ডের মাধ্যমে কনফিগারযোগ্য। |
| Overlay video | overlay_video |
2 MP4 | Overlays a second video on top of the main one. Position, size, opacity and audio configurable via the options field. |
| টেক্সট থেকে MP3 | text_to_mp3 |
(শুধু টেক্সট) | টেক্সটকে বক্তৃতায় রূপান্তর করে এবং একটি MP3 ফাইল ফেরত দেয়। কোনো ফাইল আপলোড প্রয়োজন নেই — mode=text_to_mp3, text এবং lang ফর্ম ফিল্ড হিসেবে পাঠান। |
সাধারণ প্যারামিটার (multipart/form-data)
| ফিল্ড | ধরন | প্রয়োজনীয় | বিবরণ |
|---|---|---|---|
| videos[] | File[] | হ্যাঁ | প্রসেস করার ফাইল। মোড অনুযায়ী: ২–২০টি MP4, বা ১টি MP4 + ১টি MP3, বা ১টি ছবি (JPG/PNG) + ১টি MP3। প্রতি ফাইলে সর্বোচ্চ ৫০০ MB। |
| mode | string | * | image_to_video | add_audio | mix_audio। এই তিনটি মোডের জন্য প্রয়োজনীয়। |
| order | JSON | শুধু fusion মোড — ক্লিপের ক্রম নির্ধারণকারী JSON ইনডেক্স অ্যারে। | |
| transition_type | string | শুধু fusion মোড। ডিফল্ট: none। | |
| transition_duration | float | শুধু fusion মোড। সময়কাল ০.২–২.০ সে। ডিফল্ট: 0.5। | |
| options | JSON | শুধু image_to_video মোড — রেন্ডার প্যারামিটারের JSON অবজেক্ট (নিচে দেখুন)। | |
| callback_url | string | পাবলিক URL (http/https) যা জব সম্পন্ন হলে কল হয়। রেসপন্সে webhook_secret থাকে। |
options প্যারামিটার — image_to_video মোড
সবই ঐচ্ছিক। না দেওয়া মানগুলোতে ওয়ার্কার ডিফল্ট প্রয়োগ করে।
| কী | ধরন | ডিফল্ট | বিবরণ |
|---|---|---|---|
| text | string | "" | ওভারলে হিসেবে দেখানো টেক্সট। খালি = কোনো টেক্সট নেই। সর্বোচ্চ ৫০০ অক্ষর। |
| font_size | int | 60 | পিক্সেলে ফন্ট সাইজ। পরিসীমা: ১০–৩০০। |
| text_color | string | "white" | টেক্সটের রঙ (যেমন white, yellow, #ffffff)। |
| text_position | string | "center" | টেক্সটের অবস্থান: center, top, bottom। |
| box | bool | true | টেক্সটের পেছনে আধা-স্বচ্ছ পটভূমি। |
| box_color | string | "black@0.4" | FFmpeg ফরম্যাটে রঙ + অস্বচ্ছতা: color@opacity। |
| fade_duration | float | 0.5 | সেকেন্ডে ফেড ইন/আউট সময়কাল (০–২)। ০ = কোনো ফেড নেই। |
| width | int | 1080 | পিক্সেলে ভিডিওর প্রস্থ (৬৪–৩৮৪০, জোড় সংখ্যা)। |
| height | int | 1920 | পিক্সেলে ভিডিওর উচ্চতা (৬৪–৩৮৪০, জোড় সংখ্যা)। |
| fps | int | 24 | ফ্রেম রেট (১–৬০)। |
| image_fit | string | "contain" | ফ্রেমিং মোড: contain = সম্পূর্ণ ছবি দৃশ্যমান; cover = ছবি পুরো ফ্রেম পূরণ করতে জুম হয়। |
| bg_color | string | "black" | পটভূমির রঙ যদি ছবি লক্ষ্য রেজোলিউশন না পূরণ করে — শুধু image_fit=contain এর সাথে প্রাসঙ্গিক। |
| enable_image_motion | bool | false | ফটো অ্যানিমেশন সক্রিয় করে। false হলে ছবি স্থির থাকে। |
| image_motion_effect | string | "ken_burns" | অ্যানিমেশন ইফেক্ট। গৃহীত মান: zoom_in, zoom_out, pan_left_to_right, pan_right_to_left, pan_top_to_bottom, pan_bottom_to_top, zoom_pan_soft, ken_burns। |
| motion_intensity | float | 1.0 | ফটো অ্যানিমেশনের তীব্রতা (০.২৫–২.০)। |
| text_effect | string | "none" | টেক্সট ওভারলে অ্যানিমেশন। গৃহীত মান: none, fade_in, slide_up, slide_down, slide_left, bounce। |
| text_effect_intensity | float | 1.0 | টেক্সট অ্যানিমেশনের তীব্রতা (০.২৫–২.০)। |
| text_border_width | int | 0 | অক্ষরের চারপাশে কালো আউটলাইনের পুরুত্ব পিক্সেলে (০ = নিষ্ক্রিয়, ১–১০)। |
| text_mode | string | "static" | টেক্সট প্রকাশের মোড। static (ডিফল্ট): প্রথম ফ্রেম থেকে সম্পূর্ণ টেক্সট দৃশ্যমান। word_by_word: word_reveal_speed-এর হারে একটি একটি করে শব্দ দেখা যায়। text_effect-এর সাথে একসাথে ব্যবহার করা যায় না: text_mode=word_by_word হলে text_effect উপেক্ষিত হয়। |
| word_reveal_speed | float | 1.5 | প্রতি সেকেন্ডে শব্দ প্রকাশের গতি (0.3–5.0, ডিফল্ট 1.5)। শুধুমাত্র text_mode=word_by_word-এর সাথে। OpenAI TTS সিঙ্কের জন্য প্রস্তাবিত মান: 2.0। |
| word_anim | string | "none" | প্রতিটি শব্দের আবির্ভাব অ্যানিমেশন। none (ডিফল্ট): তাৎক্ষণিক প্রকাশ। fade: প্রতিটি নতুন শব্দ 0.2s ফেডে প্রকাশ পায়। শুধুমাত্র text_mode=word_by_word এর সাথে। |
options parameters — overlay_video mode
All optional. Upload order matters: the first file is the main video (background), the second file is the overlay (foreground). Use chroma_key to remove a green screen from the overlay.
| কী | ধরন | ডিফল্ট | বিবরণ |
|---|---|---|---|
| position | string | "bottom-right" | Corner where the overlay is placed: top-left, top-right, bottom-left, bottom-right, or center. |
| scale | float | 0.30 | Overlay size as a fraction of the main video width. 0.25 = 25% of the width. Range: 0.05–1.0. |
| opacity | float | 1.0 | Overlay transparency. 1.0 = fully opaque, 0.0 = invisible. |
| margin | int | 10 | Gap in pixels between the overlay and the frame edge. Ignored when position=center. Range: 0–200. |
| audio | string | "main" | Which audio to keep. main: main video audio only. overlay: overlay audio only. mix: both tracks blended at equal volume. |
| chroma_key | bool | false | Set to true to remove the pure green (#00FF00) background of the overlay — useful for webcam or animations filmed on a green screen. |
| chroma_similarity | float | 0.20 | Green screen tolerance. Low = strict match (preserves subject edges). High = broader removal (handles uneven lighting). Recommended: 0.10–0.20 for a digital green, 0.25–0.45 for a physical screen. Range: 0.01–0.60. |
options প্যারামিটার — অডিও সম্পাদনা (mix_audio)
শুধু mode=mix_audio এর সাথে উপলব্ধ।
| কী | ধরন | ডিফল্ট | বিবরণ |
|---|---|---|---|
| mp3_volume | float | 1.0 | ওভারলেড MP3 এর ভলিউম (০.০ = নিঃশব্দ, ১.০ = মূল ভলিউম, ২.০ = দ্বিগুণ)। |
সাফল্যের রেসপন্স (HTTP 200)
curl উদাহরণ — image_to_video মোড
curl উদাহরণ — অডিও সম্পাদনা
curl example — overlay_video mode
curl উদাহরণ — ভিডিও মার্জ
সম্ভাব্য অবস্থা
| অবস্থা | অর্থ | অতিরিক্ত ফিল্ড |
|---|---|---|
| queued | কিউতে, এখনো প্রসেস হয়নি | queue_position, queue_total, eta_minutes |
| processing | FFmpeg প্রসেসিং চলছে | — |
| ready | সম্পন্ন — ফাইল উপলব্ধ | download_url, created_at, expires_at |
| error | প্রসেসিং ব্যর্থ | error (message) |
স্ট্যাটাস অনুযায়ী রেসপন্স
curl উদাহরণ
সাধারণ প্যারামিটার (multipart/form-data)
| apidocs_th_param | ধরন | ডিফল্ট | apidocs_th_desc |
|---|---|---|---|
page | integer | 1 | Page number (starts at 1) |
limit | integer | 20 | Results per page (max 50, default 20) |
স্ট্যাটাস অনুযায়ী রেসপন্স
এক বা একাধিক সামাজিক অ্যাকাউন্টে একটি সম্পন্ন job (status=ready) প্রকাশ করে। টোকেনটি অবশ্যই একটি সদস্য অ্যাকাউন্টের হতে হবে (অ্যাডমিন টোকেন নয়)।
account_id সেখানে দেখানো হয়।সাধারণ প্যারামিটার (multipart/form-data)
| apidocs_th_param | ধরন | apidocs_th_required | apidocs_th_desc |
|---|---|---|---|
job_id | string | apidocs_required | সম্পন্ন ভিডিওর job ID (hex 32 অক্ষর) |
publications | array | apidocs_required | প্রকাশনা অবজেক্টের অ্যারে (সর্বোচ্চ 10) |
প্রকাশনা অবজেক্ট
| apidocs_th_param | ধরন | apidocs_th_required | apidocs_th_desc |
|---|---|---|---|
account_id | integer | apidocs_required | সংযুক্ত সামাজিক অ্যাকাউন্টের ID — সদস্য এলাকার প্রকাশনা পৃষ্ঠায় পাওয়া যাবে |
title | string | — | ভিডিওর শিরোনাম (সর্বোচ্চ 512 অক্ষর) |
description | string | — | ভিডিওর বিবরণ (সর্বোচ্চ 5 000 অক্ষর) |
tags | string | — | কমা-বিভক্ত ট্যাগ (সর্বোচ্চ 1 024 অক্ষর) |
visibility | string | — | public | private | unlisted — ডিফল্ট: public |
tiktok_mode | string | — | draft | direct — শুধু TikTok — ডিফল্ট: direct |
tiktok_privacy | string | direct মোড | শুধু TikTok — direct মোডে আবশ্যক |
allow_comment | boolean | — | শুধু TikTok — মন্তব্যের অনুমতি দিন |
allow_duet | boolean | — | শুধু TikTok — ডুয়েটের অনুমতি দিন |
allow_stitch | boolean | — | শুধু TikTok — স্টিচের অনুমতি দিন |
your_brand | boolean | — | শুধু TikTok — জৈব প্রচারমূলক বিষয়বস্তু ("আপনার ব্র্যান্ড")। |
branded_content | boolean | — | শুধু TikTok — ব্র্যান্ডেড কন্টেন্ট প্রকাশ |
tiktok_cover_ms | integer | — | শুধু TikTok — কভার ফ্রেম টাইমস্ট্যাম্প ms-এ (0–60 000, ডিফল্ট 1 000) |
স্ট্যাটাস অনুযায়ী রেসপন্স
প্রতি প্রকাশনার ত্রুটি কোড
| apidocs_th_code | অর্থ |
|---|---|
job_not_ready | job এখনো সম্পন্ন হয়নি |
mode_not_supported | text_to_mp3 jobs প্রকাশ করা যাবে না |
account_not_found | অ্যাকাউন্ট পাওয়া যায়নি বা সংযোগ বিচ্ছিন্ন |
tiktok_privacy_required | direct মোডে গোপনীয়তার স্তর আবশ্যক |
publication_failed | আপলোডের সময় প্রদানকারী একটি ত্রুটি ফেরত দিয়েছে |
cURL উদাহরণ
চূড়ান্ত MP4 ফাইল স্ট্রিম হিসেবে ফেরত দেয় (Content-Type: video/mp4)। টোকন প্রয়োজন নেই। শুধু তখনই উপলব্ধ যখন স্ট্যাটাস ready।
ফাইলটি জব সম্পন্ন হওয়ার ২ ঘণ্টা পর রাখা হয়, তারপর মুছে যায়।
ঐচ্ছিক প্যারামিটার
| প্যারামিটার | বিবরণ |
|---|---|
| filename | ডাউনলোড করা ফাইলের প্রস্তাবিত নাম (যেমন amar-video.mp4) |
curl উদাহরণ
ওয়েবহুক
ওয়েবহুক পোলিংয়ের বিকল্প: প্রতি X সেকেন্ডে স্ট্যাটাস চেক করার পরিবর্তে, আপনি একটি URL দেন এবং সার্ভার জব সম্পন্ন হলে স্বয়ংক্রিয়ভাবে আপনাকে কল করে।
এটি কীভাবে কাজ করে
/api/v1/render.phpএ POST এcallback_urlপাস করুন- রেসপন্সে
webhook_secretথাকে — সিগনেচার যাচাই করতে এটি রাখুন - জব
readyবাerrorএ পৌঁছালে সার্ভার আপনার URL এ স্বাক্ষরিত JSONPOSTপাঠায় HMAC-SHA256(webhook_secret, raw_body)দিয়ে সিগনেচার যাচাই করুন
callback_url অবশ্যই একটি সার্বজনীনভাবে অ্যাক্সেসযোগ্য URL হতে হবে। ব্যক্তিগত এবং লুপব্যাক IP ঠিকানা ব্লক করা। প্রাপ্ত পেলোড
সার্ভারের পাঠানো হেডার
| হেডার | মান |
|---|---|
| Content-Type | application/json |
| X-RVM-Signature | sha256=<hmac_hex> — raw body এর HMAC-SHA256 সিগনেচার |
| X-RVM-Job-Id | সংশ্লিষ্ট job_id |
সিগনেচার যাচাইকরণ
ত্রুটি কোড
| HTTP | JSON কোড | কারণ |
|---|---|---|
| 401 | unauthorized | টোকন অনুপস্থিত, অবৈধ বা বাতিল |
| 400 | missing_files | কোনো ফাইল পাওয়া যায়নি |
| 400 | too_few_files | ২টির কম ফাইল পাঠানো হয়েছে |
| 400 | too_many_files | ২০টির বেশি ফাইল পাঠানো হয়েছে |
| 400 | invalid_mime | অসমর্থিত ফাইল — শুধু MP4, MP3 এবং JPG/PNG ছবি গ্রহণযোগ্য |
| 400 | wrong_file_count | ফাইলের সংখ্যা নির্বাচিত মোডের সাথে মেলে না |
| 400 | wrong_file_types | ফাইলের ধরন নির্বাচিত মোডের সাথে মেলে না |
| 400 | invalid_file_combination | মোড ছাড়া ফাইল সমন্বয় কোনো সমর্থিত মোডের সাথে মেলে না |
| 400 | invalid_options | options ফিল্ড বৈধ JSON নয় |
| 400 | invalid_option | options এ একটি মান অবৈধ |
| 400 | file_too_large | একটি ফাইল ৫০০ MB ছাড়িয়েছে |
| 400 | invalid_order | order অ্যারে বৈধ পারমুটেশন নয় |
| 400 | invalid_job_id | ভুল job_id ফরম্যাট (৩২-অক্ষরের হেক্স হতে হবে) |
| 404 | job_not_found | জব পাওয়া যায়নি — job_id অজানা বা কখনো ছিল না |
| 410 | job_expired | জব মেয়াদোত্তীর্ণ — ছিল কিন্তু ২ ঘণ্টার রিকভারি উইন্ডো পার হয়েছে |
| 429 | quota_exceeded | প্রতিদিন ২০টি সফল জব পৌঁছেছে |
| 429 | rate_limited | /api/v1/jobs.php এ প্রতি মিনিটে ১২টির বেশি কল — Retry-After সেকেন্ড অপেক্ষা করুন |
| 500 | server_error | অভ্যন্তরীণ সার্ভার ত্রুটি |
ইন্টিগ্রেশন উদাহরণ
প্রতিটি মোডের জন্য উদাহরণ — pip install requests দিয়ে requests ইনস্টল করুন।
সাধারণ কনফিগারেশন
image_to_video মোড — ছবি + অডিও → ভিডিও
অডিও সম্পাদনা
overlay_video mode — picture-in-picture
ভিডিও মার্জ
পোলিং + ডাউনলোড (সব মোডের জন্য সাধারণ)
n8n এ দুটি পদ্ধতি: পোলিং (স্ট্যাটাস লুপ) বা ওয়েবহুক (সার্ভার n8n কে কল করে)। ওয়েবহুক সুপারিশ করা হয়।
পদ্ধতি A — ওয়েবহুক (সুপারিশকৃত)
মাত্র ৩টি নোড, কোনো লুপ নেই।
নোড ১ — ওয়েবহুক ট্রিগার
ওয়ার্কফ্লো ইনপুট হিসেবে একটি Webhook নোড যোগ করুন (মেথড POST)।
নোড ২ — জব তৈরি করুন (HTTP Request)
| মেথড | POST |
| URL | https://rapidvideomaker.com/api/v1/render.php |
| প্রমাণীকরণ | Header Auth — Authorization: Bearer rvm_… |
| Body Content Type | Form-Data Multipart |
| Body params | প্রতিটি ক্লিপের জন্য বাইনারি ফিল্ড videos[] + টেক্সট ফিল্ড callback_url = উপরের ওয়েবহুক নোড URL |
সিগনেচার যাচাই করতে রেসপন্স থেকে webhook_secret একটি ওয়ার্কফ্লো ভেরিয়েবলে সংরক্ষণ করুন।
নোড ৩ — ফলাফল প্রসেস করুন (ওয়েবহুক-ট্রিগার্ড ওয়ার্কফ্লোতে)
n8n সার্ভারের POST পেলে, $json.status ready বা error হয়। ready হলে $json.download_url এ সরাসরি ডাউনলোড URL থাকে।
webhook_secret থেকে raw body এর HMAC-SHA256 এর সাথে {{ $headers['x-rvm-signature'] }} তুলনা করুন।পদ্ধতি B — পোলিং (ওয়েবহুক ছাড়া)
৫টি নোড, প্রতি ১০ সেকেন্ডে স্ট্যাটাস লুপ।
নোড ১ — জব তৈরি করুন — উপরের মতো কনফিগ, callback_url ছাড়া।
নোড ২ — অপেক্ষা করুন — ১০ সেকেন্ড।
নোড ৩ — স্ট্যাটাস পোল করুন (HTTP Request GET)
| URL | https://rapidvideomaker.com/api/v1/jobs.php |
| Query প্যারামিটার | job_id = {{ $('নোড ১').item.json.job_id }} |
| প্রমাণীকরণ | Header Auth — একই টোকন |
নোড ৪ — If: {{ $json.status }} === 'ready' → true: নোড ৫ / false: নোড ২ এ ফিরুন।
নোড ৫ — ডাউনলোড: {{ $json.download_url }} এ HTTP Request GET, Response Format File।
ধাপ ১ — জব তৈরি করুন (একটি মোড বেছে নিন)
ধাপ ২ — পোলিং
ধাপ ৩ — ডাউনলোড
সেরা অনুশীলন
- পোলিং ফ্রিকোয়েন্সি:
/api/v1/jobs.phpএন্ডপয়েন্ট প্রতি টোকনে ১২ কল/মিনিট সীমাবদ্ধ।429এড়াতে কলের মধ্যে কমপক্ষে ৫ সেকেন্ড (১০ সেকেন্ড সুপারিশকৃত) রাখুন। - টাইমআউট: ক্লায়েন্ট-সাইড টাইমআউট প্রয়োগ করুন (যেমন ১০ মিনিট)।
- দ্রুত ডাউনলোড করুন: স্ট্যাটাস
readyহওয়ার সাথে সাথে ফাইল ডাউনলোড করুন। জব সম্পন্ন হওয়ার ২ ঘণ্টা পর মুছে যায়। - কোটা ব্যবস্থাপনা: POST রেসপন্সে
quota_remainingচেক করুন।0হলে পরের জব429এ প্রত্যাখ্যাত হবে। - নেটওয়ার্ক ত্রুটি: পোলিংয়ের সময় নেটওয়ার্ক ত্রুটি হলে অপেক্ষা করুন এবং পুনরায় চেষ্টা করুন।
ready হওয়ার সাথে সাথে ভিডিও ডাউনলোড করুন।