Przejdź do treści
SubtitleMatrix

Synchronizacja napisów z dźwiękiem

Napisy z mediówDopasowanie do dźwięku

Pierwsze uruchomienie pobiera silnik wideo — około 31 MB, serwowany przez tę stronę i potem zapamiętany przez przeglądarkę. Służy wyłącznie do odczytania ścieżki audio; napisy są dopasowywane do samego dźwięku, bez modelu mowy i bez wysyłania czegokolwiek.

Opcje

Jak daleko napisy mogą być od miejsca, w którym powinny być, w obu kierunkach. To ustawienie kosztu i ryzyka, a nie dokładności: szersze okno znajduje większe przesunięcie, ale daje też wyszukiwaniu więcej szans, by zatrzymać się na przypadkowej zbieżności, której wynik akurat wypadł dobrze. Przesunięcie większe niż około minuta nie pochodzi z przycięcia ani z logo — tyle zwykle oznacza inną wersję montażową filmu albo niezgodność liczby klatek, którą ta strona rozwiązuje osobno. Wybierz najmniejsze okno, które obejmuje twoje przypuszczenie.

Ta strona naprawia napisy, które są w dobrej kolejności, ale w złych czasach. Dajesz jej dwie rzeczy — plik z napisami i wideo albo audio, do którego należą — a ona ustala, jak daleko tekst się rozjechał, i zapisuje plik ponownie z każdym blokiem przesuniętym. Rozjazd kilku sekund bierze się z cięć i logo; rozjazd rosnący przez film bierze się z niezgodności liczby klatek, gdzie materiał 23,976 fps połączono z napisami ustawionymi na 25 fps i błąd wynosi już półtorej minuty pod koniec pierwszej godziny.

Pomiar jest wykonywany z samego audio. Strona wyodrębnia ścieżkę mono, składa ją w dwudziestomilisekundowe ramki głośności i oznacza, które ramki zawierają mowę. Potem zadaje jedno pytanie w kółko: przy tym przesunięciu i tej zmianie tempa, ile tekstu napisów trafia na mowę, a nie na ciszę? Odpowiedź jest punktowana dla każdego bloku i uśredniana, a wygrywająca para jest stosowana. Rozpoznawanie mowy nie bierze w tym udziału, dlatego działa w kilka sekund i dlatego działa, gdy napisy są w języku, dla którego nie masz modelu.

Ponieważ wynik jest pomiarem, a nie gwarancją, strona jest zbudowana tak, żeby nic nie robić, gdy pomiar jest słaby. Pięć bloków lub mniej, ścieżka audio bez wykrywalnej mowy, najlepszy wynik, który nadal wypada głównie na ciszy, albo dwa bardzo różne wyrównania punktujące podobnie — każdy z tych przypadków kończy się raportem i brakiem przepisanego pliku. Cicha porażka jest tutaj znacznie lepsza niż pewna siebie: napisy przesunięte o pięć sekund wyglądają niechlujnie, ale napisy przesunięte o pięć sekund przez narzędzie, które twierdziło, że się udało, są trudne do zauważenia i trudne do wyjaśnienia.

Gdy wyrównanie jest dobre, dostajesz dwa pliki, bo odpowiadają na różne pytania. Poprawione napisy zachowują format, w którym przyszły, z nazwą film.synced.srt albo z takim rozszerzeniem, jakie było, gotowe do odtwarzania. Raport to mały plik tekstowy z przesunięciem w milisekundach, faktycznie zastosowanym współczynnikiem, wynikiem, pewnością i jednym wierszem mówiącym, czy plik został w ogóle tknięty. Oba wychodzą z tego samego uruchomienia, więc partia odcinków daje dopasowaną parę dla każdego z nich.

Praca jest lokalna. Audio jest dekodowane przez ffmpeg skompilowany do WebAssembly, pobierany raz z tej witryny i buforowany potem; napisy są parsowane w karcie. Nic o twoim filmie ani napisach nie jest nigdzie wysyłane — nie ma kroku wysyłania do pominięcia, co ma znaczenie dla materiału, który nie może opuścić komputera.

Częste pytania

Czym różni się zmierzona korekta w narzędziu do synchronizacji od stałego przesunięcia wpisywanego na stronie przesuwania?

Strona przesuwania stosuje liczbę, którą już znasz, więc pozostaje poprawna niezależnie od tego, czy audio się zgadza. Ta strona zaczyna z przeciwnej strony: zakłada, że nie znasz liczby, czyta aktywność mowy z audio i rozwiązuje przesunięcie oraz zmianę tempa razem. Dlatego potrafi naprawić problem liczby klatek, którego żadne pojedyncze przesunięcie nie wyrazi — przy 25 wobec 23,976 błąd wynosi zero na początku i rośnie o około 3,6 sekundy na godzinę, więc przesunięcie naprawiające początek psuje koniec.

Dlaczego synchronizacja napisów czasem nie zapisuje poprawionego pliku?

Bo błędną korektę trudniej wykryć niż brakującą. Wyszukiwanie raportuje cztery rzeczy: ile bloków miało do dyspozycji, czy audio zawierało mowę, jaka część czasu napisów trafiła na mowę i o ile zwycięzca był lepszy od najlepszej naprawdę innej alternatywy. Jeśli którykolwiek z tych elementów jest słaby, uruchomienie daje tylko raport, którego wiersz stanu mówi not-found wraz z powodem. Niczego nie tracisz — oryginalny plik pozostaje nietknięty — i dostajesz liczbę, którą możesz sprawdzić przed jakąkolwiek ręczną pracą.

Co oznacza współczynnik w raporcie synchronizacji przy niezgodności 23,976 i 25 fps?

Czasy bloków są mnożone przez współczynnik, a potem przesuwane o przesunięcie, więc współczynnik 1,0427 oznacza, że napisy ustawiono dla szybszej podstawy klatek i każdy blok trzeba rozciągnąć później. Strona próbuje obu kierunków każdej typowej pary, bo to, w którą stronę to czytać, zależy od tego, który plik masz: 1,0427 i 0,9590 to ta sama niezgodność widziana z obu końców. Jeśli raportowany współczynnik wynosi 1,000000, a przesunięcie jest mniejsze niż klatka, plik już się zgadza i zostaje w spokoju.

Czy synchronizacja napisów zachowa styl i pozycję, czy tylko czasy?

Zmieniają się czasy i nic więcej. Napisy są parsowane do tej samej reprezentacji wewnętrznej, której używa każda inna strona na tej witrynie, start i koniec każdego bloku są przepisywane, a potem plik jest serializowany z powrotem do formatu, w którym przyszedł. Styl ASS, pozycjonowanie i znaczniki w linii przeżywają; przeżywa też własna struktura pliku, dlatego .ass na wejściu daje .ass na wyjściu, a nie spłaszczony .srt. Jedynym widocznym wyjątkiem jest blok ściśnięty przez duży współczynnik do mniej niż milisekundy, który jest trzymany na jednej milisekundzie i policzony na liście strat.

Czy synchronizacja napisów działa, gdy napisy są w innym języku niż audio?

Tak, i na tym polega mierzenie głośności zamiast rozpoznawania słów. Aktywność mowy jest kształtem — zdanie to wybuch energii, po którym następuje przerwa — a ten kształt jest taki sam niezależnie od tego, czy głos mówi po niemiecku, czy po hiszpańsku. Niemiecki dubbing pod hiszpańskimi napisami wyrówna się tak samo dobrze jak dopasowana para. Czego strona nie potrafi, to odróżnić linii dubbingowanej od oryginalnej, więc jeśli dubbing wstawia dodatkowy dialog, wyrównanie nadal znajduje ogólne dopasowanie, ale pojedyncze bloki we wstawionych fragmentach mogą trafić na złą linię.

Powiązane narzędzia