2647758228397561114
  • اتصل بنا
  • سياسة الخصوصية
  • من نحن

🎨 شكل الهيدر

style
التحكم في المظهر:
غيّر رقم style:
0: الافتراضي (الموجي).
1: الإخباري (أحمر). 2: التقني (أزرق/كحلي).

seowriting

  • ملف الشرح
  • قائمة الروابط
  • _إعداد قائمة
  • [mega] ادوات ويب
style title count

بواسطة morbah | مارس 04, 2025
دمج صوت وصور إلى فيديو

دمج صوت وصور إلى فيديو

لم تفهم نقطة معينة؟

اسأل المساعد الذكي وسيجيبك بناءً على محتوى هذا المقال.

<!--DOCTYPE html--> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>دمج صوت وصور إلى فيديو</title> <style> body { font-family: sans-serif; } .container { max-width: 800px; margin: 0 auto; padding: 20px; border: 1px solid #ccc; } input[type="file"], button { margin-bottom: 10px; display: block; } #preview { display: flex; flex-wrap: wrap; margin-bottom: 10px; } #preview img { max-width: 100px; max-height: 100px; margin-right: 10px; margin-bottom: 10px; border: 1px solid #ddd; } #video-output { width: 100%; } </style> </head> <body> <div class="container"> <h1>دمج صوت وصور إلى فيديو</h1> <label for="audio-input">اختر ملف الصوت:</label> <input type="file" id="audio-input" accept="audio/*"> <label for="image-input">اختر الصور:</label> <input type="file" id="image-input" accept="image/*" multiple> <div id="preview"></div> <button id="create-video-button">إنشاء الفيديو</button> <canvas id="canvas" width="640" height="360" style="display: none;"></canvas> <video id="video-output" controls></video> </div> <script> const audioInput = document.getElementById('audio-input'); const imageInput = document.getElementById('image-input'); const previewDiv = document.getElementById('preview'); const createVideoButton = document.getElementById('create-video-button'); const canvas = document.getElementById('canvas'); const videoOutput = document.getElementById('video-output'); const ctx = canvas.getContext('2d'); let audioURL = null; let imageURLs = []; let audioBuffer = null; // لتخزين الصوت كـ AudioBuffer // 1. معالجة تحميل ملف الصوت audioInput.addEventListener('change', (event) => { const file = event.target.files[0]; if (file) { audioURL = URL.createObjectURL(file); // تحويل الصوت إلى AudioBuffer const reader = new FileReader(); reader.onload = async (e) => { const audioContext = new (window.AudioContext || window.webkitAudioContext)(); audioBuffer = await audioContext.decodeAudioData(e.target.result); }; reader.readAsArrayBuffer(file); } }); // 2. معالجة تحميل الصور imageInput.addEventListener('change', (event) => { const files = Array.from(event.target.files); imageURLs = []; // إعادة تعيين المصفوفة previewDiv.innerHTML = ''; // مسح المعاينة files.forEach(file => { if (file.type.startsWith('image/')) { const imageURL = URL.createObjectURL(file); imageURLs.push(imageURL); // عرض معاينة للصور const img = document.createElement('img'); img.src = imageURL; previewDiv.appendChild(img); } }); }); // دالة تحميل صورة (لتحويل الرابط إلى كائن Image) function loadImage(url) { return new Promise((resolve, reject) => { const img = new Image(); img.onload = () => resolve(img); img.onerror = reject; img.src = url; }); } // 3. إنشاء الفيديو createVideoButton.addEventListener('click', async () => { if (!audioURL || imageURLs.length === 0) { alert('الرجاء اختيار ملف صوتي وصورة واحدة على الأقل.'); return; } createVideoButton.disabled = true; createVideoButton.textContent = 'جاري الإنشاء...'; const durationPerImage = audioBuffer ? audioBuffer.duration / imageURLs.length : 5; // إذا لم يكن هناك صوت، افترض 5 ثوانٍ لكل صورة // إنشاء MediaStream من Canvas const stream = canvas.captureStream(); // إضافة مسار الصوت (إذا كان موجودًا) let audioTrack; if (audioBuffer) { const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const source = audioContext.createBufferSource(); source.buffer = audioBuffer; const destination = audioContext.createMediaStreamDestination(); source.connect(destination); audioTrack = destination.stream.getAudioTracks()[0]; stream.addTrack(audioTrack); source.start(); // ابدأ تشغيل الصوت } const recorder = new MediaRecorder(stream, { mimeType: 'video/webm;codecs=vp9,opus' }); const chunks = []; recorder.ondataavailable = (event) => { if (event.data.size > 0) { chunks.push(event.data); } }; recorder.onstop = () => { const blob = new Blob(chunks, { type: 'video/webm' }); const videoURL = URL.createObjectURL(blob); videoOutput.src = videoURL; videoOutput.style.display = 'block'; canvas.style.display = 'none'; createVideoButton.disabled = false; createVideoButton.textContent = 'إنشاء الفيديو'; }; recorder.start(); for (const imageUrl of imageURLs) { try{ const img = await loadImage(imageUrl); ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.drawImage(img, 0, 0, canvas.width, canvas.height); await new Promise(resolve => setTimeout(resolve, durationPerImage * 1000)); }catch(error){ console.error("خطأ:", error); } } recorder.stop(); if (audioBuffer && audioTrack) { // توقيف تشغيل الصوت عند انتهاء مدة الفيديو setTimeout(()=>{ audioTrack.stop(); }, audioBuffer.duration * 1000) } }); </script> </body> </html>

شارك المقال مع أصدقائك

Whatsapp Twitter X Facebook
Author

الكاتب : morbah

انا مهتم بمجال التقنية والربح من الانترنت واتطلع لنشر المزيد من المقالات التي تفيدكم

تعليقات

إرسال تعليق

إظهار أحدث المقالات (تشغيل/إيقاف)

📝 قسم "أحدث المقالات" مفعل.
لإخفائه، قم بإلغاء تفعيل "إظهار الأداة".

تشغيل/إيقاف القائمة الجانبية

✅ لاظهار القائمة الجانبية قم بتفعيل هذه الأداة.
لإخفائها، قم بإلغاء تفعيل "إظهار الأداة" من الأعلى.
⚙️ التحكم:
- data-active: اجعلها "true" للتفعيل أو "false" للإيقاف.
- data-time: مدة العداد بالثواني.
- data-page-url: رابط الصفحة التي أنشأتها للتحويل (يجب إنشاؤها يدوياً).

مواقع التواصل الاجتماعي

التسميات

  • شرح القالب 1
  • ملف الشرح 13

المشاركات الشائعة

مشاركة مميزة

No Image
يناير 16, 2026

افضل طرق الربح من الملفات 2026 هل تعلم أن الملفات المخزنة على جهازك بلا فائدة يمكن أن تتحول إلى دولارات حقيقية؟ نعم، هذا ليس خيالاً ع...

جميع الحقوق محفوظة © seowriting

تنبيهات جديدة
جاري التحميل...

المساعد الذكي للمدونة

أهلاً بك! أنا مساعدك الشخصي في مدونة seowriting. كيف يمكنني مساعدتك اليوم؟ يمكنك سؤالي عن أي مقال أو موضوع في المدونة.

مدعوم بواسطة MOPlus

شرح وتوضيح الفقرة

مشاركة في التطبيقات الأخرى

Telegram
Whatsapp
Twitter
Facebook
Tumblr
Reddit
LinkedIn
Pinterest
Email
نسخ رابط المقال