RapidVideoMaker
অ্যাকাউন্ট তৈরি করুন

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.

বিনামূল্যে আপনার API টোকেন পান
আপনার API টোকেন পেতে একটি অ্যাকাউন্ট তৈরি করুন — প্রতিদিন ২০টি অনুরোধ অন্তর্ভুক্ত।
বিনামূল্যে অ্যাকাউন্ট তৈরি করুন ইতিমধ্যে অ্যাকাউন্ট আছে? সাইন ইন করুন

সম্পূর্ণ ওয়ার্কফ্লো

প্রতিটি ইন্টিগ্রেশন একই ৪-ধাপের ক্রম অনুসরণ করে:

1
জব তৈরি করুন — POST /api/v1/render.php
আপনার Bearer টোকন সহ multipart/form-data হিসেবে ফাইল পাঠান। ১টি JPG/PNG ছবি + ১টি MP3 + mode=image_to_video → ভিডিও জেনারেশন। ১টি MP4/MOV + ১টি MP3 → অডিও সম্পাদনা। একাধিক MP4/MOV → মার্জ। সার্ভার একটি অনন্য job_id ফেরত দেয়। অথবা ১টি ছবি + options.text + options.voice: কণ্ঠ লেখা থেকে তৈরি হয়, MP3 লাগে না।
2
জবের জন্য অপেক্ষা করুন — GET /api/v1/jobs.php?job_id=…
নিয়মিত এই এন্ডপয়েন্ট পোল করুন (প্রতি ৫–১০ সে)। জব queued → processing → ready (বা error) পর্যন্ত অগ্রসর হয়।
3
ডাউনলোড URL পান
স্ট্যাটাস ready হলে, রেসপন্সে ব্যবহারের জন্য প্রস্তুত download_url ফিল্ড থাকে।
4
ফাইল ডাউনলোড করুন — GET /api/download.php?job_id=…
চূড়ান্ত MP4/MOV ডাউনলোড করুন। জব সম্পন্ন হওয়ার ২ ঘণ্টা পর ফাইলটি স্বয়ংক্রিয়ভাবে মুছে যায়।

প্রমাণীকরণ

প্রতিটি অনুরোধে আপনার API টোকন থাকতে হবে। দুটি ফরম্যাট গ্রহণযোগ্য:

# প্রমাণীকরণ — প্রতিটি অনুরোধে আপনার API টোকন থাকতে হবে। দুটি ফরম্যাট গ্রহণযোগ্য: Authorization: Bearer rvm_your_token_here # Alternative X-API-Key: rvm_your_token_here

আপনার টোকন আপনার সদস্য এলাকায় পাওয়া যাবে — প্রতি অ্যাকাউন্টে একটি টোকন, নিবন্ধনে স্বয়ংক্রিয়ভাবে তৈরি হয়।

কোটা

প্রতিটি সদস্য অ্যাকাউন্টে প্রতিদিন ২০টি অনুরোধ আছে, ওয়েব ইন্টারফেস এবং API এর মধ্যে ভাগ করা। ব্যর্থ জব কোটা ব্যবহার করে না।

POST রেসপন্সে quota_used এবং quota_remaining অন্তর্ভুক্ত। সীমা অতিক্রম হলে সার্ভার 429 দিয়ে সাড়া দেয়।

ইন্টারফেস + API = একই কাউন্টার। ওয়েব ইন্টারফেস ও API অনুরোধ উভয়ই একই দৈনিক কোটা থেকে ১টি ক্রেডিট নেয়।

কিউ

একসময়ে একটি জব প্রসেস হয়। একাধিক জব একসাথে জমা দিলে সেগুলো কিউতে যায়। অপেক্ষার সময় স্ট্যাটাস রেসপন্সে অন্তর্ভুক্ত:

রেট লিমিট প্রযোজ্য: /api/v1/jobs.php এন্ডপয়েন্ট প্রতি টোকনে প্রতি মিনিটে ১২টি কল গ্রহণ করে। তার বেশি হলে 429 ফেরত আসে।

উপলব্ধ ট্রানজিশন

সরাসরি মার্জের জন্য transition_type=none (ডিফল্ট) পাস করুন, অথবা ক্লিপের মধ্যে ফেডের জন্য নিচের টাইপগুলোর একটি:

none fade fadeblack dissolve wipeleft wiperight slideleft slideright zoomin circleclose

সময়কাল (transition_duration) ০.২ থেকে ২.০ সেকেন্ডের মধ্যে।

এন্ডপয়েন্ট

POST /api/v1/render.php একটি ভিডিও প্রসেসিং জব তৈরি করে

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 ফর্ম ফিল্ড হিসেবে পাঠান।
কঠোর যাচাইকরণ: প্রতিটি মোডের জন্য সঠিক সংখ্যা ও ধরনের ফাইল প্রয়োজন। MIME টাইপ ম্যাজিক বাইটস দ্বারা যাচাই করা হয়। ব্যতিক্রম: options.text + options.voice থাকলে image_to_video শুধু ১টি ছবি নেয় — কণ্ঠ লেখা থেকে তৈরি হয় (MP3 ছাড়া)।
সময়কাল নিয়ম: অডিও এবং 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।
modestring*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 দাবি করে।
orderJSONশুধু fusion মোড — ক্লিপের ক্রম নির্ধারণকারী JSON ইনডেক্স অ্যারে।
transition_typestringশুধু fusion মোড। ডিফল্ট: none।
transition_durationfloatশুধু fusion মোড। সময়কাল ০.২–২.০ সে। ডিফল্ট: 0.5।
optionsJSONimage_to_video, add_text, mix_audio ও overlay_video-এর রেন্ডার প্যারামিটারের JSON অবজেক্ট (নিচের টেবিলগুলো দেখুন)।
timingsFile / stringimage_to_video / add_text: কারাওকে টাইমিং ফাইল (SRT বা LRC, সর্বোচ্চ ২০০ KB) — ফাইল ফিল্ড বা সাধারণ টেক্সট। দেখানো টেক্সট ফাইল থেকে আসে; text_mode=karaoke বাধ্যতামূলক হয়; voice-এর সাথে ব্যবহার করা যায় না।
callback_urlstringপাবলিক URL (http/https) যা জব সম্পন্ন হলে কল হয়। রেসপন্সে webhook_secret থাকে।

options প্যারামিটার — image_to_video মোড

সবই ঐচ্ছিক। না দেওয়া মানগুলোতে ওয়ার্কার ডিফল্ট প্রয়োগ করে।

কীধরনডিফল্টবিবরণ
textstring""ওভারলে হিসেবে দেখানো টেক্সট। খালি = কোনো টেক্সট নেই। সর্বোচ্চ ৫০০ অক্ষর।
fontstring"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_sizeint60পিক্সেলে ফন্ট সাইজ। পরিসীমা: ১০–৩০০।
text_colorstring"white"টেক্সটের রঙ (যেমন white, yellow, #ffffff)।
text_positionstring"center"টেক্সটের অবস্থান: center, top, bottom।
boxbooltrueটেক্সটের পেছনে আধা-স্বচ্ছ পটভূমি।
box_colorstring"black@0.4"FFmpeg ফরম্যাটে রঙ + অস্বচ্ছতা: color@opacity।
fade_durationfloat0.5সেকেন্ডে ফেড ইন/আউট সময়কাল (০–২)। ০ = কোনো ফেড নেই।
widthint1080পিক্সেলে ভিডিওর প্রস্থ (৬৪–৩৮৪০, জোড় সংখ্যা)।
heightint1920পিক্সেলে ভিডিওর উচ্চতা (৬৪–৩৮৪০, জোড় সংখ্যা)।
fpsint24ফ্রেম রেট (১–৬০)।
image_fitstring"contain"contain: পুরো ছবি বা ভিডিও দেখান এবং ফাঁকা জায়গা নির্বাচিত পটভূমি দিয়ে পূরণ করুন। solid (ডিফল্ট) অথবা blur। ঝাপসার জন্য image_fit=contain প্রয়োজন। লেখা পরিষ্কার থাকে। cover: ছবি ফ্রেম পূর্ণ করতে জুম হয়, কেন্দ্রীভূত — প্রান্ত কাটা যায়।
bg_colorstring"black"background_mode=solid: পটভূমির রঙ যদি ছবি লক্ষ্য রেজোলিউশন না পূরণ করে — শুধু image_fit=contain এর সাথে প্রাসঙ্গিক।
background_modestring"solid"solid (ডিফল্ট) অথবা blur। ঝাপসার জন্য image_fit=contain প্রয়োজন। লেখা পরিষ্কার থাকে।
blur_strengthnumber20১ থেকে ৫০ পর্যন্ত সংখ্যা; ডিফল্ট ২০। শুধু পটভূমিতে গাউসিয়ান ঝাপসা প্রয়োগ করা হয়।
enable_image_motionboolfalseফটো অ্যানিমেশন সক্রিয় করে। false হলে ছবি স্থির থাকে।
image_motion_effectstring"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_intensityfloat1.0ফটো অ্যানিমেশনের তীব্রতা (০.২৫–২.০)।
text_effectstring"none"টেক্সট ওভারলে অ্যানিমেশন। গৃহীত মান: none, fade_in, slide_up, slide_down, slide_left, bounce।
text_effect_intensityfloat1.0টেক্সট অ্যানিমেশনের তীব্রতা (০.২৫–২.০)।
text_border_widthint0অক্ষরের চারপাশে কালো আউটলাইনের পুরুত্ব পিক্সেলে (০ = নিষ্ক্রিয়, ১–১০)।
text_border_colorstring"black"অক্ষরের আউটলাইনের রং (text_color-এর মতো একই ফরম্যাট, ডিফল্ট "black")। text_border_width > 0 হলে ব্যবহৃত হয়।
text_modestring"static"টেক্সট প্রকাশের মোড। static (ডিফল্ট): প্রথম ফ্রেম থেকে সম্পূর্ণ টেক্সট দৃশ্যমান। word_by_word: word_reveal_speed-এর হারে একটি একটি করে শব্দ দেখা যায়। text_effect-এর সাথে একসাথে ব্যবহার করা যায় না: text_mode=word_by_word হলে text_effect উপেক্ষিত হয়। "karaoke": অডিওর ছন্দে টেক্সটের রং বদলায়, পাতায় পাতায় (১,০০০ অক্ষর পর্যন্ত)। voice থাকলে শব্দে শব্দে সিঙ্ক, না হলে শব্দের দৈর্ঘ্য অনুযায়ী অডিওতে ভাগ করা হয়।
word_reveal_speedfloat1.5প্রতি সেকেন্ডে শব্দ প্রকাশের গতি (0.3–5.0, ডিফল্ট 1.5)। শুধুমাত্র text_mode=word_by_word-এর সাথে। OpenAI TTS সিঙ্কের জন্য প্রস্তাবিত মান: 2.0।
word_animstring"none"প্রতিটি শব্দের আবির্ভাব অ্যানিমেশন। none (ডিফল্ট): তাৎক্ষণিক প্রকাশ। fade: প্রতিটি নতুন শব্দ 0.2s ফেডে প্রকাশ পায়। শুধুমাত্র text_mode=word_by_word এর সাথে।
karaoke_stylestring"fill"কারাওকে স্টাইল: fill (উচ্চারিত শব্দ হাইলাইট রং পায়), sweep (প্রতিটি শব্দ ধীরে ধীরে পূরণ হয়; ডান থেকে বাঁয়ে লেখা লিপিতে পুরো শব্দ) বা highlight (শুধু বর্তমান শব্দ রঙিন)।
highlight_colorstring"#FFD200"কারাওকে মোডে উচ্চারিত শব্দ / বর্তমান শব্দের রং (text_color-এর মতো একই ফরম্যাট)।
karaoke_linesint2কারাওকে মোডে প্রতি পাতায় দেখানো লাইন (১–৪)।
voicestring""কণ্ঠ ID (text_to_mp3-এর একই তালিকা, যেমন bn-IN-TanishaaNeural): একই জবে text থেকে কণ্ঠ তৈরি হয়। তখন image_to_video-এর শুধু ছবি দরকার (সাথে পাঠানো MP3 প্রত্যাখ্যাত হয়)। কারাওকে মোডে প্রতিটি শব্দ কণ্ঠের সাথে সিঙ্ক হয়।
voice_rateint0তৈরি করা কণ্ঠের গতি, % এ (−৫০ থেকে +৫০)।

নিজের টাইমিং দিয়ে কারাওকে (SRT / LRC)

timings ফিল্ডে একটি SRT বা LRC ফাইল পাঠান: প্রতিটি লাইন নিজের সময়ে দেখা দেয় এবং কারাওকের একটি পাতা হয় (সর্বোচ্চ ৫০০ লাইন, ৫,০০০ অক্ষর)। SRT: লাইন তার শেষ সময়ে মিলিয়ে যায়। LRC: লাইন পরেরটি পর্যন্ত থাকে (ফাঁকা লাইন তা থামায়); [offset:] এবং enhanced LRC-এর শব্দভিত্তিক সময় <mm:ss.xx> সমর্থিত — না হলে প্রতিটি লাইন তার সময়কালে ভাগ হয়। add_text-এ সময় ভিডিওর শুরু থেকে গোনা হয়, text_start পরিমাণ সরিয়ে।

# lyrics.srt 1 00:00:01,000 --> 00:00:03,500 First line of the song 2 00:00:04,000 --> 00:00:07,200 Second line, on its own page # lyrics.lrc — enhanced LRC: optional per-word times <mm:ss.xx> [00:01.00]<00:01.00>First <00:01.60>line <00:02.10>here [00:04.00]Second line [00:07.50]

options প্যারামিটার — overlay_video মোড

সবই ঐচ্ছিক। আপলোডের ক্রম গুরুত্বপূর্ণ: প্রথম ফাইল মূল ভিডিও (পটভূমি), দ্বিতীয় ফাইল ওপরে বসানোর ভিডিও। সবুজ পর্দা সরাতে chroma_key ব্যবহার করুন।

কীধরনডিফল্টবিবরণ
positionstring"bottom-right"ভিডিও বসানোর কোণ: top-left, top-right, bottom-left, bottom-right বা center।
scalefloat0.30মূল ভিডিওর প্রস্থের অনুপাতে ওপরের ভিডিওর আকার। 0.25 = প্রস্থের 25%। সীমা: 0.05–1.0।
opacityfloat1.0ওপরের ভিডিওর অস্বচ্ছতা। 1.0 = সম্পূর্ণ অস্বচ্ছ, 0.0 = অদৃশ্য।
marginint10ওপরের ভিডিও ও ফ্রেমের কিনারার দূরত্ব, পিক্সেলে। position=center হলে উপেক্ষিত। সীমা: 0–200।
audiostring"main"কোন অডিও থাকবে: main শুধু মূল ভিডিও, overlay শুধু ওপরের ভিডিও, mix সমান ভলিউমে দুটির অডিও মিক্স করে।
chroma_keyboolfalseওপরের ভিডিওর বিশুদ্ধ সবুজ (#00FF00) পটভূমি সরাতে true দিন — সবুজ পর্দায় ধারণ করা ওয়েবক্যাম ভিডিও বা অ্যানিমেশনে উপযোগী।
chroma_similarityfloat0.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}
কীধরনডিফল্টবিবরণ
textstringহ্যাঁবসানোর টেক্সট। আবশ্যক, ১–২০০ অক্ষর।
text_startfloat0যে সেকেন্ডে টেক্সট দেখা যায় (≥ 0)। ভিডিও শেষ হওয়ার আগে হতে হবে।
text_durationfloat0টেক্সট কতক্ষণ দৃশ্যমান থাকবে, সেকেন্ডে (0.1–3600)। 0 = ভিডিওর শেষ পর্যন্ত।
fontstring"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_sizeint60ফন্টের আকার, যে ভিডিওর ছোট বাহু ১০৮০ px তার জন্য নির্ধারিত এবং প্রকৃত রেজোলিউশন অনুযায়ী স্বয়ংক্রিয়ভাবে স্কেল হয় — একই মান 720p ও 4K-তে একই দেখায়। পরিসর: 10–300।
fade_durationfloat0.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_volumefloat0.3voice সহ: কণ্ঠের নিচে ভিডিওর মূল শব্দের ভলিউম (০–২, ডিফল্ট 0.3; ০ = প্রতিস্থাপিত)। কণ্ঠ text_start-এ শুরু হয়; শেষ না হওয়া পর্যন্ত টেক্সট দেখা যায়, আর ভিডিওর শেষ পেরিয়ে গেলে শেষ ফ্রেমটি ধরে রাখা হয়।
background_modestring"solid"solid (ডিফল্ট) অথবা blur। ঝাপসার জন্য image_fit=contain প্রয়োজন। লেখা পরিষ্কার থাকে।
blur_strengthnumber20১ থেকে ৫০ পর্যন্ত সংখ্যা; ডিফল্ট ২০। শুধু পটভূমিতে গাউসিয়ান ঝাপসা প্রয়োগ করা হয়।
output_formatstring"original"শুধু add_text: original (ডিফল্ট), portrait (1080×1920), square (1080×1080), landscape (1920×1080)। ঝাপসার জন্য original ছাড়া অন্য বিন্যাস প্রয়োজন।
image_fitstring"contain"contain: পুরো ছবি বা ভিডিও দেখান এবং ফাঁকা জায়গা নির্বাচিত পটভূমি দিয়ে পূরণ করুন। solid (ডিফল্ট) অথবা blur। ঝাপসার জন্য image_fit=contain প্রয়োজন। লেখা পরিষ্কার থাকে। cover: ছবি ফ্রেম পূর্ণ করতে জুম হয়, কেন্দ্রীভূত — প্রান্ত কাটা যায়।
bg_colorstring"black"background_mode=solid: পটভূমির রঙ যদি ছবি লক্ষ্য রেজোলিউশন না পূরণ করে — শুধু image_fit=contain এর সাথে প্রাসঙ্গিক।

options প্যারামিটার — অডিও সম্পাদনা (mix_audio)

শুধু mode=mix_audio এর সাথে উপলব্ধ।

কীধরনডিফল্টবিবরণ
mp3_volumefloat1.0ওভারলেড MP3 এর ভলিউম (০.০ = নিঃশব্দ, ১.০ = মূল ভলিউম, ২.০ = দ্বিগুণ)।

text_to_mp3 মোড — সরাসরি প্যারামিটার (options JSON নেই)

অন্যান্য মোডের বিপরীতে, এই ফিল্ডগুলি সরাসরি ফর্ম ফিল্ড হিসেবে পাঠানো হয়, options JSON অবজেক্টের ভিতরে নয়। শুধুমাত্র text আবশ্যক।

কীধরনডিফল্টবিবরণ
textstring—কথায় রূপান্তরের জন্য টেক্সট। আবশ্যক। সর্বোচ্চ ৫,০০০ অক্ষর।
langstring"en"voice বাদ দেওয়া হলে বা অবৈধ হলে ডিফল্ট ভয়েস নির্বাচনের জন্য ব্যবহৃত ভাষা কোড। সাইটের ২০টি ভাষার একটি (নিচের টেবিল দেখুন)। অজানা হলে en-এ ফিরে যায়।
voicestringস্বয়ংক্রিয়edge-tts ভয়েস ID (নিচের টেবিল দেখুন)। বাদ দেওয়া হলে বা অবৈধ হলে, lang-এর প্রথম ভয়েসটি স্বয়ংক্রিয়ভাবে ব্যবহৃত হয়।
slowboolfalseকথা বলার গতি ২৫% কমাতে 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)

{ "success": true, "job_id": "a3f1c8d2e5b09471...", "mode": "fusion", // "fusion" | "add_audio" | "mix_audio" | "image_to_video" | "overlay_video" | "add_text" | "text_to_mp3" "file_count": 2, "transition": null, "quota_used": 1, "quota_remaining": 9, "status_url": "https://rapidvideomaker.com/api/v1/jobs.php?job_id=a3f1c8..." }
text_to_mp3-এর জন্য, রেসপন্সে file_count বা transition ফিল্ড থাকে না (কোনো ফাইল আপলোড হয়নি) — বাকিটা অভিন্ন: job_id, quota_used, quota_remaining, status_url, webhook_secret।

curl উদাহরণ — image_to_video মোড

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@scene.jpg" \ -F "videos[]=@narration.mp3" \ -F "mode=image_to_video" \ -F 'options={"text":"Chapter 1","font_size":72,"text_color":"white","text_position":"bottom","box":true,"box_color":"black@0.4","fade_duration":0.5,"width":1080,"height":1920,"image_fit":"contain","bg_color":"black","enable_image_motion":true,"image_motion_effect":"ken_burns","motion_intensity":1.0,"text_effect":"slide_up","text_effect_intensity":1.0}' # image_fit : "contain" | "cover" # background_mode : "solid" | "blur" (blur requires contain) # blur_strength : 1–50, default 20 # bg_color : ignored if image_fit="cover" # enable_image_motion : true = animation on, false (default) = static image # image_motion_effect : 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 : 0.25–2.0 — photo animation amplitude (default 1.0) # text_effect : none | fade_in | slide_up | slide_down | slide_left | bounce (ignored if text_mode=word_by_word) # text_effect_intensity : 0.25–2.0 — text animation intensity (default 1.0) # text_border_width : 0–10 px — outline around characters (0 = disabled) # text_border_color : outline color, default "black" (e.g. "#FF3366", "white@0.8") # text_mode : "static" (default) | "word_by_word" — reveal words one by one # word_reveal_speed : 0.3–5.0 w/s — speed for word_by_word mode (default 1.5, ~2.0 for OpenAI TTS) # word_anim : "none" (default) | "fade" — fade-in crossfade on each word (word_by_word only)

তৈরি করা কণ্ঠসহ কারাওকে টেক্সট (image_to_video, MP3 ছাড়া)

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@scene.jpg" \ -F "mode=image_to_video" \ -F 'options={"text":"Every word lights up as the voice reads it.","voice":"en-US-AvaNeural","text_mode":"karaoke","karaoke_style":"sweep","highlight_color":"#FFD200","karaoke_lines":2,"text_position":"bottom","font_size":72}' # no MP3: the voice is generated from "text" and gives the timing of every word # text_mode="karaoke" : text up to 1000 characters, shown page by page (karaoke_lines: 1–4) # karaoke_style : "fill" (default) | "sweep" | "highlight" # voice_rate : -50…+50 (%), default 0 # with your own MP3 (no "voice"): karaoke timing is spread over the audio by word length # add_text: same options + "original_volume" (0–2, default 0.3) = original sound under the voice

SRT ফাইল দিয়ে কারাওকে (image_to_video + আপনার MP3)

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@cover.jpg" \ -F "videos[]=@song.mp3" \ -F "timings=@lyrics.srt" \ -F "mode=image_to_video" \ -F 'options={"karaoke_style":"sweep","karaoke_lines":2,"text_position":"bottom","font_size":72}' # timings : SRT or LRC file (200 KB max), or its content as a plain text field: -F "timings=<lyrics.lrc" # the displayed text comes from the file ("text" is ignored), text_mode is forced to "karaoke" # not compatible with "voice" (the timings follow your own audio) # add_text: times are relative to the video start, shifted by "text_start"

curl উদাহরণ — অডিও সম্পাদনা

# Replace audio (deletes original) curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@my_video.mp4" \ -F "videos[]=@my_music.mp3" \ -F "mode=add_audio" # Keep original audio + overlay MP3 curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@my_video.mp4" \ -F "videos[]=@my_music.mp3" \ -F "mode=mix_audio" \ -F 'options={"mp3_volume":0.7}' # mp3_volume : 0.0 (muted) → 1.0 (original volume, default) → 2.0 (amplified)

curl উদাহরণ — overlay_video মোড

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@main_video.mp4" \ -F "videos[]=@overlay_video.mp4" \ -F "mode=overlay_video" \ -F 'options={"position":"bottom-right","scale":0.25,"opacity":1.0,"margin":20,"audio":"main"}' # Green screen overlay curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@main_video.mp4" \ -F "videos[]=@webcam_greenscreen.mp4" \ -F "mode=overlay_video" \ -F 'options={"position":"bottom-left","scale":0.35,"chroma_key":true,"chroma_similarity":0.15,"audio":"mix"}' # position : top-left | top-right | bottom-left | bottom-right | center (default: bottom-right) # scale : 0.05–1.0 — overlay width as fraction of main video (default 0.30) # opacity : 0.0–1.0 — overlay transparency (default 1.0) # margin : 0–200 px — gap from frame edge, ignored if center (default 10) # audio : main | overlay | mix — audio to keep (default: main) # chroma_key : true | false — remove green (#00FF00) background from overlay (default false) # chroma_similarity : 0.01–0.60 — green screen tolerance (default 0.20)

curl উদাহরণ — add_text মোড

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@my_video.mp4" \ -F "mode=add_text" \ -F 'options={"text":"Hello world","text_position":"bottom","font_size":72,"text_color":"#ffd700","text_start":2,"text_duration":5,"text_effect":"slide_up"}' # text : required, 1–200 characters # text_start : second at which the text appears (default 0) # text_duration : seconds the text stays visible, 0 = until the end (default 0) # the video keeps its resolution, frame rate and audio track

curl উদাহরণ — ভিডিও মার্জ

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@clip1.mp4" \ -F "videos[]=@clip2.mp4" \ -F "transition_type=fade" \ -F "transition_duration=0.5"

curl উদাহরণ — text_to_mp3 মোড

# No file upload — text + lang + voice as plain form fields curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "mode=text_to_mp3" \ -F "text=Welcome to Rapid Video Maker." \ -F "lang=en" \ -F "voice=en-US-AvaNeural" \ -F "slow=false" # voice omitted or invalid -> falls back to the first voice of "lang" curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "mode=text_to_mp3" \ -F "text=Bienvenue sur Rapid Video Maker." \ -F "lang=fr"
GET /api/v1/jobs.php?job_id=<hex32> জব স্ট্যাটাস

স্ট্যাটাসে প্রকৃত ধাপ ও অতিবাহিত সময় থাকে। অনুমান আনুমানিক; ক্লায়েন্টের সময়সীমা শেষ হওয়া মানে কাজ ব্যর্থ নয়। একই কাজের 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

স্ট্যাটাস অনুযায়ী রেসপন্স

{ "job_id": "a3f1c8...", "status": "queued", "queue_position": 2, "queue_total": 3, "eta_minutes": 7 }
{ "job_id": "a3f1c8...", "status": "ready", "download_url": "https://rapidvideomaker.com/api/download.php?job_id=a3f1c8...", "created_at": "2026-06-02T10:00:00+00:00", "expires_at": "2026-06-02T12:00:00+00:00" }

curl উদাহরণ

curl -H "Authorization: Bearer rvm_your_token" \ "https://rapidvideomaker.com/api/v1/jobs.php?job_id=a3f1c8..."
GET /api/v1/jobs.php এই টোকেন দিয়ে তৈরি সব জবের তালিকা (পাতাভিত্তিক, তারিখ অনুযায়ী নতুন থেকে পুরোনো)

সাধারণ প্যারামিটার (multipart/form-data)

প্যারামিটারধরনডিফল্টবিবরণ
pageinteger1পাতা নম্বর (১ থেকে শুরু)
limitinteger20প্রতি পাতায় ফলাফল (সর্বোচ্চ ৫০, ডিফল্ট ২০)

স্ট্যাটাস অনুযায়ী রেসপন্স

{ "success": true, "jobs": [ { "job_id": "a3f1c8...", "status": "ready", "mode": "fusion", "created_at": "2026-06-02T10:00:00+00:00", "expires_at": "2026-06-02T12:00:00+00:00", "download_url": "https://..." }, ... ], "total": 12, "page": 1, "limit": 20 }
GET /api/download.php?job_id=<hex32> চূড়ান্ত ফাইল ডাউনলোড করুন

চূড়ান্ত ফাইল স্ট্রিম করে। Content-Type ভিডিও মোডের জন্য video/mp4, বা text_to_mp3-এর জন্য audio/mpeg। টোকন প্রয়োজন নেই। শুধু তখনই উপলব্ধ যখন স্ট্যাটাস ready।

ফাইলটি জব সম্পন্ন হওয়ার ২ ঘণ্টা পর রাখা হয়, তারপর মুছে যায়।

ঐচ্ছিক প্যারামিটার

প্যারামিটারবিবরণ
filenameডাউনলোড করা ফাইলের প্রস্তাবিত নাম (যেমন amar-video.mp4)
previewডাউনলোড শুরু করার পরিবর্তে ইনলাইন প্লেব্যাকের জন্য (Content-Disposition: attachment বাদ দেয়) 1 সেট করুন — ব্রাউজারে প্রিভিউয়ের জন্য ব্যবহৃত।

curl উদাহরণ

curl -o "output.mp4" \ "https://rapidvideomaker.com/api/download.php?job_id=a3f1c8...&filename=output.mp4"

ওয়েবহুক

ওয়েবহুক পোলিংয়ের বিকল্প: প্রতি X সেকেন্ডে স্ট্যাটাস চেক করার পরিবর্তে, আপনি একটি URL দেন এবং সার্ভার জব সম্পন্ন হলে স্বয়ংক্রিয়ভাবে আপনাকে কল করে।

এটি কীভাবে কাজ করে

  1. /api/v1/render.php এ POST এ callback_url পাস করুন
  2. রেসপন্সে webhook_secret থাকে — সিগনেচার যাচাই করতে এটি রাখুন
  3. জব ready বা error এ পৌঁছালে সার্ভার আপনার URL এ স্বাক্ষরিত JSON POST পাঠায়
  4. HMAC-SHA256(webhook_secret, raw_body) দিয়ে সিগনেচার যাচাই করুন
সীমাবদ্ধতা: callback_url অবশ্যই একটি সার্বজনীনভাবে অ্যাক্সেসযোগ্য URL হতে হবে। ব্যক্তিগত এবং লুপব্যাক IP ঠিকানা ব্লক করা।

প্রাপ্ত পেলোড

{ "job_id": "a3f1c8...", "status": "ready", "download_url": "https://rapidvideomaker.com /api/download.php?job_id=a3f1c8...", "timestamp": "2026-04-04T12:00:00+00:00" }
{ "job_id": "a3f1c8...", "status": "error", "error": "FFmpeg xfade failed:...", "timestamp": "2026-04-04T12:00:00+00:00" }

সার্ভারের পাঠানো হেডার

হেডারমান
Content-Typeapplication/json
X-RVM-Signaturesha256=<hmac_hex> — raw body এর HMAC-SHA256 সিগনেচার
X-RVM-Job-Idসংশ্লিষ্ট job_id

সিগনেচার যাচাইকরণ

# Python import hmac, hashlib def verify_webhook(secret: str, body: bytes, signature_header: str) -> bool: expected = "sha256=" + hmac.new( secret.encode(), body, hashlib.sha256 ).hexdigest() return hmac.compare_digest(expected, signature_header) # Flask/FastAPI endpoint: sig = request.headers.get("X-RVM-Signature", "") if not verify_webhook(WEBHOOK_SECRET, request.data, sig): return "Invalid signature", 403 data = request.get_json()

ত্রুটি কোড

HTTPJSON কোডকারণ
401unauthorizedটোকন অনুপস্থিত, অবৈধ বা বাতিল
400missing_filesকোনো ফাইল পাওয়া যায়নি
400too_few_files২টির কম ফাইল পাঠানো হয়েছে
400too_many_files২০টির বেশি ফাইল পাঠানো হয়েছে
400invalid_mimeঅসমর্থিত ফাইল — শুধু MP4, MP3 এবং JPG/PNG ছবি গ্রহণযোগ্য
400wrong_file_countফাইলের সংখ্যা নির্বাচিত মোডের সাথে মেলে না
400wrong_file_typesফাইলের ধরন নির্বাচিত মোডের সাথে মেলে না
400invalid_file_combinationমোড ছাড়া ফাইল সমন্বয় কোনো সমর্থিত মোডের সাথে মেলে না
400invalid_optionsoptions ফিল্ড বৈধ JSON নয়
400invalid_optionoptions এ একটি মান অবৈধ
400file_too_largeএকটি ফাইল ৫০০ MB ছাড়িয়েছে
400text_requiredoptions.text ফিল্ড নেই বা খালি (add_text মোড)
400video_too_longভিডিও ১৫ মিনিটের চেয়ে দীর্ঘ (add_text মোড)
400text_start_out_of_rangetext_start ভিডিওর শেষ ছাড়িয়ে গেছে
400invalid_voiceঅজানা voice ID।
400invalid_timingsঅপাঠযোগ্য টাইমিং ফাইল (ফরম্যাট চেনা যায়নি, সময়সহ কোনো লাইন নেই, শুরুর আগে শেষ, খুব দীর্ঘ…)।
400invalid_orderorder অ্যারে বৈধ পারমুটেশন নয়
400invalid_job_idভুল job_id ফরম্যাট (৩২-অক্ষরের হেক্স হতে হবে)
404job_not_foundজব পাওয়া যায়নি — job_id অজানা বা কখনো ছিল না
410job_expiredজব মেয়াদোত্তীর্ণ — ছিল কিন্তু ২ ঘণ্টার রিকভারি উইন্ডো পার হয়েছে
429quota_exceededপ্রতিদিন ২০টি সফল জব পৌঁছেছে
429rate_limited/api/v1/jobs.php এ প্রতি মিনিটে ১২টির বেশি কল — Retry-After সেকেন্ড অপেক্ষা করুন
500server_errorঅভ্যন্তরীণ সার্ভার ত্রুটি

ইন্টিগ্রেশন উদাহরণ

প্রতিটি মোডের জন্য উদাহরণ — pip install requests দিয়ে requests ইনস্টল করুন।

সাধারণ কনফিগারেশন

import requests, time, sys, json API_BASE = "https://rapidvideomaker.com" API_TOKEN = "rvm_your_token_here" HEADERS = {"Authorization": f"Bearer {API_TOKEN}"}

image_to_video মোড — ছবি + অডিও → ভিডিও

with open("scene.jpg", "rb") as fi, open("narration.mp3", "rb") as fa: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("scene.jpg", fi, "image/jpeg")), ("videos[]", ("narration.mp3", fa, "audio/mpeg")), ], data={ "mode": "image_to_video", "options": json.dumps({ "text": "Chapter 1", "font_size": 72, "text_color": "white", "text_position": "bottom", "box": True, "box_color": "black@0.4", "fade_duration": 0.5, "width": 1080, "height": 1920, "image_fit": "contain", # "contain" | "cover" "background_mode": "solid", # or "blur" with contain "blur_strength": 20, "bg_color": "black", # ignored if image_fit="cover" "enable_image_motion": True, "image_motion_effect": "ken_burns", "motion_intensity": 1.0, # 0.25–2.0 — photo animation amplitude "text_effect": "slide_up", # none | fade_in | slide_up | slide_down | slide_left | bounce (ignored if text_mode=word_by_word) "text_effect_intensity": 1.0, # 0.25–2.0 — text animation intensity # word-by-word reveal (mutually exclusive with text_effect): # "text_mode": "word_by_word", "word_reveal_speed": 2.0, "word_anim": "fade" }), }, )

অডিও সম্পাদনা

# Replace audio (deletes original) — mode=add_audio with open("video.mp4", "rb") as fv, open("music.mp3", "rb") as fa: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("video.mp4", fv, "video/mp4")), ("videos[]", ("music.mp3", fa, "audio/mpeg")), ], data={"mode": "add_audio"}, ) # Keep original audio + overlay MP3 — mode=mix_audio with open("video.mp4", "rb") as fv, open("music.mp3", "rb") as fa: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("video.mp4", fv, "video/mp4")), ("videos[]", ("music.mp3", fa, "audio/mpeg")), ], data={"mode": "mix_audio", "options": json.dumps({"mp3_volume": 0.7})}, # mp3_volume : 0.0 = muted, 1.0 = original volume (default), 2.0 = amplified )

overlay_video মোড — ছবির মধ্যে ছবি

with open("main.mp4", "rb") as fm, open("overlay.mp4", "rb") as fo: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("main.mp4", fm, "video/mp4")), ("videos[]", ("overlay.mp4", fo, "video/mp4")), ], data={ "mode": "overlay_video", "options": json.dumps({ "position": "bottom-right", # top-left | top-right | bottom-left | bottom-right | center "scale": 0.25, # 0.05–1.0 — overlay width fraction "opacity": 1.0, # 0.0–1.0 — transparency "margin": 20, # 0–200 px — gap from frame edge "audio": "main", # main | overlay | mix # green screen: "chroma_key": True, "chroma_similarity": 0.15 }), }, )

add_text মোড — ভিডিওতে টেক্সট

with open("video.mp4", "rb") as fv: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[("videos[]", ("video.mp4", fv, "video/mp4"))], data={ "mode": "add_text", "options": json.dumps({ "text": "Hello world", # required "text_position": "bottom", # center | top | bottom "font": "amiri", # font id (see the table above) "font_size": 72, "text_start": 2, # appears at 2 s "text_duration": 5, # stays 5 s (0 = until the end) }), }, )

ভিডিও মার্জ

with open("clip1.mp4", "rb") as f1, open("clip2.mp4", "rb") as f2: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("clip1.mp4", f1, "video/mp4")), ("videos[]", ("clip2.mp4", f2, "video/mp4")), ], data={"transition_type": "fade", "transition_duration": "0.5"}, )

text_to_mp3 মোড — টেক্সট থেকে ভয়েস

# No files — text + lang (+ optional voice / slow) as form fields resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, data={ "mode": "text_to_mp3", "text": "Welcome to Rapid Video Maker.", "lang": "en", # one of the 20 site language codes "voice": "en-US-AvaNeural", # optional — falls back to the first voice of "lang" "slow": "false", # "true" = -25% speech rate }, )

পোলিং + ডাউনলোড (সব মোডের জন্য সাধারণ)

resp.raise_for_status() job_id = resp.json()["job_id"] print(f"Job created: {job_id}") for _ in range(120): # timeout 10 min (120 × 5s) r = requests.get( f"{API_BASE}/api/v1/jobs.php", headers=HEADERS, params={"job_id": job_id}, ) data = r.json() status = data["status"] if status == "queued": pos = data.get("queue_position", "?") eta = data.get("eta_minutes", "?") print(f"Queued — position {pos}, ETA ~{eta} min") elif status == "processing": print("Processing…") elif status == "ready": download_url = data["download_url"] break elif status == "error": sys.exit(f"Error: {data.get('error')}") time.sleep(5) else: sys.exit("Timeout: job not completed after 10 min") r = requests.get(download_url, stream=True) with open("output.mp4", "wb") as f: for chunk in r.iter_content(65536): f.write(chunk) print("Downloaded: output.mp4")

n8n এ দুটি পদ্ধতি: পোলিং (স্ট্যাটাস লুপ) বা ওয়েবহুক (সার্ভার n8n কে কল করে)। ওয়েবহুক সুপারিশ করা হয়।

পদ্ধতি A — ওয়েবহুক (সুপারিশকৃত)

মাত্র ৩টি নোড, কোনো লুপ নেই।

নোড ১ — ওয়েবহুক ট্রিগার
ওয়ার্কফ্লো ইনপুট হিসেবে একটি Webhook নোড যোগ করুন (মেথড POST)।

নোড ২ — জব তৈরি করুন (HTTP Request)

মেথডPOST
URLhttps://rapidvideomaker.com/api/v1/render.php
প্রমাণীকরণHeader Auth — Authorization: Bearer rvm_…
Body Content TypeForm-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)

URLhttps://rapidvideomaker.com/api/v1/jobs.php
Query প্যারামিটারjob_id = {{ $('নোড ১').item.json.job_id }}
প্রমাণীকরণHeader Auth — একই টোকন

নোড ৪ — If: {{ $json.status }} === 'ready' → true: নোড ৫ / false: নোড ২ এ ফিরুন।

অসীম লুপ এড়াতে ৬০টি প্রচেষ্টার পর লুপ ভাঙতে Set নোডে একটি ইটারেশন কাউন্টার যোগ করুন।

নোড ৫ — ডাউনলোড: {{ $json.download_url }} এ HTTP Request GET, Response Format File।

ধাপ ১ — জব তৈরি করুন (একটি মোড বেছে নিন)

# fusion JOB=$(curl -s -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@clip1.mp4" -F "videos[]=@clip2.mp4") # add_audio (replace audio) JOB=$(curl -s -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@video.mp4" -F "videos[]=@music.mp3" \ -F "mode=add_audio") # mix_audio (overlay music at 70% volume) JOB=$(curl -s -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@video.mp4" -F "videos[]=@music.mp3" \ -F "mode=mix_audio" -F 'options={"mp3_volume":0.7}') # image_to_video JOB=$(curl -s -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@scene.jpg" -F "videos[]=@narration.mp3" \ -F "mode=image_to_video" \ -F 'options={"text":"Chapter 1","font_size":72,"text_position":"bottom","fade_duration":0.5,"width":1080,"height":1920}') JOB_ID=$(echo $JOB | grep -o '"job_id":"[^"]*"' | cut -d'"' -f4) echo "Job ID: $JOB_ID"

ধাপ ২ — পোলিং

while true; do STATUS=$(curl -s \ -H "Authorization: Bearer rvm_your_token" \ "https://rapidvideomaker.com/api/v1/jobs.php?job_id=$JOB_ID") STATE=$(echo $STATUS | grep -o '"status":"[^"]*"' | cut -d'"' -f4) echo "Status: $STATE" [ "$STATE" = "ready" ] && break [ "$STATE" = "error" ] && { echo "Error"; exit 1; } sleep 10 done

ধাপ ৩ — ডাউনলোড

DOWNLOAD_URL=$(echo $STATUS | grep -o '"download_url":"[^"]*"' | cut -d'"' -f4) curl -o output.mp4 "$DOWNLOAD_URL"

সেরা অনুশীলন

ফলাফল ফাইলগুলো জব সম্পন্ন হওয়ার ২ ঘণ্টা পর স্বয়ংক্রিয়ভাবে মুছে যায়। স্ট্যাটাস ready হওয়ার সাথে সাথে ভিডিও ডাউনলোড করুন।