Przejdź do treści
SubtitleMatrix

Konwerter napisów MicroDVD na ASS

Konwersja formatówMicroDVD (SUB)
Albo wklej tekst napisów

Opcje

W jakiej liczbie klatek na sekundę liczone są czasy. Na stronach formatów tego wymaga MicroDVD, bo zapisuje czasy jako numery klatek. Na stronach poświęconych liczbie klatek jest to stawka, według której zgrany był plik — wersja, dla której powstały napisy — a drugie pole na stronie przyjmuje liczbę klatek wideo, z którym napisy będą używane. Najczęstsze wartości to 23,976, 24, 25, 29,97, 30, 50, 59,94 i 60. Pomyłka przesuwa całą oś czasu, a na stronach poświęconych liczbie klatek przesuwa ją o współczynnik, a nie o stałą wartość.

Co zmienia ta konwersja

2 rzeczy zostają pominięte albo wymagają decyzji

  • Liczba klatek

    źródło zapisuje czasy jako numery klatek — każdy znacznik czasu zależy od podanej liczby klatek na sekundę

  • Dokładność

    dokładność czasów — zegar wyniku jest grubszy, więc każdy znacznik czasu jest zaokrąglany do najbliższych 10 ms

Ta lista pochodzi z macierzy możliwości tych dwóch formatów, a nie z konkretnego wczytanego pliku. Konkretny plik może stracić więcej, jeśli używa cech, które format dopuszcza, ale macierz ich nie modeluje.

ASS przechowuje czas z dokładnością do setnej sekundy, a MicroDVD podaje numery klatek. Konwersja najpierw dzieli klatki przez liczbę klatek na sekundę, a potem zaokrągla wynik do 10 ms, bo takiej precyzji wymaga format docelowy.

Kolejność źródeł fps jest stała: pole na stronie, potem deklaracja w pierwszej linii, na końcu 25. Klatka 100 przy 25 fps daje cztery sekundy, więc zdarzenie dostaje zakres `0:00:04.00`–`0:00:06.00`. Pionowa kreska `|` staje się `N`, czyli twardym złamaniem wiersza w ASS.

Każdy napis trafia do sekcji `[Events]` jako `Dialogue` z warstwą, stylem `Default` i tekstem. Zaokrąglenie nie przesuwa żadnego bloku o więcej niż 5 ms, ale to jedyne miejsce, w którym konwersja przestaje być dokładna. Wszystko działa lokalnie.

Przykłady

Typowy plik MicroDVD po konwersji na ASS

Wejście

{1}{1}25
{100}{150}The quick brown fox jumps over the lazy dog.
{200}{260}Faster than|the last one.

Wynik

[Script Info]
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,0,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:04.00,0:00:06.00,Default,,0,0,0,,The quick brown fox jumps over the lazy dog.
Dialogue: 0,0:00:08.00,0:00:10.40,Default,,0,0,0,,Faster than\Nthe last one.

W tym wyniku giną liczba klatek i precyzja: ASS zapisuje setne sekundy, więc czasy z klatek zostały zaokrąglone.

Ta sama konwersja na nierównym pliku wejściowym

Wejście

{1}{1}23.976
{0100}{0150}Leading zeros in the frame numbers.
[INFORMATION]
{300}{340}An unrecognized line above was kept in place.
{400}{450}Trailing spaces are kept.   

Wynik

[Script Info]
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,0,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:04.00,0:00:06.00,Default,,0,0,0,,Leading zeros in the frame numbers.
Dialogue: 0,0:00:12.00,0:00:13.60,Default,,0,0,0,,An unrecognized line above was kept in place.
Dialogue: 0,0:00:16.00,0:00:18.00,Default,,0,0,0,,Trailing spaces are kept.   

Takie uszkodzenia ma wiele prawdziwych plików: mieszane końce wierszy, zbłąkane spacje, puste pola. Porównaj to z czystym przykładem powyżej, żeby zobaczyć, co parser wybacza.

Częste pytania

Który fps jest brany pod uwagę przy konwersji MicroDVD na ASS?

Najpierw wartość z pola na stronie, potem deklaracja w pierwszej linii pliku, a na końcu 25. ASS sam nie przechowuje liczby klatek, więc musi ona zostać rozstrzygnięta przed przeliczeniem. Pliki `.sub` często powstawały przy założeniu PAL, więc deklaracja 25 nie jest dowodem, że wideo naprawdę miało 25 fps.

Dlaczego znaczniki czasu zmieniają się przy przejściu z MicroDVD do ASS?

ASS zapisuje czas jako `0:00:04.13`, czyli z dokładnością do setnej sekundy, podczas gdy MicroDVD liczy klatki. Po przeliczeniu każdy moment jest zaokrąglany do najbliższych 10 ms i może przesunąć się o maksymalnie 5 ms. Nic nie jest rozciągane ani przestawiane, ale przy dopasowywaniu do innego pliku właśnie tu kończy się dokładność.

Jak wygląda ASS powstały z pliku MicroDVD?

Ma sekcje `[Script Info]`, `[V4+ Styles]` i `[Events]`, a każdy napis jest linią `Dialogue` z polem warstwy, której SRT nie posiada. Kolejność zdarzeń odpowiada kolejności bloków źródłowych. Numerów bloków nie ma — rolę porządkowania przejmują czasy.

Jak dwuwierszowy blok MicroDVD wychodzi w ASS?

Jako jedno zdarzenie `Dialogue` z dwiema liniami rozdzielonymi `N`. Twarde złamanie wiersza jest natywnym sposobem ASS na pokazanie dwóch linii w jednym napisie. Para pozostaje więc razem, a odtwarzacz wyświetla obie części jednocześnie.

Czy kolejność bloków MicroDVD zostaje zachowana w ASS?

Tak, po uporządkowaniu rosnąco według czasu rozpoczęcia. ASS czyta zdarzenia w kolejności zapisu, a odtwarzacze oczekują chronologii, więc źródło z klatkami poza porządkiem zostanie naprawione. Zmiana dotyczy struktury pliku, nie treści ani wartości momentów.

Co tracę, wracając z ASS do MicroDVD?

Style, pozycjonowanie, karaoke, liczbę klatek i konstrukcje spoza modelu bloków, takie jak `[Script Info]`, osadzone fonty i zdarzenia `Comment:`. MicroDVD nie potrafi ich zapisać, a do odtworzenia czasów potrzebuje fps, którego ASS nie przechowuje. Zostaje tekst i momenty do ponownego przeliczenia.

Jakie kodowanie ma ASS powstały z MicroDVD?

Wynik jest w UTF-8, z końcami wierszy LF i bez BOM. Plik źródłowy w UTF-16 lub w kodowaniu jednobajtowym Windows jest dekodowany po drodze, a panel wyniku sygnalizuje, że to się stało. Kodowanie wejścia nie przechodzi do wyniku.

Powiązane narzędzia