سؤال

1
00:00:00,074 --> 00:00:02,564
Previously on Breaking Bad...

2
00:00:02,663 --> 00:00:04,393
Words...

أحتاج إلى تحليل ملفات srt باستخدام php وطباعة جميع الملفات الفرعية الموجودة في الملف باستخدام المتغيرات.

لم أتمكن من العثور على إكسب ريج الصحيح.عند القيام بذلك أحتاج إلى أخذ المعرف والوقت ومتغيرات الترجمة.وعند الطباعة يجب ألا يكون هناك array() أو ما إلى ذلك.يجب طباعة نفس الشيء كما في الملف الأصلي.

أعني أنني يجب أن أطبع مثل؛

$number <br> (e.g. 1)
$time <br> (e.g. 00:00:00,074 --> 00:00:02,564)
$subtitle <br> (e.g. Previously on Breaking Bad...)

بالمناسبة لدي هذا الرمز.لكنه لا يرى الخطوط.يجب تعديله ولكن كيف؟

$srt_file = file('test.srt',FILE_IGNORE_NEW_LINES);
$regex = "/^(\d)+ ([\d]+:[\d]+:[\d]+,[\d]+) --> ([\d]+:[\d]+:[\d]+,[\d]+) (\w.+)/";

foreach($srt_file as $srt){

    preg_match($regex,$srt,$srt_lines);

    print_r($srt_lines);
    echo '<br />';

}
هل كانت مفيدة؟

المحلول

هنا هي آلة حالة قصيرة وبسيطة لتحليل خط ملف SRT حسب الخط: giveacodicetagpre.

النتيجة: giveacodicetagpre.

يمكنك بعد ذلك حلقة فوق مجموعة من الغواصات أو الوصول إليها عن طريق مجموعة أوفست: giveacodicetagpre.

لإظهار جميع الغواصات عن طريق الحلقات على كل واحد وعرضها: giveacodicetagpre.

المزيد من القراءة: تنسيق ملف نص SubRIP

نصائح أخرى

هذا لن يطابق لأن صفيف $ SRT_FILE قد يبدو مثل هذا: giveacodicetagpre.

Regex الخاص بك لن تتطابق مع أي من هذه العناصر.

إذا كانت نيتك هي قراءة الملف بأكمله في سلسلة واحدة طويلة من الذاكرة، فاستخدم file_get_contents للحصول على محتويات الملف بأكملها في سلسلة واحدة.ثم استخدم Preg_Match_all للحصول على جميع مباريات Regex.

خلاف ذلك قد تحاول حلقة من خلال الصفيف ومحاولة مطابقة أنماط Regex المختلفة لتحديد ما إذا كان الخط هو معرف أو نطاق زمني أو نص ويفعل الشيء بشكل مناسب.من الواضح أنك قد ترغب أيضا في الحصول على بعض المنطق للتأكد من الحصول على القيم بالترتيب الصحيح (المعرف، ثم النطاق الزمني، ثم النص).

المجموعة file() مجموعة إلى قطع من 4 باستخدام array_chunk(), ، ثم قم بحذف الإدخال الأخير، لأنه سطر فارغ مثل هذا:

foreach( array_chunk( file( 'test.srt'), 4) as $entry) {
    list( $number, $time, $subtitle) = $entry;
    echo $number . '<br />';
    echo $time . '<br />';
    echo $subtitle . '<br />';
}

قمت بتصنيف فئة لتحويل ملف .srt إلى صفيف. يحتوي كل إدخال من الصفيف على الخصائص التالية:

  • ID: رقم يمثل معرف العنوان الفرعي (2)
  • ابدأ: تعويم، وقت البدء بالثواني (24.443)
  • نهاية: تعويم، وقت الانتهاء في ثوان (27.647)
  • startstring: وقت البدء في تنسيق الإنسان القابل للقراءة (00: 00: 24.443)
  • endstring: الوقت النهائي بتنسيق مقروء الإنسان (00: 00: 24.647)
  • مدة: مدة الترجمة الفرعية، في MS (3204)
  • النص: نص العنوان الفرعي ( حكم الطاووس على مدينة Gongmen. )

    الرمز هو php7: giveacodicetagpre.

    أو التحقق من ذلك هنا: https://github.com/lingtalfi/videosubtitles

يمكنك استخدام هذا المشروع: https://github.com/captioning/captioning

رمز نموذج: giveacodicetagpre.

نموذج الإخراج: giveacodicetagpre.

يمكن القيام به باستخدام استراحة خط PHP. يمكنني أن أفعل ذلك بنجاح اسمحوا لي أن أعرض رمزي giveacodicetagpre.

هنا $ Movie-> SRT هو الترجمة من التنسيق الذي نشرته في هذا السؤال. كما نرى، في كل مرة الفضاء هو خطان جديدان، آمل أن تحصل على إجابة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top