API RapidVideoMaker
تتيح REST API معالجة ملفات الفيديو من أي عميل HTTP — سكريبتات Python، سير عمل n8n، أدوات الطرف الثالث. خمسة أوضاع متاحة: دمج الفيديوهات (عدة MP4/MOV)، تحرير الصوت (MP4/MOV + MP3)، إنشاء فيديو (JPG/PNG + MP3)، تراكب الفيديو (2 MP4/MOV صورة داخل صورة). المعالجة غير متزامنة: أرسل الملفات ثم استعلم عن النتيجة.
سير العمل الكامل
كل تكامل يتبع نفس التسلسل المكون من 4 خطوات:
POST /api/v1/render.phpmultipart/form-data مع رمز Bearer. صورة 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 الخاص بك. يُقبل نوعان من الصيغ:
رمزك متاح في منطقة الأعضاء — رمز واحد لكل حساب، يُنشأ تلقائياً عند التسجيل.
الحصة
لكل حساب عضو 20 طلباً يومياً مشتركة بين واجهة الويب وAPI. المهام الفاشلة لا تستهلك الحصة. يُعاد ضبط العداد عند منتصف الليل UTC.
تتضمن ردود POST حقلَي quota_used وquota_remaining. عند تجاوز الحد، يرد الخادم بـ 429.
قائمة الانتظار
تُعالج مهمة واحدة في كل مرة. إذا أُرسلت عدة مهام في آنٍ واحد، تُضاف إلى قائمة انتظار وتُعالج بالترتيب. أثناء الانتظار، يتضمن رد الحالة:
queue_position— موقع المهمة في قائمة الانتظار (1 = التالية للمعالجة)queue_total— إجمالي المهام المنتظرةeta_minutes— الوقت التقديري قبل بدء المعالجة
/api/v1/jobs.php حداً أقصى 12 طلباً في الدقيقة لكل رمز. التوصية: 10 ثوانٍ بين كل طلب. الانتقالات المتاحة
مرر transition_type=none (الافتراضي) للدمج المباشر، أو أحد الأنواع التالية للتلاشي بين المقاطع:
المدة (transition_duration) بين 0.2 و2.0 ثانية.
نقاط النهاية
خمسة أوضاع، يمكن الوصول إليها عبر حقل mode (احذف mode مع عدة MP4 لاكتشاف fusion تلقائياً):
| الاستخدام | نمط API | الملفات المطلوبة | الوصف |
|---|---|---|---|
| دمج مقاطع الفيديو | fusion |
2-20 ملف MP4/MOV | تُجمَّع المقاطع من البداية إلى النهاية بالترتيب المقدم. انتقالات اختيارية بين المقاطع. |
| تحرير الصوت | add_audio أو mix_audio |
ملف MP4/MOV + ملف MP3 | يستبدل أو يُثري المسار الصوتي للفيديو. لا يُعاد ترميز مسار الفيديو أبداً.add_audio — يُحذف الصوت الأصلي ويُستبدل كلياً بملف MP3.mix_audio — يُحتفظ بالصوت الأصلي ويُضاف MP3 فوقه. |
| إنشاء فيديو | 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 كحقول نموذج. يدعم جميع لغات الموقع العشرين. |
add_audio وmix_audio يقبلان ملف MP4/MOV واحد + ملف MP3 واحد فقط. image_to_video يقبل صورة JPG/PNG واحدة + ملف MP3 واحد فقط. استثناء: مع options.text + options.voice، يقبل image_to_video صورة واحدة فقط — يُولَّد الصوت من النص (بدون MP3).options.voice، تكون مدة image_to_video هي مدة الصوت المُولَّد من النص (+0.6 ث).المعاملات المشتركة (multipart/form-data)
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
| videos[] | File[] | نعم | الملفات المراد معالجتها. حسب النمط: 2-20 ملف MP4/MOV، أو ملف MP4/MOV + ملف MP3، أو صورة (JPG/PNG) + ملف MP3. الحد الأقصى 500 ميجابايت لكل ملف. |
| mode | string | * | image_to_video | add_audio | mix_audio | overlay_video | text_to_mp3. مطلوب لهذه الأنماط غير الخاصة بالدمج. حذف mode مع ملفات MP4/MOV فقط يؤدي دائمًا إلى 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.2-2.0 ثانية. الافتراضي: 0.5. | |
| options | JSON | كائن JSON لمعاملات العرض الخاصة بـ image_to_video, add_text, mix_audio وoverlay_video (انظر الجداول أدناه). | |
| timings | File / string | image_to_video / add_text: ملف توقيتات الكاريوكي (SRT أو LRC، حتى 200 كيلوبايت) — حقل ملف أو نص عادي. يؤخذ النص المعروض من الملف؛ يفرض text_mode=karaoke؛ غير متوافق مع voice. | |
| callback_url | string | رابط عام (http/https) يُستدعى عند اكتمال المهمة. يتضمن الرد webhook_secret. |
معاملات options — نمط image_to_video
جميعها اختيارية. القيم غير المحددة → تُطبَّق الافتراضيات من طرف العامل.
| المفتاح | النوع | الافتراضي | الوصف |
|---|---|---|---|
| text | string | "" | النص المعروض كتراكب. فارغ = بلا نص. حد أقصى 500 حرف. |
| 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 | حجم الخط بالبكسل. النطاق: 10-300. |
| 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 | مدة التلاشي الداخل/الخارج بالثوانٍ (0-2). 0 = بلا تأثير. |
| width | int | 1080 | عرض الفيديو بالبكسل (64-3840، يُجبر على عدد زوجي). |
| height | int | 1920 | ارتفاع الفيديو بالبكسل (64-3840، يُجبر على عدد زوجي). |
| fps | int | 24 | معدل الإطارات (1-60). |
| image_fit | string | "contain" | contain: أظهر الصورة أو الفيديو بالكامل واملأ المساحات الفارغة بالخلفية المختارة. solid (افتراضي) أو blur. يتطلب التمويه image_fit=contain. يبقى النص واضحًا. cover: يتم تكبير الصورة لملء الإطار، مع تقليم الأطراف. |
| bg_color | string | "black" | background_mode=solid: لون الخلفية إذا لم تملأ الصورة الدقة المستهدفة. |
| background_mode | string | "solid" | solid (افتراضي) أو blur. يتطلب التمويه image_fit=contain. يبقى النص واضحًا. |
| blur_strength | number | 20 | رقم من 1 إلى 50؛ الافتراضي 20. شدة التمويه الغاوسي للخلفية فقط. |
| enable_image_motion | bool | false | تفعيل حركة الصورة. إذا كانت false، تبقى الصورة ثابتة. |
| image_motion_effect | string | "ken_burns" | تأثير الحركة. القيم المقبولة: zoom_in، zoom_out، pan_left_to_right، ken_burns، إلخ. |
| motion_intensity | float | 1.0 | شدة حركة الصورة (0.25-2.0). تضاعف سعة التكبير وسرعة الانتقال. |
| text_effect | string | "none" | تأثير حركة النص. القيم المقبولة: none، fade_in، slide_up، bounce. |
| text_effect_intensity | float | 1.0 | شدة حركة النص (0.25-2.0). تُتجاهل إذا كان text_effect هو none. |
| text_border_width | int | 0 | سمك الحدود السوداء حول الأحرف بالبكسل (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": يتلوّن النص مع إيقاع الصوت، صفحةً بعد صفحة (حتى 1000 حرف). متزامن كلمةً بكلمة مع 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.2 ثانية مع انتقال تدريجي. يُستخدم فقط مع text_mode=word_by_word. |
| karaoke_style | string | "fill" | نمط الكاريوكي: fill (تأخذ الكلمات المنطوقة لون التمييز)، sweep (تمتلئ كل كلمة تدريجيًا؛ كلمات كاملة في الكتابات من اليمين إلى اليسار) أو highlight (تُلوَّن الكلمة الحالية فقط). |
| highlight_color | string | "#FFD200" | لون الكلمات المنطوقة / الكلمة الحالية في وضع الكاريوكي (نفس صيغة text_color). |
| karaoke_lines | int | 2 | عدد الأسطر المعروضة في كل صفحة في وضع الكاريوكي (1–4). |
| voice | string | "" | معرّف الصوت (نفس قائمة text_to_mp3، مثل ar-SA-ZariyahNeural): يُولَّد الصوت من text في المهمة نفسها. عندها لا يحتاج image_to_video إلا إلى الصورة (يُرفَض إرسال ملف MP3 إضافي). في وضع الكاريوكي تتزامن كل كلمة مع الصوت. |
| voice_rate | int | 0 | سرعة الصوت المُولَّد بالنسبة المئوية (من −50 إلى +50). |
كاريوكي بتوقيتاتك الخاصة (SRT / LRC)
أرسل ملف SRT أو LRC في الحقل timings: يظهر كل سطر في وقته ويشكّل صفحة من الكاريوكي (حتى 500 سطر و5000 حرف). SRT: يختفي السطر عند وقت نهايته. LRC: يبقى السطر حتى التالي (السطر الفارغ يوقفه)؛ يُدعَم [offset:] وتوقيت الكلمات في 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 | اضبط على true لإزالة الخلفية الخضراء (#00FF00) من التراكب — مفيد لكاميرا الويب أو الرسوم المصورة على شاشة خضراء. |
| 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 وخيارات حركة الصورة مهملة. المدة القصوى: 15 دقيقة.
{"text":"Hello","output_format":"portrait","image_fit":"contain","background_mode":"blur","blur_strength":20}
| المفتاح | النوع | الافتراضي | الوصف |
|---|---|---|---|
| text | string | نعم | النص المراد إضافته. مطلوب، من 1 إلى 200 حرف. |
| 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 | حجم الخط، محدد لفيديو ضلعه الأقصر 1080 بكسل ويُضبط تلقائيًا حسب الدقة الفعلية — القيمة نفسها تبدو متطابقة في 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–2، الافتراضي 0.3؛ 0 = استبدال). يبدأ الصوت عند text_start؛ ويبقى النص ظاهرًا حتى نهايته، وإذا تجاوز نهاية الفيديو تُثبَّت آخر صورة. |
| background_mode | string | "solid" | solid (افتراضي) أو blur. يتطلب التمويه image_fit=contain. يبقى النص واضحًا. |
| blur_strength | number | 20 | رقم من 1 إلى 50؛ الافتراضي 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: لون الخلفية إذا لم تملأ الصورة الدقة المستهدفة. |
معاملات options — تحرير الصوت (mix_audio)
متاح فقط مع mode=mix_audio. يُتجاهل لـ add_audio.
| المفتاح | النوع | الافتراضي | الوصف |
|---|---|---|---|
| mp3_volume | float | 1.0 | مستوى صوت MP3 المُضاف (0.0 = صامت، 1.0 = الصوت الأصلي، 2.0 = ضعفان). |
وضع text_to_mp3 — معاملات مباشرة (بدون JSON الخاص بـ options)
على عكس الأوضاع الأخرى، تُرسل هذه الحقول مباشرة كحقول نموذج وليس داخل كائن JSON الخاص بـ options. الحقل text فقط مطلوب.
| المفتاح | النوع | الافتراضي | الوصف |
|---|---|---|---|
| text | string | — | النص المراد تحويله إلى كلام. مطلوب. 5000 حرف كحد أقصى. |
| lang | string | "en" | رمز اللغة المستخدم لاختيار الصوت الافتراضي عند حذف voice أو عدم صلاحيته. إحدى لغات الموقع العشرين (انظر الجدول أدناه). يعود إلى en إذا كان غير معروف. |
| voice | string | تلقائي | معرّف صوت edge-tts (انظر الجدول أدناه). إذا حُذف أو لم يكن معرّفًا صالحًا، يُستخدم أول صوت للغة lang تلقائيًا. |
| slow | bool | false | اضبط القيمة على true (أو 1) لإبطاء الكلام بنسبة 25%. أي قيمة أخرى تُعامل كـ 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
تتضمن الحالة المرحلة الفعلية والوقت المنقضي. التقديرات تقريبية؛ انتهاء مهلة العميل لا يعني فشل المهمة. استأنف متابعة المعرّف نفسه. تنتهي صلاحية الملفات بعد ساعتين من الاكتمال.
الحالات الممكنة
| الحالة | المعنى | حقول إضافية |
|---|---|---|
| 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 | رقم الصفحة (يبدأ من 1) |
limit | integer | 20 | عدد النتائج في الصفحة (50 كحد أقصى، الافتراضي 20) |
الردود حسب الحالة
يبث الملف النهائي. Content-Type هو video/mp4 لأوضاع الفيديو، أو audio/mpeg لـ text_to_mp3. لا يتطلب رمزاً. متاح فقط عندما تكون الحالة ready.
يُحتفظ بالملف لمدة ساعتين بعد اكتمال المهمة، ثم يُحذف. نزّله فور أن تصبح الحالة ready.
معاملات اختيارية
| المعامل | الوصف |
|---|---|
| filename | الاسم المقترح للملف المُنزَّل (مثلاً: my-video.mp4) |
| preview | اضبط على 1 للتشغيل المضمّن (يحذف Content-Disposition: attachment) بدلاً من بدء التنزيل — يُستخدم للمعاينة داخل المتصفح. |
مثال curl
الـ Webhooks
الـ Webhooks بديل للاستطلاع المتكرر: بدلاً من التحقق من الحالة كل X ثوانٍ، تقدم رابطاً ويستدعيك الخادم تلقائياً عند اكتمال المهمة.
كيف يعمل
- مرر
callback_urlفي POST إلى/api/v1/render.php - يتضمن الرد
webhook_secret— احتفظ به للتحقق من التوقيعات - عندما تصل المهمة إلى
readyأوerror، يرسل الخادم JSONPOSTموقعاً إلى رابطك - تحقق من التوقيع بـ
HMAC-SHA256(webhook_secret, raw_body)
callback_url رابطاً عاماً قابلاً للوصول (http أو https). تُحجب عناوين IP الخاصة وعناوين الاسترجاع والمحجوزة من طرف الخادم. المهلة: 10 ثوانٍ. الحمولة المُستلَمة
الترويسات التي يرسلها الخادم
| الترويسة | القيمة |
|---|---|
| Content-Type | application/json |
| X-RVM-Signature | sha256=<hmac_hex> — توقيع HMAC-SHA256 للجسم الخام |
| X-RVM-Job-Id | job_id المعني |
التحقق من التوقيع
أكواد الأخطاء
| HTTP | كود JSON | السبب |
|---|---|---|
| 401 | unauthorized | الرمز مفقود أو غير صالح أو مُلغى |
| 400 | missing_files | لم تُستلَم أي ملفات |
| 400 | too_few_files | أُرسل أقل من ملفين |
| 400 | too_many_files | أُرسل أكثر من 20 ملفاً |
| 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 | ملف يتجاوز 500 ميجابايت |
| 400 | text_required | الحقل options.text غير موجود أو فارغ (وضع add_text) |
| 400 | video_too_long | الفيديو أطول من 15 دقيقة (وضع add_text) |
| 400 | text_start_out_of_range | text_start يتجاوز نهاية الفيديو |
| 400 | invalid_voice | معرّف voice غير معروف. |
| 400 | invalid_timings | ملف توقيتات غير قابل للقراءة (صيغة غير معروفة، لا سطر موقَّت، نهاية قبل البداية، طويل جدًا…). |
| 400 | invalid_order | مصفوفة order ليست تبديلاً صحيحاً |
| 400 | invalid_job_id | صيغة job_id غير صحيحة (يجب أن تكون 32 حرفاً سداسياً) |
| 404 | job_not_found | المهمة غير موجودة — job_id مجهول أو لم يُنشأ قط |
| 410 | job_expired | انتهت صلاحية المهمة — وُجدت لكن نافذة الاسترداد لـ 2 ساعة انقضت |
| 429 | quota_exceeded | بلغ حد 20 مهمة ناجحة يومياً |
| 429 | rate_limited | تجاوز 12 طلباً/دقيقة على /api/v1/jobs.php |
| 500 | server_error | خطأ داخلي في الخادم |
أمثلة التكامل
أمثلة لكل نمط — ثبِّت requests بـ pip install requests.
الإعداد المشترك
نمط image_to_video — صورة + صوت → فيديو
تحرير الصوت
وضع overlay_video — صورة داخل صورة
وضع add_text — نص على فيديو
دمج مقاطع الفيديو
وضع text_to_mp3 — تحويل النص إلى كلام
الاستعلام + التنزيل (مشترك لجميع الأنماط)
نهجان في n8n: الاستعلام (حلقة الحالة) أو Webhook (الخادم يستدعي n8n). يُوصى بالـ Webhook.
النهج أ — Webhook (موصى به)
3 عقد فقط، بلا حلقات.
العقدة 1 — مشغِّل Webhook
أضف عقدة Webhook كمدخل لسير العمل (الأسلوب POST).
العقدة 2 — إنشاء المهمة (طلب HTTP)
| الأسلوب | POST |
| الرابط | https://rapidvideomaker.com/api/v1/render.php |
| المصادقة | Header Auth — Authorization: Bearer rvm_… |
| نوع محتوى الجسم | Form-Data Multipart |
| Body params | حقل ثنائي videos[] لكل مقطع + حقل نصي callback_url |
احتفظ بـ webhook_secret من الرد في متغير سير العمل للتحقق من التوقيعات.
العقدة 3 — معالجة النتيجة (في سير العمل المُشغَّل بالـ Webhook)
عندما يستلم n8n POST الخادم، تكون $json.status إما ready أو error.
{{ $headers['x-rvm-signature'] }} مع HMAC-SHA256 من webhook_secret الخاص بك.النهج ب — الاستعلام (بدون Webhook)
5 عقد، حلقة حالة كل 10 ثوانٍ.
العقدة 1 — إنشاء المهمة — نفس الإعداد بدون callback_url.
العقدة 2 — انتظار — 10 ثوانٍ.
العقدة 3 — استعلام الحالة (طلب HTTP GET)
| الرابط | https://rapidvideomaker.com/api/v1/jobs.php |
| معاملات الاستعلام | job_id = {{ $('العقدة 1').item.json.job_id }} |
| المصادقة | مصادقة الترويسة — نفس الرمز |
العقدة 4 — If: {{ $json.status }} === 'ready' → صحيح: العقدة 5 / خطأ: العودة للعقدة 2.
العقدة 5 — تنزيل: طلب HTTP GET على {{ $json.download_url }}.
الخطوة 1 — إنشاء المهمة (اختر نمطاً)
الخطوة 2 — الاستعلام
الخطوة 3 — التنزيل
أفضل الممارسات
- استعلم عن المهمة نفسها كل 5 إلى 10 ثوانٍ. تعتمد مدة المعالجة على الوضع وحجم المدخلات.
- تتضمن الحالة المرحلة الفعلية والوقت المنقضي. التقديرات تقريبية؛ انتهاء مهلة العميل لا يعني فشل المهمة. استأنف متابعة المعرّف نفسه. تنتهي صلاحية الملفات بعد ساعتين من الاكتمال.
- التنزيل السريع: نزِّل الملف فور أن تصبح الحالة
ready. يُحذف بعد ساعتين من اكتمال المهمة. - إدارة الحصة: تحقق من
quota_remainingفي رد POST. - أخطاء الشبكة: عند خطأ في الشبكة أثناء الاستعلام، انتظر وأعد المحاولة.