تحويل ملفات M3U8 إلى MPD بسهولة ببايثون

x32x01
  • بواسطة x32x01 ||
لو عندك ملف M3U8 (اللي بيستخدم عادة في بث الفيديوهات أونلاين أو البث المباشر)، وعايز تحوّله إلى MPD علشان تقدر تشغله على مشغلات بتدعم MPEG-DASH زي VLC - البوست ده ليك 💪

الفكرة الأساسية 🧠

السكريبت اللي هنتكلم عنه هدفه ببساطة:
تحويل تنسيق M3U8 إلى MPD عن طريق أداة FFmpeg باستخدام سكريبت صغير بلغة Python.
وده مفيد جدًا لو بتشتغل في مجال بث الفيديوهات أو السيرفرات اللي بتعتمد على DASH streaming.

الأدوات اللي هتحتاجها 🧰


1. تثبيت FFmpeg​

هو أداة قوية ومجانية للتعامل مع الفيديوهات، سواء تحويل، دمج، أو بث مباشر.
نزّلها من الموقع الرسمي:
🔗 https://ffmpeg.org
بعد ما تنزّلها، ضيفها لمسار النظام (PATH) عشان تقدر تستخدمها من أي مكان.

2. تثبيت Python​

أكيد محتاج Python يكون متثبت عندك.
تقدر تتأكد بكتابة: python --version

3. تثبيت مكتبة ffmpeg-python​

المكتبة دي بتربط Python بـ FFmpeg بطريقة سهلة.
ثبّتها بالأمر ده 👇
pip install ffmpeg-python

سكريبت تحويل M3U8 إلى MPD 🔄

الكود الجاي هو سكريبت بسيط بلغة Python بيحوّل ملف M3U8 إلى MPD بشكل مباشر:
Python:
import ffmpeg
import sys
import os

def convert_m3u8_to_mpd(input_m3u8, output_mpd):
    try:
        if not input_m3u8.startswith('http') and not os.path.exists(input_m3u8):
            print("خطأ: ملف الإدخال غير موجود.")
            return

        stream = ffmpeg.input(input_m3u8)
        stream = ffmpeg.output(
            stream,
            output_mpd,
            format='dash',
            c='copy',
            f='dash',
            use_template=1,
            use_timeline=1,
            seg_duration=4,
            window_size=5,
            extra_window_size=5
        )

        ffmpeg.run(stream, overwrite_output=True)
        print(f"تم التحويل بنجاح من {input_m3u8} إلى {output_mpd}")

    except ffmpeg.Error as e:
        print(f"خطأ في FFmpeg: {e.stderr.decode()}")
    except Exception as e:
        print(f"خطأ: {str(e)}")

if __name__ == "__main__":
    if len(sys.argv) != 3:
        print("الاستخدام: python script.py <ملف_m3u8_المدخل> <ملف_mpd_الناتج>")
        sys.exit(1)

    input_m3u8 = sys.argv[1]
    output_mpd = sys.argv[2]
    convert_m3u8_to_mpd(input_m3u8, output_mpd)



ازاي السكريبت بيشتغل؟ ⚙️

  1. الإدخال: بياخد ملف M3U8 سواء من جهازك أو من لينك مباشر.
  2. التحويل: بيستخدم FFmpeg لتحويل البث من HLS (M3U8) إلى DASH (MPD).
    • بينسخ الفيديو والصوت زي ما هم (من غير ما يغير الجودة).
    • بيقسم الفيديو لمقاطع صغيرة كل واحدة مدتها 4 ثواني.
  3. الإخراج: بينتج ملف MPD جاهز للتشغيل على أي مشغل يدعم DASH.



طريقة الاستخدام 🖥️

  1. احفظ الكود باسم convert.py
  2. افتح الـ Terminal أو CMD وروح للمجلد اللي فيه الملف.
  3. شغّل الأمر ده: python convert.py input.m3u8 output.mpd

استبدل:
  • input.m3u8 باسم ملفك أو اللينك بتاعه
  • output.mpd بالاسم اللي عايزه لملف الناتج

🔹 مثال عملي:
python convert.py http://example.com/playlist.m3u8 myvideo.mpd

هتلاقي بعد التنفيذ:
تم التحويل بنجاح من playlist.m3u8 إلى myvideo.mpd ✅



ملاحظات مهمة ⚠️

  • 🎥 لو الفيديو مشفّر (DRM): مش هيشتغل التحويل إلا بمفتاح فك التشفير.
  • ⏱️ مدة المقاطع: ممكن تغيّر seg_duration=4 لأي رقم يناسبك.
  • 🔴 لو بتتعامل مع بث مباشر: عدّل الإعدادات للتعامل مع تدفق حي (Live Stream).
  • 🌐 لو بتستخدم URL: تأكد إن الإنترنت مستقر.
  • 🧩 لو حصل خطأ:
    • تأكد إن FFmpeg متثبت (ffmpeg -version)
    • تأكد إن المسار صحيح
    • تأكد إن عندك صلاحيات الكتابة في المجلد



النتيجة النهائية 🎉

بعد ما تشغّل السكريبت، هتحصل على:
  • ملف .mpd
  • مجموعة مقاطع .m4s
    تقدر تشغلهم على أي مشغل بيدعم DASH زي VLC أو Shaka Player.
 
التعديل الأخير:
المواضيع ذات الصلة
x32x01
الردود
0
المشاهدات
706
x32x01
x32x01
x32x01
الردود
0
المشاهدات
570
x32x01
x32x01
x32x01
الردود
0
المشاهدات
647
x32x01
x32x01
x32x01
الردود
0
المشاهدات
627
x32x01
x32x01
x32x01
الردود
0
المشاهدات
590
x32x01
x32x01
x32x01
الردود
0
المشاهدات
586
x32x01
x32x01
x32x01
الردود
0
المشاهدات
580
x32x01
x32x01
x32x01
الردود
0
المشاهدات
281
x32x01
x32x01
x32x01
الردود
0
المشاهدات
567
x32x01
x32x01
x32x01
الردود
0
المشاهدات
605
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
1,829
المشاركات
2,027
أعضاء أكتب كود
468
أخر عضو
عبدالله احمد
عودة
أعلى