Przejdź do treści
fansuby

Jak wybrać napisy

Do jednego odcinka bywa kilka wersji od różnych osób. Napisy są robione pod konkretne wydanie wideo, więc ważne, żeby pasowały do Twojego pliku.

Serwer wybiera za Ciebie

Endpoint /api/v1/match przyjmuje nazwę pliku wideo i zwraca napisy od najlepiej pasujących. Z nazwy odczytuje tytuł, odcinek, grupę, rozdzielczość i źródło (WEB-DL, BD), a potem punktuje każde napisy do tego odcinka. Pierwszy wynik to najlepszy wybór, a pole score pokazuje, ile punktów dostał.

+10
Autor podał nazwę pliku wideo (releaseFilename) i jest taka sama jak Twoja.
+4 lub +3
Ta sama grupa wydania. Trzy punkty, gdy autor wymienił ją jako „pasuje też do” (alsoCompatible).
+3
Ta sama rozdzielczość.
+2
To samo źródło (np. WEB-DL).
+3 lub −3
Długość wideo różni się o mniej niż 3 sekundy (plus) albo o ponad 30 sekund (minus). Wymaga parametru duration.
+1
Preferowany format, domyślnie ASS.

Remisy rozstrzyga liczba pobrań, a potem nowsze wgranie.

Dostrój wybór

duration to długość wideo w milisekundach. Znasz ją z odtwarzacza lub z ffprobe, a dzięki niej wygrywają napisy pod takie samo wydanie. format=srt zamienia preferencję na SRT (dobre, gdy klient wypala ASS w obrazie). Gdy nazwa pliku jest nietypowa, dodaj anilistId i episode.

Terminal
curl -G -H "Authorization: Bearer $FANSUBY_KEY" \
  --data-urlencode "filename=[SubsPlease] Sousou no Frieren - 05 (1080p).mkv" \
  -d duration=1421000 -d format=srt \
  "https://fansuby.cc/api/v1/match"

Gdy napisy się rozjeżdżają

  • Spróbuj drugiego wyniku z listy. Pozycje poniżej pierwszej są dobrymi zapasowymi kandydatami, zwłaszcza z tej samej grupy co wideo.
  • Podaj duration, żeby serwer odrzucił napisy do wydania o innej długości.
  • Stałe przesunięcie poprawisz w odtwarzaczu. Przy dużej różnicy cięć potrzebne są napisy do tego wydania.

Wybór na własną rękę

Jeśli wolisz własną logikę, użyj /api/v1/subtitles i porównaj pola sam. Oto, co oznaczają.

releaseGroup, releaseSource, resolution
Wydanie, pod które robiono napisy. Najlepiej, żeby grupa, źródło i rozdzielczość zgadzały się z Twoim plikiem.
releaseFilename
Nazwa pliku wideo, do którego dopasowano napisy (autor nie zawsze ją podaje).
alsoCompatible
Inne wydania z tym samym timingiem, wymienione przez autora.
videoDurationMs
Długość wideo, pod które zrobiono napisy. Różnica rzędu kilku sekund to sygnał rozjazdu.
format
ass trzyma style i efekty, srt to sam tekst.
hasTypesetting, hasKaraoke
Napisy zawierają typesetting (znaki, szyldy) lub karaoke.
version
Numer wersji. Lista zwraca aktualną, starszą pobierzesz parametrem v=N.

Listę zawęzisz w zapytaniu filtrami resolution, source, group i format:

Terminal
curl -H "Authorization: Bearer $FANSUBY_KEY" \
  "https://fansuby.cc/api/v1/subtitles?anilistId=154587&episode=5&resolution=1080p&group=SubsPlease"

A tak wygląda uproszczone punktowanie po stronie klienta:

Python
import re


def pick(items, filename):
    """Najlepsze napisy dla pliku wideo o tej nazwie."""
    resolution = re.search(r"\b(\d{3,4}p)\b", filename)
    group = re.match(r"\[([^\]]+)\]", filename)

    def score(s):
        return (
            (4 if group and s["releaseGroup"] == group[1] else 0)
            + (3 if resolution and s["resolution"] == resolution[1] else 0)
            + (1 if s["format"] == "ass" else 0)
        )

    return max(items, key=score)

Skrypty z poradników używają /match, więc nie potrzebują tego kodu. Zaczniesz od napisów do jednego pliku.

↑↓ wybórEnter otwórz