الانتقال إلى المحتوى الرئيسي
مع اتساع استخدام الذكاء الاصطناعي، أصبحت برامج الذكاء الاصطناعي متنوعة وشائعة بشكل متزايد. لقد أصبح الذكاء الاصطناعي جزءًا لا يتجزأ من جوانب حياة الناس وعملهم. كما أن الصناعات التي تشملها الذكاء الاصطناعي تتزايد، بدءًا من الكتابة، إلى التعليم الطبي، وصولاً إلى الفيديوهات الآن. Luma هي منصة متخصصة في توليد الفيديوهات عالية الجودة، حيث يمكن للمستخدمين ببساطة رفع المواد، وسيتم توليد فيديوهات عالية الجودة تلقائيًا وفقًا لأنماط وتأثيرات مختلفة. تم تطوير هذه الأداة من قبل أعضاء فريق من شركات التكنولوجيا المعروفة، والهدف هو تمكين الجميع من إنتاج فيديوهات رائعة بسهولة دون الحاجة إلى أدوات تحرير معقدة. ومع ذلك، لم تقدم Luma رسميًا واجهة برمجة التطبيقات، حيث تقدم AceDataCloud مجموعة من واجهات برمجة التطبيقات الخاصة بـ Luma، والتي تحاكي الاتصال بـ Suno الرسمي، مما يسهل ويسرع عملية توليد الفيديوهات المطلوبة.

التقديم والاستخدام

لاستخدام واجهة برمجة تطبيقات Luma Videos، يمكنك أولاً زيارة صفحة Luma Videos Generation API والنقر على زر “Acquire” للحصول على الشهادات المطلوبة: إذا لم تكن قد قمت بتسجيل الدخول أو التسجيل بعد، فسيتم تحويلك تلقائيًا إلى صفحة تسجيل الدخول لدعوتك للتسجيل وتسجيل الدخول، وبعد تسجيل الدخول، سيتم إرجاعك تلقائيًا إلى الصفحة الحالية. عند التقديم لأول مرة، ستحصل على رصيد مجاني يمكن استخدامه مجانًا.

الاستخدام الأساسي

لإنشاء أي فيديو، يمكنك إدخال نص عشوائي، على سبيل المثال، إذا كنت ترغب في إنشاء فيديو عن رواد الفضاء الذين ينتقلون بين الفضاء والبراكين، يمكنك إدخال Astronauts shuttle from space to volcano، كما هو موضح في الصورة:

الكود الناتج كما يلي:

المعلمات الرئيسية المطلوبة:
  • prompt: كلمة المرور لتوليد الفيديو.
  • aspect_ratio: نسبة عرض الفيديو، الافتراضي 16:9.
  • end_image_url: اختياري، لتحديد الإطار النهائي.
  • enhancement: اختياري، مفتاح تعزيز الوضوح.
  • loop: هل يتم توليد فيديو متكرر، الافتراضي false.
  • timeout: اختياري، عدد الثواني للمهلة.
  • callback_url: عنوان الاستدعاء غير المتزامن.
يمكنك النقر على زر “Try” لاختبار واجهة برمجة التطبيقات مباشرة، انتظر 1-2 دقيقة، والنتيجة كما يلي:
{
  "success": true,
  "task_id": "e4018a99-1522-4f24-9330-62c2a9b50b59",
  "video_id": "155838f8-7f1e-44d8-b387-192f3b4b509d",
  "prompt": "Astronauts shuttle from space to volcano",
  "video_url": "https://storage.cdn-luma.com/dream_machine/af94e7ca-da35-4b5f-a636-2d7254184d0d/watermarked_video0585de3737db946e5a0ac895384ecd180.mp4",
  "video_height": 752,
  "video_width": 1360,
  "state": "completed",
  "thumbnail_url": "https://platform.cdn.acedata.cloud/luma/e4018a99-1522-4f24-9330-62c2a9b50b59.jpg",
  "thumbnail_width": 1360,
  "thumbnail_height": 752
}
يمكنك أن ترى أننا حصلنا على معلومات الفيديو ذات الصلة، بما في ذلك معرف الفيديو، رابط الفيديو، غلاف الفيديو، وما إلى ذلك. تفسير الحقول كما يلي:
  • success: هل تم التوليد بنجاح، إذا كان ناجحًا فسيكون true، وإلا سيكون false
  • task_id: المعرف الفريد لمهمة توليد الفيديو هنا
  • video_id: المعرف الفريد للفيديو الناتج عن مهمة توليد الفيديو هنا
  • prompt: الكلمات الرئيسية لمهمة توليد الفيديو هنا
  • video_url: رابط الفيديو الناتج عن مهمة توليد الفيديو هنا
  • video_height: ارتفاع صورة غلاف الفيديو الناتج
  • video_width: عرض صورة غلاف الفيديو الناتج
  • state: حالة مهمة توليد الفيديو هنا، إذا كانت المهمة مكتملة فستكون completed.
  • thumbnail_url: رابط صورة غلاف الفيديو الناتج
  • thumbnail_width: عرض صورة غلاف الفيديو الناتج
  • thumbnail_height: ارتفاع صورة غلاف الفيديو الناتج

توليد الإطارات المخصصة

إذا كنت ترغب في توليد الفيديو من خلال تخصيص الإطارات الأولى والأخيرة، يمكنك إدخال روابط الصور للإطارات: في هذه الحالة، يمكن تمرير الصورة التالية كإطار أول للفيديو في حقل start_image_url: الإطار الأول بعد ذلك، نحتاج إلى تخصيص توليد الفيديو بناءً على الإطارات والكلمات الرئيسية، يمكننا تحديد المحتويات كما يلي:
  • action: سلوك مهمة توليد الفيديو، عادةً ما يكون التوليد العادي generate أو التوليد الموسع extend، الافتراضي هو generate.
  • start_image_url: تحديد الإطار الأول للفيديو الناتج.
  • end_image_url: تحديد الإطار الأخير للفيديو الناتج.
  • prompt: محتوى الكلمات الرئيسية لتوليد الفيديو.
مثال على كيفية التعبئة كما يلي:

بعد الانتهاء من التعبئة، تم توليد الكود كما يلي:

الكود المقابل:
import requests

url = "https://api.acedata.cloud/luma/videos"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "start_image_url": "https://cdn.acedata.cloud/r9vsv9.png",
    "action": "generate",
    "prompt": "Astronauts shuttle from space to volcano"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
النتيجة الناتجة كما يلي:
{
  "success": true,
  "task_id": "12a18694-fd4b-47e7-9c50-34f30862cff6",
  "video_id": "0105c090-03a5-425a-8026-523341cd575b",
  "prompt": "Astronauts shuttle from space to volcano",
  "video_url": "https://platform.cdn.acedata.cloud/luma/12a18694-fd4b-47e7-9c50-34f30862cff6.mp4",
  "video_height": 656,
  "video_width": 1552,
  "state": "completed",
  "thumbnail_url": "https://platform.cdn.acedata.cloud/luma/12a18694-fd4b-47e7-9c50-34f30862cff6.jpg",
  "thumbnail_width": 1552,
  "thumbnail_height": 656
}
النتيجة النهائية مشابهة لما سبق، حيث يحتوي الفيديو الناتج على الإطار الأول الذي قمنا بإدخاله، بالطبع يمكن أيضًا إدخال روابط صور الإطارات الأولى والأخيرة معًا لتوليد الفيديو، كل ما عليك هو إضافة رابط صورة الإطار الأخير كما هو موضح أعلاه، معلومات صورة الإطار الأخير كما يلي: الإطار الأخير مثال على كيفية التعبئة كما يلي:

وأخيرًا، نحصل على النتيجة كما يلي:
{
  "success": true,
  "task_id": "d1cb723a-e554-4775-94a4-bb6ae8c7ea67",
  "video_id": "6bebd0d2-f793-472e-9326-38528a9273bb",
  "prompt": "رواد الفضاء ينتقلون من الفضاء إلى البركان",
  "video_url": "https://platform.cdn.acedata.cloud/luma/d1cb723a-e554-4775-94a4-bb6ae8c7ea67.mp4",
  "video_height": 656,
  "video_width": 1552,
  "state": "مكتمل",
  "thumbnail_url": "https://platform.cdn.acedata.cloud/luma/d1cb723a-e554-4775-94a4-bb6ae8c7ea67.jpg",
  "thumbnail_width": 1552,
  "thumbnail_height": 656
}
النتيجة مشابهة لما سبق، الفيديو الناتج يحتوي أيضًا على صورة الإطار الأول والإطار الأخير، مما يحقق تخصيص الإطارات الأولى والأخيرة لإنشاء الفيديو.

ميزات توسيع الفيديو

إذا كنت ترغب في الاستمرار في إنشاء الفيديو الناتج، يمكنك تعيين المعامل action إلى extend، وإدخال ID الفيديو أو رابط الفيديو الذي تحتاج إلى الاستمرار في إنشائه، يمكن الحصول على ID الفيديو ورابط الفيديو بناءً على الاستخدام الأساسي كما هو موضح في الصورة أدناه:

في هذه الحالة، يمكنك رؤية ID الفيديو هو:
"video_id": "0105c090-03a5-425a-8026-523341cd575b",
"video_url": "https://platform.cdn.acedata.cloud/luma/12a18694-fd4b-47e7-9c50-34f30862cff6.mp4"
ملاحظة: هنا، video_id و video_url في الفيديو هي ID ورابط الفيديو الناتج، إذا كنت لا تعرف كيفية إنشاء الفيديو، يمكنك الرجوع إلى الاستخدام الأساسي المذكور أعلاه لإنشاء الفيديو.
للاستمرار في إنشاء الفيديو، يجب عليك تحميل رابط الفيديو أو ID الفيديو، أدناه توضيح لاستخدام ID الفيديو للتوسيع، بعد ذلك يجب علينا ملء الكلمات الرئيسية لتخصيص إنشاء الفيديو، يمكننا تحديد المحتوى كما يلي:
  • action: في هذه الحالة، سلوك توسيع الفيديو، يجب أن يكون extend.
  • prompt: الكلمات الرئيسية التي تحتاج إلى توسيع الفيديو.
  • video_url: الرابط الذي يحتاج إلى توسيع الفيديو الناتج.
  • video_id: ID الفريد الذي يحتاج إلى توسيع الفيديو الناتج.
  • end_image_url: يمكن تحديد رابط صورة الإطار الأخير لتوسيع الفيديو، وهو معامل اختياري.
نموذج التعبئة كما يلي:

بعد ملء المعلومات، تم إنشاء الكود تلقائيًا كما يلي:

الكود المقابل بلغة بايثون:
import requests

url = "https://api.acedata.cloud/luma/videos"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "action": "extend",
    "video_id": "0105c090-03a5-425a-8026-523341cd575b",
    "prompt": "رواد الفضاء ينتقلون من الفضاء إلى البركان"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
عند النقر على التشغيل، يمكنك أن تجد أنك ستحصل على نتيجة كما يلي:
{
  "success": true,
  "task_id": "c6e529d1-a06d-4c12-91b2-c855135131c3",
  "video_id": "36908c49-c2bb-4a11-bd5a-b8512b004818",
  "prompt": "رواد الفضاء ينتقلون من الفضاء إلى البركان",
  "video_url": "https://platform.cdn.acedata.cloud/luma/c6e529d1-a06d-4c12-91b2-c855135131c3.mp4",
  "video_height": 656,
  "video_width": 1552,
  "state": "مكتمل",
  "thumbnail_url": "https://platform.cdn.acedata.cloud/luma/c6e529d1-a06d-4c12-91b2-c855135131c3.jpg",
  "thumbnail_width": 1552,
  "thumbnail_height": 656
}
يمكنك أن ترى أن هذا الفيديو تم توسيعه بناءً على الفيديو الذي يحتاج إلى التوسيع، ومحتوى النتيجة متطابق مع ما سبق، مما يحقق وظيفة الاستمرار في إنشاء الأغاني. بالطبع، يمكننا أيضًا تحديد رابط الفيديو للتوسيع، ملء المعلومات كما يلي:

بعد التشغيل، حصلنا على النتيجة التالية:
{
  "success": true,
  "task_id": "1dcb5902-a7be-4b77-ba5d-dd8ec82b26ca",
  "video_id": "f0187dc2-339f-4a08-a435-c3a3341f620a",
  "prompt": "رواد الفضاء ينتقلون من الفضاء إلى البركان",
  "video_url": "https://platform.cdn.acedata.cloud/luma/1dcb5902-a7be-4b77-ba5d-dd8ec82b26ca.mp4",
  "video_height": 656,
  "video_width": 1552,
  "state": "مكتمل",
  "thumbnail_url": "https://platform.cdn.acedata.cloud/luma/1dcb5902-a7be-4b77-ba5d-dd8ec82b26ca.jpg",
  "thumbnail_width": 1552,
  "thumbnail_height": 656
}
يمكنك أن ترى من النتيجة أنه يمكن أيضًا تحقيق وظيفة توسيع الفيديو بناءً على رابط الفيديو. أخيرًا، يمكننا أيضًا تحديد صورة الإطار الأخير في الفيديو الموسع للتوسيع، أدناه معلومات صورة الإطار الأخير: صورة الإطار الأخير بعد ذلك، بناءً على ما سبق، أضف معلومات صورة الإطار الأخير، كما هو موضح أدناه:

عند النقر على التشغيل، حصلنا على المعلومات التالية:
{
  "success": true,
  "task_id": "b816b2b4-c345-4673-9e19-83e91f91b643",
  "video_id": "c5400053-63e6-4206-8082-31cf9dd1e7ed",
  "prompt": "رواد الفضاء ينتقلون من الفضاء إلى البركان",
  "video_url": "https://platform.cdn.acedata.cloud/luma/b816b2b4-c345-4673-9e19-83e91f91b643.mp4",
  "video_height": 656,
  "video_width": 1552,
  "state": "مكتمل",
  "thumbnail_url": "https://platform.cdn.acedata.cloud/luma/b816b2b4-c345-4673-9e19-83e91f91b643.jpg",
  "thumbnail_width": 1552,
  "thumbnail_height": 656
}
يمكنك أن ترى أنه بناءً على الفيديو الموسع السابق، يمكن أيضًا تحديد صورة الإطار الأخير للتوسيع.

ردود غير متزامنة

نظرًا لأن وقت إنشاء الفيديو بواسطة Luma طويل نسبيًا، حوالي 1-2 دقيقة، إذا لم يكن هناك استجابة من API لفترة طويلة، ستظل طلبات HTTP متصلة، مما يؤدي إلى استهلاك موارد النظام الإضافية، لذا فإن هذه API توفر أيضًا دعم الردود غير المتزامنة. 整体流程是:客户端发起请求的时候,额外指定一个 callback_url 字段,客户端发起 API 请求之后,API 会立马返回一个结果,包含一个 task_id 的字段信息,代表当前的任务 ID。当任务完成之后,生成音乐的结果会通过 POST JSON 的形式发送到客户端指定的 callback_url,其中也包括了 task_id 字段,这样任务结果就可以通过 ID 关联起来了。 下面我们通过示例来了解下具体怎样操作。 首先,Webhook 回调是一个可以接收 HTTP 请求的服务,开发者应该替换为自己搭建的 HTTP 服务器的 URL。此处为了方便演示,使用一个公开的 Webhook 样例网站 https://webhook.site/,打开该网站即可得到一个 Webhook URL,如图所示:

将此 URL 复制下来,就可以作为 Webhook 来使用,此处的样例为 https://webhook.site/0c87ca0e-cd74-4577-8d68-f2b80fbf8a13。 接下来,我们可以设置字段 callback_url 为上述 Webhook URL,同时填入 prompt,如图所示:

点击运行,可以发现会立即得到一个结果,如下:
{
  "task_id": "732f8282-7cf8-401c-95f2-42c33aa079a6"
}
稍等片刻,我们可以在 https://webhook.site/0c87ca0e-cd74-4577-8d68-f2b80fbf8a13 上观察到生成歌曲的结果,如图所示: 内容如下:
{
    "success": true,
    "task_id": "732f8282-7cf8-401c-95f2-42c33aa079a6",
    "video_id": "4d8013c3-5de0-41aa-966e-0b1a51d1c633",
    "prompt": "Astronauts shuttle from space to volcano",
    "video_url": "https://platform.cdn.acedata.cloud/luma/732f8282-7cf8-401c-95f2-42c33aa079a6.mp4",
    "video_height": 752,
    "video_width": 1360,
    "state": "completed",
    "thumbnail_url": "https://platform.cdn.acedata.cloud/luma/732f8282-7cf8-401c-95f2-42c33aa079a6.jpg",
    "thumbnail_width": 1360,
    "thumbnail_height": 752
}
可以看到结果中有一个 task_id 字段,其他的字段都和上文类似,通过该字段即可实现任务的关联。