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/MOV), Edit audio (1 MP4/MOV + 1 MP3), Create a video (1 JPG/PNG + 1 MP3), Overlay video (2 MP4/MOV 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/MOV + ১টি MP3 → অডিও সম্পাদনা। একাধিক MP4/MOV → মার্জ। সার্ভার একটি অনন্য job_id ফেরত দেয়। অথবা ১টি ছবি + options.text + options.voice: কণ্ঠ লেখা থেকে তৈরি হয়, MP3 লাগে না।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/MOV ফাইল | ক্লিপগুলো নির্দিষ্ট ক্রমে একসাথে যুক্ত হয়। ক্লিপের মধ্যে ঐচ্ছিক ট্রানজিশন। |
| অডিও সম্পাদনা | add_audio বা mix_audio |
১টি MP4/MOV + ১টি MP3 | ভিডিওর অডিও ট্র্যাক প্রতিস্থাপন বা সমৃদ্ধ করে। ভিডিও ট্র্যাক কখনো রি-এনকোড হয় না (-c:v copy). |
| ভিডিও তৈরি করুন | image_to_video |
১টি JPG/PNG + ১টি MP3 — অথবা ১টি JPG/PNG + একটি লেখা (options.text + options.voice): কণ্ঠ তৈরি হয় |
একটি স্থির ছবি ও আপনার MP3 থেকে — অথবা শুধু একটি লেখা (options.text) থেকে, যার কণ্ঠ তৈরি হয় (options.voice) — ভিডিও তৈরি করে। টেক্সট ওভারলে (স্থির, শব্দে শব্দে বা কারাওকে), ফেড, রেজোলিউশন ও fps options ফিল্ড দিয়ে নির্ধারণ করা যায়। |
| ভিডিও ওভারলে | overlay_video |
2 MP4/MOV | মূল ভিডিওর ওপরে দ্বিতীয় ভিডিও বসায়। options ফিল্ড দিয়ে অবস্থান, আকার, অস্বচ্ছতা ও অডিও ঠিক করুন। |
| টেক্সট যোগ করুন | add_text |
১টি MP4/MOV | বিদ্যমান ভিডিওর উপর টেক্সট বসায় (রেজোলিউশন, ফ্রেম রেট ও অডিও অপরিবর্তিত থাকে)। image_to_video-এর মতোই টেক্সট সেটিংস, সঙ্গে টেক্সট কখন দেখা যাবে তার সময়। options.text আবশ্যক। |
| টেক্সট থেকে MP3 | text_to_mp3 |
(শুধু টেক্সট) | টেক্সটকে বক্তৃতায় রূপান্তর করে এবং একটি MP3 ফাইল ফেরত দেয়। কোনো ফাইল আপলোড প্রয়োজন নেই — mode=text_to_mp3, text এবং lang ফর্ম ফিল্ড হিসেবে পাঠান। |
options.text + options.voice থাকলে image_to_video শুধু ১টি ছবি নেয় — কণ্ঠ লেখা থেকে তৈরি হয় (MP3 ছাড়া)।options.voice থাকলে image_to_video-এর দৈর্ঘ্য লেখা থেকে তৈরি কণ্ঠের সমান (+0.6 সে.)।সাধারণ প্যারামিটার (multipart/form-data)
| ফিল্ড | ধরন | প্রয়োজনীয় | বিবরণ |
|---|---|---|---|
| videos[] | File[] | হ্যাঁ | প্রসেস করার ফাইল। মোড অনুযায়ী: ২–২০টি MP4/MOV, বা ১টি MP4/MOV + ১টি MP3, বা ১টি ছবি (JPG/PNG) + ১টি MP3। প্রতি ফাইলে সর্বোচ্চ ৫০০ MB। |
| mode | string | * | image_to_video | add_audio | mix_audio | overlay_video | text_to_mp3। এই non-fusion মোডগুলির জন্য প্রয়োজনীয়। শুধু MP4/MOV ফাইল সহ mode বাদ দিলে সর্বদা fusion ট্রিগার হয় (স্ট্রিম-কপি সংযুক্তি) — কখনও overlay_video নয়, এমনকি ঠিক ২টি MP4/MOV আপলোড করা হলেও। অডিও সম্পাদনার জন্য: add_audio মূলটি মুছে দেয়, mix_audio এটি রাখে এবং ওভারলে করে। যদি mode ফিল্ড দেওয়া হয়, আপলোড করা ফাইলগুলি অবশ্যই ঠিকভাবে মিলতে হবে — নাহলে অনুরোধ প্রত্যাখ্যান করা হয়। add_text-ও গ্রহণযোগ্য: এটিই একমাত্র মোড যা একটিমাত্র MP4/MOV ফাইল নেয় এবং options.text দাবি করে। |
| order | JSON | শুধু fusion মোড — ক্লিপের ক্রম নির্ধারণকারী JSON ইনডেক্স অ্যারে। | |
| transition_type | string | শুধু fusion মোড। ডিফল্ট: none। | |
| transition_duration | float | শুধু fusion মোড। সময়কাল ০.২–২.০ সে। ডিফল্ট: 0.5। | |
| options | JSON | image_to_video, add_text, mix_audio ও overlay_video-এর রেন্ডার প্যারামিটারের JSON অবজেক্ট (নিচের টেবিলগুলো দেখুন)। | |
| timings | File / string | image_to_video / add_text: কারাওকে টাইমিং ফাইল (SRT বা LRC, সর্বোচ্চ ২০০ KB) — ফাইল ফিল্ড বা সাধারণ টেক্সট। দেখানো টেক্সট ফাইল থেকে আসে; text_mode=karaoke বাধ্যতামূলক হয়; voice-এর সাথে ব্যবহার করা যায় না। | |
| callback_url | string | পাবলিক URL (http/https) যা জব সম্পন্ন হলে কল হয়। রেসপন্সে webhook_secret থাকে। |
options প্যারামিটার — image_to_video মোড
সবই ঐচ্ছিক। না দেওয়া মানগুলোতে ওয়ার্কার ডিফল্ট প্রয়োগ করে।
| কী | ধরন | ডিফল্ট | বিবরণ |
|---|---|---|---|
| text | string | "" | ওভারলে হিসেবে দেখানো টেক্সট। খালি = কোনো টেক্সট নেই। সর্বোচ্চ ৫০০ অক্ষর। |
| font | string | "default" | টেক্সটের ফন্ট, আইডি অনুযায়ী। গ্রহণযোগ্য মান: default, dejavu-sans-bold, dejavu-serif, liberation-serif, dejavu-mono, amiri, noto-sans-sc (简体中文), noto-sans-tc (繁體中文), noto-sans-jp (日本語), noto-sans-kr (한국어), noto-sans-hebrew (עברית), noto-sans-thai (ไทย)। default = স্ট্যান্ডার্ড ফন্ট (ইমোজি সমর্থিত); amiri = নাসখ ফন্ট, আরবি টেক্সটের জন্য আদর্শ। অন্য যেকোনো মান invalid_option ত্রুটি ফেরত দেয়। ইমোজি শুধু default-এ দেখা যায়। |
| 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: পুরো ছবি বা ভিডিও দেখান এবং ফাঁকা জায়গা নির্বাচিত পটভূমি দিয়ে পূরণ করুন। solid (ডিফল্ট) অথবা blur। ঝাপসার জন্য image_fit=contain প্রয়োজন। লেখা পরিষ্কার থাকে। cover: ছবি ফ্রেম পূর্ণ করতে জুম হয়, কেন্দ্রীভূত — প্রান্ত কাটা যায়। |
| bg_color | string | "black" | background_mode=solid: পটভূমির রঙ যদি ছবি লক্ষ্য রেজোলিউশন না পূরণ করে — শুধু image_fit=contain এর সাথে প্রাসঙ্গিক। |
| background_mode | string | "solid" | solid (ডিফল্ট) অথবা blur। ঝাপসার জন্য image_fit=contain প্রয়োজন। লেখা পরিষ্কার থাকে। |
| blur_strength | number | 20 | ১ থেকে ৫০ পর্যন্ত সংখ্যা; ডিফল্ট ২০। শুধু পটভূমিতে গাউসিয়ান ঝাপসা প্রয়োগ করা হয়। |
| 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_border_color | string | "black" | অক্ষরের আউটলাইনের রং (text_color-এর মতো একই ফরম্যাট, ডিফল্ট "black")। text_border_width > 0 হলে ব্যবহৃত হয়। |
| text_mode | string | "static" | টেক্সট প্রকাশের মোড। static (ডিফল্ট): প্রথম ফ্রেম থেকে সম্পূর্ণ টেক্সট দৃশ্যমান। word_by_word: word_reveal_speed-এর হারে একটি একটি করে শব্দ দেখা যায়। text_effect-এর সাথে একসাথে ব্যবহার করা যায় না: text_mode=word_by_word হলে text_effect উপেক্ষিত হয়। "karaoke": অডিওর ছন্দে টেক্সটের রং বদলায়, পাতায় পাতায় (১,০০০ অক্ষর পর্যন্ত)। voice থাকলে শব্দে শব্দে সিঙ্ক, না হলে শব্দের দৈর্ঘ্য অনুযায়ী অডিওতে ভাগ করা হয়। |
| 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 এর সাথে। |
| karaoke_style | string | "fill" | কারাওকে স্টাইল: fill (উচ্চারিত শব্দ হাইলাইট রং পায়), sweep (প্রতিটি শব্দ ধীরে ধীরে পূরণ হয়; ডান থেকে বাঁয়ে লেখা লিপিতে পুরো শব্দ) বা highlight (শুধু বর্তমান শব্দ রঙিন)। |
| highlight_color | string | "#FFD200" | কারাওকে মোডে উচ্চারিত শব্দ / বর্তমান শব্দের রং (text_color-এর মতো একই ফরম্যাট)। |
| karaoke_lines | int | 2 | কারাওকে মোডে প্রতি পাতায় দেখানো লাইন (১–৪)। |
| voice | string | "" | কণ্ঠ ID (text_to_mp3-এর একই তালিকা, যেমন bn-IN-TanishaaNeural): একই জবে text থেকে কণ্ঠ তৈরি হয়। তখন image_to_video-এর শুধু ছবি দরকার (সাথে পাঠানো MP3 প্রত্যাখ্যাত হয়)। কারাওকে মোডে প্রতিটি শব্দ কণ্ঠের সাথে সিঙ্ক হয়। |
| voice_rate | int | 0 | তৈরি করা কণ্ঠের গতি, % এ (−৫০ থেকে +৫০)। |
নিজের টাইমিং দিয়ে কারাওকে (SRT / LRC)
timings ফিল্ডে একটি SRT বা LRC ফাইল পাঠান: প্রতিটি লাইন নিজের সময়ে দেখা দেয় এবং কারাওকের একটি পাতা হয় (সর্বোচ্চ ৫০০ লাইন, ৫,০০০ অক্ষর)। SRT: লাইন তার শেষ সময়ে মিলিয়ে যায়। LRC: লাইন পরেরটি পর্যন্ত থাকে (ফাঁকা লাইন তা থামায়); [offset:] এবং enhanced LRC-এর শব্দভিত্তিক সময় <mm:ss.xx> সমর্থিত — না হলে প্রতিটি লাইন তার সময়কালে ভাগ হয়। add_text-এ সময় ভিডিওর শুরু থেকে গোনা হয়, text_start পরিমাণ সরিয়ে।
options প্যারামিটার — overlay_video মোড
সবই ঐচ্ছিক। আপলোডের ক্রম গুরুত্বপূর্ণ: প্রথম ফাইল মূল ভিডিও (পটভূমি), দ্বিতীয় ফাইল ওপরে বসানোর ভিডিও। সবুজ পর্দা সরাতে chroma_key ব্যবহার করুন।
| কী | ধরন | ডিফল্ট | বিবরণ |
|---|---|---|---|
| position | string | "bottom-right" | ভিডিও বসানোর কোণ: top-left, top-right, bottom-left, bottom-right বা center। |
| scale | float | 0.30 | মূল ভিডিওর প্রস্থের অনুপাতে ওপরের ভিডিওর আকার। 0.25 = প্রস্থের 25%। সীমা: 0.05–1.0। |
| opacity | float | 1.0 | ওপরের ভিডিওর অস্বচ্ছতা। 1.0 = সম্পূর্ণ অস্বচ্ছ, 0.0 = অদৃশ্য। |
| margin | int | 10 | ওপরের ভিডিও ও ফ্রেমের কিনারার দূরত্ব, পিক্সেলে। position=center হলে উপেক্ষিত। সীমা: 0–200। |
| audio | string | "main" | কোন অডিও থাকবে: main শুধু মূল ভিডিও, overlay শুধু ওপরের ভিডিও, mix সমান ভলিউমে দুটির অডিও মিক্স করে। |
| chroma_key | bool | false | ওপরের ভিডিওর বিশুদ্ধ সবুজ (#00FF00) পটভূমি সরাতে true দিন — সবুজ পর্দায় ধারণ করা ওয়েবক্যাম ভিডিও বা অ্যানিমেশনে উপযোগী। |
| chroma_similarity | float | 0.20 | সবুজ রঙ মেলানোর সহনশীলতা। কম মান বিষয়ের কিনারা বাঁচায়; বেশি মান অসম আলোর পটভূমি সরায়। ডিজিটাল সবুজে 0.10–0.20, বাস্তব পর্দায় 0.25–0.45 প্রস্তাবিত। সীমা: 0.01–0.60। |
options প্যারামিটার — add_text মোড
লেখা আবশ্যক। ডিফল্টভাবে ভিডিওর বিন্যাস, ফ্রেম রেট ও অডিও বজায় থাকে। output_format দিয়ে image_fit, bg_color ও background_mode সহ নতুন ফ্রেম নেওয়া যায়। width, height, fps ও ছবির গতির বিকল্প উপেক্ষিত থাকে। সর্বোচ্চ দৈর্ঘ্য: ১৫ মিনিট।
{"text":"Hello","output_format":"portrait","image_fit":"contain","background_mode":"blur","blur_strength":20}
| কী | ধরন | ডিফল্ট | বিবরণ |
|---|---|---|---|
| text | string | হ্যাঁ | বসানোর টেক্সট। আবশ্যক, ১–২০০ অক্ষর। |
| text_start | float | 0 | যে সেকেন্ডে টেক্সট দেখা যায় (≥ 0)। ভিডিও শেষ হওয়ার আগে হতে হবে। |
| text_duration | float | 0 | টেক্সট কতক্ষণ দৃশ্যমান থাকবে, সেকেন্ডে (0.1–3600)। 0 = ভিডিওর শেষ পর্যন্ত। |
| font | string | "default" | টেক্সটের ফন্ট, আইডি অনুযায়ী। গ্রহণযোগ্য মান: default, dejavu-sans-bold, dejavu-serif, liberation-serif, dejavu-mono, amiri, noto-sans-sc (简体中文), noto-sans-tc (繁體中文), noto-sans-jp (日本語), noto-sans-kr (한국어), noto-sans-hebrew (עברית), noto-sans-thai (ไทย)। default = স্ট্যান্ডার্ড ফন্ট (ইমোজি সমর্থিত); amiri = নাসখ ফন্ট, আরবি টেক্সটের জন্য আদর্শ। অন্য যেকোনো মান invalid_option ত্রুটি ফেরত দেয়। ইমোজি শুধু default-এ দেখা যায়। |
| font_size | int | 60 | ফন্টের আকার, যে ভিডিওর ছোট বাহু ১০৮০ px তার জন্য নির্ধারিত এবং প্রকৃত রেজোলিউশন অনুযায়ী স্বয়ংক্রিয়ভাবে স্কেল হয় — একই মান 720p ও 4K-তে একই দেখায়। পরিসর: 10–300। |
| fade_duration | float | 0.5 | টেক্সটের (ভিডিওর নয়) ফেড ইন/আউটের সময়কাল, সেকেন্ডে। পরিসর: 0–2। |
| text_color, box, box_color, text_position, text_border_width, text_border_color, text_effect, text_effect_intensity, text_mode, word_reveal_speed, word_anim, karaoke_style, highlight_color, karaoke_lines, voice, voice_rate | — | — | image_to_video-এর অনুরূপ (উপরের টেবিল দেখুন)। |
| original_volume | float | 0.3 | voice সহ: কণ্ঠের নিচে ভিডিওর মূল শব্দের ভলিউম (০–২, ডিফল্ট 0.3; ০ = প্রতিস্থাপিত)। কণ্ঠ text_start-এ শুরু হয়; শেষ না হওয়া পর্যন্ত টেক্সট দেখা যায়, আর ভিডিওর শেষ পেরিয়ে গেলে শেষ ফ্রেমটি ধরে রাখা হয়। |
| background_mode | string | "solid" | solid (ডিফল্ট) অথবা blur। ঝাপসার জন্য image_fit=contain প্রয়োজন। লেখা পরিষ্কার থাকে। |
| blur_strength | number | 20 | ১ থেকে ৫০ পর্যন্ত সংখ্যা; ডিফল্ট ২০। শুধু পটভূমিতে গাউসিয়ান ঝাপসা প্রয়োগ করা হয়। |
| output_format | string | "original" | শুধু add_text: original (ডিফল্ট), portrait (1080×1920), square (1080×1080), landscape (1920×1080)। ঝাপসার জন্য original ছাড়া অন্য বিন্যাস প্রয়োজন। |
| image_fit | string | "contain" | contain: পুরো ছবি বা ভিডিও দেখান এবং ফাঁকা জায়গা নির্বাচিত পটভূমি দিয়ে পূরণ করুন। solid (ডিফল্ট) অথবা blur। ঝাপসার জন্য image_fit=contain প্রয়োজন। লেখা পরিষ্কার থাকে। cover: ছবি ফ্রেম পূর্ণ করতে জুম হয়, কেন্দ্রীভূত — প্রান্ত কাটা যায়। |
| bg_color | string | "black" | background_mode=solid: পটভূমির রঙ যদি ছবি লক্ষ্য রেজোলিউশন না পূরণ করে — শুধু image_fit=contain এর সাথে প্রাসঙ্গিক। |
options প্যারামিটার — অডিও সম্পাদনা (mix_audio)
শুধু mode=mix_audio এর সাথে উপলব্ধ।
| কী | ধরন | ডিফল্ট | বিবরণ |
|---|---|---|---|
| mp3_volume | float | 1.0 | ওভারলেড MP3 এর ভলিউম (০.০ = নিঃশব্দ, ১.০ = মূল ভলিউম, ২.০ = দ্বিগুণ)। |
text_to_mp3 মোড — সরাসরি প্যারামিটার (options JSON নেই)
অন্যান্য মোডের বিপরীতে, এই ফিল্ডগুলি সরাসরি ফর্ম ফিল্ড হিসেবে পাঠানো হয়, options JSON অবজেক্টের ভিতরে নয়। শুধুমাত্র text আবশ্যক।
| কী | ধরন | ডিফল্ট | বিবরণ |
|---|---|---|---|
| text | string | — | কথায় রূপান্তরের জন্য টেক্সট। আবশ্যক। সর্বোচ্চ ৫,০০০ অক্ষর। |
| lang | string | "en" | voice বাদ দেওয়া হলে বা অবৈধ হলে ডিফল্ট ভয়েস নির্বাচনের জন্য ব্যবহৃত ভাষা কোড। সাইটের ২০টি ভাষার একটি (নিচের টেবিল দেখুন)। অজানা হলে en-এ ফিরে যায়। |
| voice | string | স্বয়ংক্রিয় | edge-tts ভয়েস ID (নিচের টেবিল দেখুন)। বাদ দেওয়া হলে বা অবৈধ হলে, lang-এর প্রথম ভয়েসটি স্বয়ংক্রিয়ভাবে ব্যবহৃত হয়। |
| slow | bool | false | কথা বলার গতি ২৫% কমাতে true (বা 1) সেট করুন। অন্য যেকোনো মান false হিসেবে গণ্য হয়। |
text_to_mp3-এর videos[] প্রয়োজন হয় না। সাধারণ ফর্ম ফিল্ড হিসেবে mode=text_to_mp3-এর সাথে text / lang / voice / slow পাঠান।উপলব্ধ ভয়েস (edge-tts, Microsoft Neural), ভাষা কোড অনুসারে গোষ্ঠীবদ্ধ:
| ভাষা | উপলব্ধ ভয়েস |
|---|---|
en |
en-US-AvaNeural, en-US-AndrewNeural, en-GB-LibbyNeural, en-AU-NatashaNeural, en-AU-WilliamMultilingualNeural |
fr |
fr-FR-DeniseNeural, fr-FR-HenriNeural, fr-FR-EloiseNeural, fr-CA-SylvieNeural, fr-CA-ThierryNeural |
es |
es-ES-ElviraNeural, es-ES-AlvaroNeural, es-MX-DaliaNeural, es-AR-ElenaNeural, es-AR-TomasNeural |
ar |
ar-SA-ZariyahNeural, ar-SA-HamedNeural, ar-EG-SalmaNeural, ar-MA-MounaNeural, ar-MA-JamalNeural |
pt |
pt-BR-FranciscaNeural, pt-BR-AntonioNeural, pt-PT-RaquelNeural |
de |
de-DE-KatjaNeural, de-DE-ConradNeural, de-DE-AmalaNeural, de-AT-IngridNeural, de-AT-JonasNeural |
it |
it-IT-ElsaNeural, it-IT-DiegoNeural, it-IT-IsabellaNeural |
nl |
nl-NL-ColetteNeural, nl-NL-MaartenNeural, nl-BE-DenaNeural, nl-BE-ArnaudNeural |
ru |
ru-RU-SvetlanaNeural, ru-RU-DmitryNeural |
tr |
tr-TR-EmelNeural, tr-TR-AhmetNeural |
hi |
hi-IN-SwaraNeural, hi-IN-MadhurNeural |
bn |
bn-IN-TanishaaNeural, bn-IN-BashkarNeural, bn-BD-NabanitaNeural, bn-BD-PradeepNeural |
ur |
ur-PK-UzmaNeural, ur-PK-AsadNeural, ur-IN-GulNeural, ur-IN-SalmanNeural |
id |
id-ID-GadisNeural, id-ID-ArdiNeural |
ja |
ja-JP-NanamiNeural, ja-JP-KeitaNeural |
ko |
ko-KR-SunHiNeural, ko-KR-InJoonNeural |
zh-CN |
zh-CN-XiaoxiaoNeural, zh-CN-YunxiNeural, zh-CN-XiaoyiNeural |
zh-TW |
zh-TW-HsiaoChenNeural, zh-TW-YunJheNeural |
vi |
vi-VN-HoaiMyNeural, vi-VN-NamMinhNeural |
pl |
pl-PL-ZofiaNeural, pl-PL-MarekNeural |
সাফল্যের রেসপন্স (HTTP 200)
text_to_mp3-এর জন্য, রেসপন্সে file_count বা transition ফিল্ড থাকে না (কোনো ফাইল আপলোড হয়নি) — বাকিটা অভিন্ন: job_id, quota_used, quota_remaining, status_url, webhook_secret।curl উদাহরণ — image_to_video মোড
তৈরি করা কণ্ঠসহ কারাওকে টেক্সট (image_to_video, MP3 ছাড়া)
SRT ফাইল দিয়ে কারাওকে (image_to_video + আপনার MP3)
curl উদাহরণ — অডিও সম্পাদনা
curl উদাহরণ — overlay_video মোড
curl উদাহরণ — add_text মোড
curl উদাহরণ — ভিডিও মার্জ
curl উদাহরণ — text_to_mp3 মোড
স্ট্যাটাসে প্রকৃত ধাপ ও অতিবাহিত সময় থাকে। অনুমান আনুমানিক; ক্লায়েন্টের সময়সীমা শেষ হওয়া মানে কাজ ব্যর্থ নয়। একই কাজের ID দিয়ে আবার স্ট্যাটাস দেখুন। সম্পন্ন হওয়ার দুই ঘণ্টা পর ফাইলের মেয়াদ শেষ হয়।
সম্ভাব্য অবস্থা
| অবস্থা | অর্থ | অতিরিক্ত ফিল্ড |
|---|---|---|
| queued | কিউতে, এখনো প্রসেস হয়নি | queue_position, queue_total, eta_minutes |
| processing | FFmpeg প্রসেসিং চলছে | processing_stage, processing_elapsed_seconds, stage_elapsed_seconds, last_activity_at, processed_media_seconds, eta_overrun |
| ready | সম্পন্ন — ফাইল উপলব্ধ | download_url, media_available, created_at, expires_at |
| error | প্রসেসিং ব্যর্থ | error (message), quota_refund_status: pending | confirmed | not_required |
| cancelled | বাতিল হয়েছে | quota_refund_status: pending | confirmed | not_required |
স্ট্যাটাস অনুযায়ী রেসপন্স
curl উদাহরণ
সাধারণ প্যারামিটার (multipart/form-data)
| প্যারামিটার | ধরন | ডিফল্ট | বিবরণ |
|---|---|---|---|
page | integer | 1 | পাতা নম্বর (১ থেকে শুরু) |
limit | integer | 20 | প্রতি পাতায় ফলাফল (সর্বোচ্চ ৫০, ডিফল্ট ২০) |
স্ট্যাটাস অনুযায়ী রেসপন্স
চূড়ান্ত ফাইল স্ট্রিম করে। Content-Type ভিডিও মোডের জন্য video/mp4, বা text_to_mp3-এর জন্য audio/mpeg। টোকন প্রয়োজন নেই। শুধু তখনই উপলব্ধ যখন স্ট্যাটাস ready।
ফাইলটি জব সম্পন্ন হওয়ার ২ ঘণ্টা পর রাখা হয়, তারপর মুছে যায়।
ঐচ্ছিক প্যারামিটার
| প্যারামিটার | বিবরণ |
|---|---|
| filename | ডাউনলোড করা ফাইলের প্রস্তাবিত নাম (যেমন amar-video.mp4) |
| preview | ডাউনলোড শুরু করার পরিবর্তে ইনলাইন প্লেব্যাকের জন্য (Content-Disposition: attachment বাদ দেয়) 1 সেট করুন — ব্রাউজারে প্রিভিউয়ের জন্য ব্যবহৃত। |
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 | text_required | options.text ফিল্ড নেই বা খালি (add_text মোড) |
| 400 | video_too_long | ভিডিও ১৫ মিনিটের চেয়ে দীর্ঘ (add_text মোড) |
| 400 | text_start_out_of_range | text_start ভিডিওর শেষ ছাড়িয়ে গেছে |
| 400 | invalid_voice | অজানা voice ID। |
| 400 | invalid_timings | অপাঠযোগ্য টাইমিং ফাইল (ফরম্যাট চেনা যায়নি, সময়সহ কোনো লাইন নেই, শুরুর আগে শেষ, খুব দীর্ঘ…)। |
| 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 মোড — ছবির মধ্যে ছবি
add_text মোড — ভিডিওতে টেক্সট
ভিডিও মার্জ
text_to_mp3 মোড — টেক্সট থেকে ভয়েস
পোলিং + ডাউনলোড (সব মোডের জন্য সাধারণ)
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।
ধাপ ১ — জব তৈরি করুন (একটি মোড বেছে নিন)
ধাপ ২ — পোলিং
ধাপ ৩ — ডাউনলোড
সেরা অনুশীলন
- একই কাজের স্ট্যাটাস প্রতি ৫–১০ সেকেন্ডে দেখুন। সময় মোড ও ইনপুটের আকারের ওপর নির্ভর করে।
- স্ট্যাটাসে প্রকৃত ধাপ ও অতিবাহিত সময় থাকে। অনুমান আনুমানিক; ক্লায়েন্টের সময়সীমা শেষ হওয়া মানে কাজ ব্যর্থ নয়। একই কাজের ID দিয়ে আবার স্ট্যাটাস দেখুন। সম্পন্ন হওয়ার দুই ঘণ্টা পর ফাইলের মেয়াদ শেষ হয়।
- দ্রুত ডাউনলোড করুন: স্ট্যাটাস
readyহওয়ার সাথে সাথে ফাইল ডাউনলোড করুন। জব সম্পন্ন হওয়ার ২ ঘণ্টা পর মুছে যায়। - কোটা ব্যবস্থাপনা: POST রেসপন্সে
quota_remainingচেক করুন।0হলে পরের জব429এ প্রত্যাখ্যাত হবে। - নেটওয়ার্ক ত্রুটি: পোলিংয়ের সময় নেটওয়ার্ক ত্রুটি হলে অপেক্ষা করুন এবং পুনরায় চেষ্টা করুন।
ready হওয়ার সাথে সাথে ভিডিও ডাউনলোড করুন।