Usuń tagi override z ASS
Albo wklej tekst napisów
Opcje
Jedno pole, siedem wyborów, a każdy wybór ma własną stronę. Kursywa, pogrubienie, podkreślenie i kolor usuwają ten jeden rodzaj zakresu i zostawiają resztę formatowania wiersza w spokoju. Opcja Wszystko usuwa każdy zakres, który narzędzie modeluje — tamte cztery plus czasy karaoke — a wszystko inne w tekście zostawia nietknięte. Opcja HTML robi to samo, a potem jeszcze wymiata znaczniki w nawiasach kątowych, które zostały w tekście, bo narzędzie ich nie modeluje, takie jak znaczniki mówcy <v Bob> i <c.className> w VTT. Opcja ASS robi to samo zamiast tego dla bloków nadpisań, czyszcząc kody {...}, których nie rozpoznano przy odczycie, takie jak {\fad(500,500)}. Ta strona wypełnia pole wyborem, który nazywa jej tytuł, i nie wymienia żadnego innego.
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ść.
Ta strona czyści kody override z pliku ASS albo SSA: zakresy stylu, taktowanie karaoke, pozostałe bloki efektów i pozycjonowanie. Wraca czysty tekst z czasem – słowa, czasy bloków i własna struktura pliku, a wiersze stoją tam, gdzie stawia je ich nazwany styl.
ASS to format, który potrafi powiedzieć najwięcej, a większość tego, co potrafi, jest zapisana jako kody override w tekście wiersza. Część z tych kodów to styl, który narzędzie modeluje – `{\i1}`, `{\b1}`, `{\c&H...&}`, `{\k50}` – a część to efekty, których nie modeluje: przenikania, przesunięcia, skalowanie, rozmycia, wszystkie zapisane jako bloki w tym samym kształcie. Te nieznane bloki są celowo zostawiane w tekście podczas czytania pliku, bo zjadanie znaczników, których nie da się odczytać, byłoby utratą danych. Ta strona je zmiata.
Pozycjonowanie też jest tu czyszczone i to jedyna rzecz, której ta strona nie sprowadza do usunięcia znaczników: miejsce wiersza jest właściwością całego zdarzenia, a nie zakresu nad tekstem, więc wiersz z pozycją wraca tam, gdzie umieszcza go jego nazwany styl. To właśnie czyni wynik naprawdę czystym. Sama tabela stylów zostaje w spokoju – blok, którego styl jest pogrubiony, nadal wygląda pogrubiony, bo pogrubienie należy do stylu, a nie do tekstu.
Jeden kod zostaje i strona mówi o tym, zamiast pozwolić ci go znaleźć: wyrównanie dziewięciokomorowe, takie jak `{\an8}`, jest zachowywane zgodnie z zapisem. Koduje położenie pionowe równie dobrze jak poziome, a własne pojęcie wyrównania w narzędziu obejmuje tylko lewo, środek i prawo, więc nie ma gdzie zachować drugiej połowy. Zrozumienie go do połowy dałoby plik, który źle wraca z konwersji. Nic nie jest wysyłane; plik, w którym nie ma czego usuwać, wraca co do bajtu.
Przykłady
Styl i pozostały blok efektu
Wejście
[Script Info]
Title: fade
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,0,0,0,0,100,100,0,0,1,1,1,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:02.00,Default,,0,0,0,,{\fad(500,500)}{\i1}hello{\i0}
Wynik
[Script Info]
Title: fade
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,0,0,0,0,100,100,0,0,1,1,1,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:02.00,Default,,0,0,0,,hello
`{\fad(500,500)}` prosi odtwarzacz, żeby wpuszczał i wypuszczał wiersz po pół sekundy w każdą stronę. Narzędzie nigdy go nie modelowało, więc siedział w tekście, dopóki ten przebieg go nie zmiótł – a para kursywy obok znika tak samo, zostawiając sam wiersz. Nic w wyniku nie zapisuje, że to przenikanie kiedykolwiek istniało.
Wiersz z pozycją
Wejście
[Script Info]
Title: position
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,0,0,0,0,100,100,0,0,1,1,1,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:02.00,Default,,0,0,0,,{\pos(100,200)}hello there
Wynik
[Script Info]
Title: position
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,0,0,0,0,100,100,0,0,1,1,1,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:02.00,Default,,0,0,0,,hello there
Wiersz nie dostaje już informacji, gdzie ma stanąć, więc wraca tam, gdzie umieszcza go styl nazwany w zdarzeniu. To jedyna część przebiegu, która nie jest po prostu usuwaniem znaczników, i dlatego ta strona jest właściwa dla pliku, który ma się stać czysty, a nie tylko odchudzony z wyróżnień.
Wyrównanie dziewięciokomorowe, które zostaje
Wejście
[Script Info]
Title: alignment
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,0,0,0,0,100,100,0,0,1,1,1,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:02.00,Default,,0,0,0,,{\an8}hello there
Wynik
[Script Info]
Title: alignment
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,0,0,0,0,100,100,0,0,1,1,1,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:02.00,Default,,0,0,0,,{\an8}hello there
Ten przykład wraca niezmieniony i to nie jest przeoczenie. `{\an8}` mówi jednocześnie „góra” i „środek”, a wyrównanie w narzędziu obejmuje tylko lewo, środek i prawo – więc pionowa połowa nie ma gdzie mieszkać i znacznik jest zachowany w całości, zamiast być zrozumianym do połowy. Kod pozycji jest czyszczony, ten nie.
Częste pytania
Dlaczego znacznik wyrównania dziewięciokomorowego przeżywa tę stronę?
Bo narzędzie nie potrafi go dokładnie przedstawić. Wyrównanie takie jak `{\an8}` nazywa jedną z dziewięciu komórek, co koduje jednocześnie położenie poziome i pionowe, a własne wyrównanie narzędzia ma tylko lewo, środek i prawo. Zapisanie połowy poziomej i odrzucenie drugiej dałoby plik, który źle wraca z konwersji, więc znacznik jest zachowany dosłownie. Kod pozycji jest czyszczony, kod wyrównania nie, a strona ci o tym mówi, zamiast zostawiać to do zauważenia.
Czym jest blok override i dlaczego siedzi w tekście?
To zestaw instrukcji zapisanych wewnątrz tekstu wiersza, między nawiasami klamrowymi, które każą odtwarzaczowi coś z tym wierszem zrobić: zmienić styl, animować, przeniknąć, przesunąć. Narzędzie modeluje wspólny podzbiór stylu i czyta go do własnej struktury, ale resztę zostawia dokładnie tam, gdzie znalazło – przenikania, przesunięcia, rozmycia i tym podobne są zachowane dosłownie, zamiast odrzucone, bo odrzucenie znaczników, których czytnik nie rozumie, byłoby cichą utratą danych. Ta strona jest miejscem, w którym wreszcie znikają.
Czy czyszczenie kodów override zmienia czasy albo tekst?
Nie. Słowa wracają co do bajtu, każdy blok zachowuje początek i koniec co do milisekundy, a kolejność bloków jest własna pliku. Podziały wierszy w bloku są częścią bloku, a nie jego stylu, więc zostają tam, gdzie położył je plik. Zmieniają się instrukcje wokół słów, a w niektórych przypadkach miejsce wiersza na ekranie.
Czy wynik nadal będzie odtwarzał się poprawnie po usunięciu kodów?
Tak, i przewidywalniej niż przedtem. Kod override, którego odtwarzacz nie rozumie, jest w najlepszym razie ignorowany, a w najgorszym źle parsowany, i różne odtwarzacze nie zgadzają się zwłaszcza co do kodów efektów. Czysty tekst z czasem nie ma takiej dwuznaczności. Jeśli plik polegał na pozycjonowaniu, żeby położyć napis nad czymś konkretnym w kadrze, to umiejscowienie znika i wiersz stanie tam, gdzie stawia go styl.
Czy to usuwa też nazwane style z tabeli stylów?
Nie – tabela stylów i styl, na który wskazuje każdy blok, zostają dokładnie takie, jakie były. Strona pracuje na kodach zapisanych wewnątrz tekstu wiersza, a blok, którego nazwany styl jest pogrubiony, nadal wygląda pogrubiony, bo pogrubienie pochodzi ze stylu, a nie z tekstu samego wiersza. Czyszczenie tabeli stylów to inna robota i nie ma na nią jeszcze strony.
Czy mogę użyć tej strony na pliku SRT, czy tylko na ASS i SSA?
Możesz wrzucić każdy format czytany przez ten serwis. Na pliku SRT albo WebVTT pierwsza połowa nadal robi swoje – zakresy stylu znikają – a zamiatanie po prostu nie znajduje nic, bo bloki w nawiasach klamrowych nie występują w tych formatach. Plik, który nie ma ani stylu, ani bloków klamrowych, wraca co do bajtu, co jest uczciwym wynikiem przebiegu bez pracy.