تحويل ASS إلى JSON
أو ألصق نص الترجمة
ما يغيره هذا التحويل
شيء واحد يسقط أو يحتاج قرارا
- محتوى خاص بالصيغة
محتوى تحفظه صيغة المصدر خارج مقاطعها (كتل خارج المقاطع ونص ترويسة وإعدادات لكل مقطع وأحداث معلقة) — لا مكان له في صيغة الهدف
تأتي هذه القائمة من مصفوفة القدرات لهاتين الصيغتين، لا من الملف الذي حملته. وقد يفقد ملف بعينه أكثر إن استخدم ميزات تسمح بها الصيغة ولا تمثلها المصفوفة.
هذه الأداة تعيد كتابة ASS بصيغة JSON. أرقام التوقيت متطابقة، والصياغة مختلفة: 0:00:01.25 في ASS و1250 في JSON. كل مقطع يحتفظ بموضعه على الخط الزمني.
قبل أن تنزل JSON، اعرف ما سيغيب عن ASS: محتوى الصيغة. الأداة تعرض ذلك لكل ملف على حدة.
أفلت موسما كاملا: الطابور يحول ملفات ASS إلى JSON واحدا بعد آخر. المعالجة محلية بالكامل. هكذا تبقى ملفات ASS صالحة للسرية حتى وهي تصبح JSON. الحقول الفارغة تنظف أثناء القراءة. والمسافات الزائدة كذلك.
أمثلة
ملف ASS نموذجي محول إلى JSON
الإدخال
[Script Info]
Title: Example
ScriptType: v4.00+
WrapStyle: 0
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1
Style: Title,Arial,36,&H0000FFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:04.00,Default,,0,0,0,,Hello there.
Dialogue: 0,0:00:05.00,0:00:08.50,Default,,0,0,0,,{\i1}Italic{\i0} and {\b1}bold{\b0} text.
Dialogue: 0,0:00:09.00,0:00:12.00,Title,,0,0,0,,{\pos(320,240)}Positioned
Dialogue: 0,0:00:13.00,0:00:16.00,Default,,0,0,0,,{\k50}ka{\k30}ra{\k20}o{\k10}ke
Dialogue: 0,0:00:17.00,0:00:20.00,Default,,0,0,0,,Line one\NLine two
Dialogue: 1,0:00:21.00,0:00:24.00,Default,,0,0,0,,{\an7}Top left
الناتج
{
"version": 1,
"title": "Example",
"styles": {
"Default": {
"name": "Default",
"Name": "Default",
"Fontname": "Arial",
"Fontsize": "20",
"PrimaryColour": "&H00FFFFFF",
"SecondaryColour": "&H000000FF",
"OutlineColour": "&H00000000",
"BackColour": "&H00000000",
"Bold": "0",
"Italic": "0",
"Underline": "0",
"StrikeOut": "0",
"ScaleX": "100",
"ScaleY": "100",
"Spacing": "0",
"Angle": "0",
"BorderStyle": "1",
"Outline": "2",
"Shadow": "2",
"Alignment": "2",
"MarginL": "10",
"MarginR": "10",
"MarginV": "10",
"Encoding": "1",
"fontFamily": "Arial",
"fontSize": 20,
"primaryColor": "#ffffff",
"outlineColor": "#000000",
"bold": false,
"italic": false
},
"Title": {
"name": "Title",
"Name": "Title",
"Fontname": "Arial",
"Fontsize": "36",
"PrimaryColour": "&H0000FFFF",
"SecondaryColour": "&H000000FF",
"OutlineColour": "&H00000000",
"BackColour": "&H00000000",
"Bold": "-1",
"Italic": "0",
"Underline": "0",
"StrikeOut": "0",
"ScaleX": "100",
"ScaleY": "100",
"Spacing": "0",
"Angle": "0",
"BorderStyle": "1",
"Outline": "2",
"Shadow": "2",
"Alignment": "2",
"MarginL": "10",
"MarginR": "10",
"MarginV": "10",
"Encoding": "1",
"fontFamily": "Arial",
"fontSize": 36,
"primaryColor": "#ffff00",
"outlineColor": "#000000",
"bold": true,
"italic": false
}
},
"cues": [
{
"start": 1000,
"end": 4000,
"lines": [
"Hello there."
],
"style": "Default"
},
{
"start": 5000,
"end": 8500,
"lines": [
{
"text": "Italic and bold text.",
"tags": [
{
"kind": "italic",
"start": 0,
"end": 6
},
{
"kind": "bold",
"start": 11,
"end": 15
}
]
}
],
"style": "Default"
},
{
"start": 9000,
"end": 12000,
"lines": [
"Positioned"
],
"style": "Title",
"position": {
"x": 320,
"y": 240
}
},
{
"start": 13000,
"end": 16000,
"lines": [
{
"text": "karaoke",
"tags": [
{
"kind": "karaoke",
"start": 0,
"end": 2,
"value": "50"
},
{
"kind": "karaoke",
"start": 2,
"end": 4,
"value": "30"
},
{
"kind": "karaoke",
"start": 4,
"end": 5,
"value": "20"
},
{
"kind": "karaoke",
"start": 5,
"end": 7,
"value": "10"
}
]
}
],
"style": "Default"
},
{
"start": 17000,
"end": 20000,
"lines": [
"Line one",
"Line two"
],
"style": "Default"
},
{
"start": 21000,
"end": 24000,
"lines": [
"Top left"
],
"style": "Default"
}
]
}
المقارنة تظهر محتوى الصيغة؛ وما عدا ذلك يطابق سطرا بسطر بين ASS وJSON.
ملف ASS غير مرتب يخرج بصيغة JSON
الإدخال
[Script Info]
; 一份真实的脏文件:BOM + CRLF + 认不出的覆写码 + Comment + 坏时间码
Title: Dirty sample
ScriptType: v4.00+
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,1,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1
[Fonts]
fontname: Arial
!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Comment: 0,0:00:00.00,0:00:01.00,Default,,0,0,0,,这是一条注释,不该变成字幕
Dialogue: 0,0:00:01.00,0:00:04.00,Default,,0,0,0,,Hello, world
Dialogue: 0,0:00:05.00,0:00:08.00,Default,,0,0,0,,{\fad(300,300)}Unmodelled override
Dialogue: 0,0:00:09.00,0:00:12.00,Default,,0,0,0,,{\an7\pos(320,240)}Both, wrong order
Dialogue: 0,0:00:13.00,0:00:16.5,Default,,0,0,0,,One decimal centisecond
Dialogue: 0,0:00:17.00,0:00:20.00,Default,,0,0,0,,Soft\nbreak
Dialogue: 0,0:00:xx.00,0:00:24.00,Default,,0,0,0,,Broken timecodeالناتج
{
"version": 1,
"title": "Dirty sample",
"styles": {
"Default": {
"name": "Default",
"Name": "Default",
"Fontname": "Arial",
"Fontsize": "20",
"PrimaryColour": "&H00FFFFFF",
"SecondaryColour": "&H000000FF",
"OutlineColour": "&H00000000",
"BackColour": "&H00000000",
"Bold": "1",
"Italic": "0",
"Underline": "0",
"StrikeOut": "0",
"ScaleX": "100",
"ScaleY": "100",
"Spacing": "0",
"Angle": "0",
"BorderStyle": "1",
"Outline": "2",
"Shadow": "2",
"Alignment": "2",
"MarginL": "10",
"MarginR": "10",
"MarginV": "10",
"Encoding": "1",
"fontFamily": "Arial",
"fontSize": 20,
"primaryColor": "#ffffff",
"outlineColor": "#000000",
"bold": true,
"italic": false
}
},
"cues": [
{
"start": 1000,
"end": 4000,
"lines": [
"Hello, world"
],
"style": "Default"
},
{
"start": 5000,
"end": 8000,
"lines": [
"{\\fad(300,300)}Unmodelled override"
],
"style": "Default"
},
{
"start": 9000,
"end": 12000,
"lines": [
"Both, wrong order"
],
"style": "Default",
"position": {
"x": 320,
"y": 240
}
},
{
"start": 13000,
"end": 16500,
"lines": [
"One decimal centisecond"
],
"style": "Default"
},
{
"start": 17000,
"end": 20000,
"lines": [
"Soft",
"break"
],
"style": "Default"
}
]
}
الملفات الحقيقية تصل هكذا: نهايات أسطر مختلطة. وفراغات وحقول فارغة. المحول يصلح أو يسجل، ولا يخفي شيئا عند إنتاج JSON من ASS.
الأسئلة الشائعة
كيف يحسب JSON بداية كل مقطع ونهايته بعد قراءة ASS؟
يكتب الوقت في ASS على صورة 0:00:01.25، وفي JSON على صورة 1250. كل رقم زمني يصل إلى JSON بقيمته الأصلية من ASS.
ما ثمن التحويل من ASS إلى JSON؟
قائمة ما يفقده JSON من ASS: محتوى الصيغة. لا شيء منها يخفى. ولا وسم مزيف يدخل JSON.
هل يصل النص من ASS إلى JSON بلا تغيير؟
النص ينتقل من ASS إلى JSON كما هو، وما يعرفه JSON من وسوم يبقى. أما المجهول فيكتب نصا في تقرير JSON. أو يسجل، ولا يحول إلى وسم مخترع.
هل يمكن إرجاع JSON إلى ASS دون فقدان؟
ليس كاملا. إرجاع JSON إلى ASS يسقط الدقة الزمنية، وهي قائمة تخص ملفات JSON الحقيقية. النسخة الأصلية من ASS تبقى المرجع الآمن.
هل تبقى ملفات ASS على جهازي حتى تنزيل JSON؟
نعم. لا حساب ولا رفع؛ ASS يبقى في ذاكرة التبويب حتى تنزل JSON أو تغلق الصفحة.
كيف تعمل الدفعة الكبيرة من ASS إلى JSON؟
نعم، عشرات ملفات ASS في جلسة واحدة تخرج بصيغة JSON. المعالجة متسلسلة. لكل ملف سطر حالة وتقرير فقدان.
كيف أحتفظ بما يفقده JSON من ملف ASS؟
احفظ ملف ASS الأصلي؛ هو النسخة الكاملة. JSON ناتج عملي من ASS للعرض أو المشاركة، وليس أرشيفا كاملا.