Transkodowanie
Jak TubePress konwertuje przesłane pliki na gotowe do sieci wersje za pomocą rozproszonych procesów FFmpeg.
Transkodowanie przekształca jeden przesłany plik w kilka przyjaznych dla sieci rendycji MP4, dzięki czemu widzowie otrzymują menu jakości, szybkie uruchamianie odtwarzania i spójny kodek bez względu na to, co zostało przesłane. Wbudowuje również opcjonalne dodatki — znaki wodne i klipy intro/outro — oraz buduje sprite'y podglądu przewijania używane przez odtwarzacz.
Wszystko jest konfigurowane w /admin/settings?tab=transcode, podzielone na pod-zakładki Formaty, Kolejka, Serwery, Znak wodny, Intro i Oś czasu. Transkodowanie może działać na samym serwerze CMS lub być rozdzielone do dedykowanych pracowników.
Dlaczego warto transkodować
Surowe przesłanie może mieć dowolną rozdzielczość, kodek lub kontener. Transkodowanie standaryzuje je w rendycje MP4/H.264 z +faststart, dzięki czemu odtwarzanie rozpoczyna się przed pełnym pobraniem pliku, i tworzy kilka rozmiarów (na przykład 720p i 480p), aby odtwarzacz mógł oferować selektor jakości i obsługiwać mniejsze pliki na mniejszych ekranach. Ten sam przebieg to miejsce, gdzie stosowane są znaki wodne i klipy pre/post-roll, ponieważ muszą być zakodowane w każdej rendycji.
Potok transkodowania
Gdy wideo jest gotowe do przetworzenia, TubePress dodaje do kolejki jedno zadanie na wyjście do tabeli transcode_jobs i przetwarza je kolejno:
- Kolejka. Tworzone jest zadanie dla szczebla źródłowego w pełnej rozdzielczości i dla każdego aktywnego formatu poniżej wysokości źródła, oraz zadanie osi czasu, jeśli podglądy są włączone.
- Odbiór. Pracownik — ten serwer lub zdalny — pobiera następne oczekujące zadanie, zaczynając od szczebla źródłowego.
- Pobieranie. Zdalny pracownik pobiera źródło przez HTTP (bezpośredni, uwierzytelniany kluczem URL, który omija podpisane linki mediów).
- Transkodowanie. FFmpeg koduje rendycję, stosując przycinanie, znak wodny i intro zgodnie z konfiguracją, raportując na bieżąco postęp procentowy.
- Przesłanie i wywołanie zwrotne. Wynik jest przesyłany z powrotem w częściach, a wywołanie zwrotne oznacza zadanie jako ukończone.
Status wideo śledzi ten proces: pozostaje przy przetwarzaniu podczas działania zadań, przechodzi do statusu opublikowanego gdy tylko kończy się szczebel źródłowy, i staje się błędem tylko wtedy, gdy szczebel źródłowy nie może być nigdy wyprodukowany. Niższe rendycje nadal są uzupełniane po opublikowaniu.
Rendycje i formaty
Formaty wyjściowe są w pełni edytowalne na zakładce Formaty i przechowywane w tabeli video_formats. Każdy format ma nazwę, przyrostek pliku (na przykład _720p.mp4), docelową rozdzielczość, surowe opcje FFmpeg, flagę zachowaj proporcje obrazu i przełącznik aktywności. Wbudowane wartości domyślne to:
| Format | Rozdzielczość |
|---|---|
| 720p | 1280 × 720 |
| 480p | 854 × 480 |
| 360p | 640 × 360 |
Dwie zasady utrzymują odpowiednią jakość. TubePress nigdy nie powiększa: każdy format przy lub powyżej wysokości źródła jest pomijany. I oryginalna najwyższa jakość jest zawsze zachowywana — jeśli aktywny jest znak wodny lub przycinanie, jest ponownie kodowane w rendycję źródłową w pełnej rozdzielczości (oznaczoną gwiazdką w kolejce), w przeciwnym razie plik źródłowy jest serwowany bez zmian. Opcja Przycinanie od początku (0–300 sekund) może usunąć pierwsze sekundy każdego wideo; podobnie jak znak wodny, jest stosowana do każdego formatu, w tym źródła.
Kolejka zadań
Zakładka Kolejka (/admin/settings?tab=transcode&sub=queue) grupuje zadania według wideo i pozwala filtrować według Wszystkich / Oczekujących / Przetwarzanych / Ukończonych / Nieudanych. Każde wideo pokazuje odznakę dla każdego szczebla — oznaczony gwiazdką szczebel źródłowy, następnie każda rozdzielczość, następnie TIMELINE — pokolorowane według statusu zadania:
Konsola dla każdego wideo (ikona terminala) transmituje na żywo listę zadań, pracownika obsługującego każdy szczebel, czas, który upłynął, i wszelkie komunikaty o błędach. Przycisk Ponów nieudane zadania ponownie dodaje do kolejki wszystko, co jest aktualnie nieudane, jednym kliknięciem.
Zdalne serwery transkodowania
Transkodowanie jest obciążające dla CPU, dlatego można je przenieść z serwera WWW. Na zakładce Serwery, Ten serwer ustawia, ile zadań FFmpeg działa lokalnie jednocześnie (1–4, lub 0, aby używać tylko zdalnych pracowników) i pozwala nadpisać ścieżkę FFmpeg. Poniżej rejestrujesz zdalnych pracowników; zadania są automatycznie dystrybuowane do najmniej obciążonego, a każdy ma limit maksymalnych równoczesnych zadań (dobra zasada to jedno zadanie na dwa rdzenie CPU).
- Dodaj serwer. Kliknij Dodaj serwer, nadaj mu nazwę i URL taki jak
http://YOUR-IP:8090, i zapisz. Klucz API i polecenie startowe są wyświetlane natychmiast. - Zainstaluj FFmpeg + PHP. Na maszynie pracowniczej uruchom
sudo apt install ffmpeg php-cli php-curl. - Wdróż pracownika. Pobierz
transcode-worker.php(z/api/transcode-worker-downloadlub tymczasowego linkuwget), prześlij go i otwórz port za pomocąsudo ufw allow 8090/tcp. - Uruchom go. Uruchom pracownika z kluczem:
php transcode-worker.php --port=8090 --key=YOUR_API_KEY- Weryfikuj. Kliknij Sprawdź; sprawny pracownik raportuje Online ze swoim wykrytym koderem i bieżącym zużyciem CPU/GPU.
Akceleracja GPU (NVIDIA, AMD, Intel lub Apple) jest wykrywana i używana automatycznie. Pracownik pobiera źródło, transkoduje, raportuje postęp i przesyła wyniki w częściach z powrotem do CMS — przesyłanie fragmentowane utrzymuje każde żądanie poniżej limitu 100 MB Cloudflare. W przypadku hostów bez nadzoru, przewodnik konfiguracji zawiera jednostkę systemd, dzięki której pracownik restartuje się po uruchomieniu systemu.
Monitorowanie i ponawianie
System jest zbudowany tak, aby wideo nigdy nie było po cichu porzucane. Nieudane kodowanie jest automatycznie ponawiane ze zwiększającym się opóźnieniem — od około pół minuty do kilku godzin — ponieważ większość awarii jest przejściowa (wolny lub niestabilny CDN). Ponadto, zadanie odzyskiwania co godzinę ponownie kolejkuje każde zadanie nadal oznaczone jako nieudane, więc system nadal próbuje, aż rendycja zostanie ukończona. Żadne ręczne kliknięcie nie jest wymagane, chociaż przycisk Ponów nieudane zadania jest dostępny, jeśli chcesz wymusić akcję.
Jeśli szczebel źródłowy trwale się nie powiedzie, zależne zadania pod-formatów są anulowane (nie mogą kontynuować bez źródła) i wideo jest oznaczane jako błąd; odzyskiwanie nadal będzie próbować je przywrócić. Gdy szczebel źródłowy w końcu się ukończy, wideo zostanie automatycznie opublikowane.
Wymagania
FFmpeg musi być dostępny wszędzie tam, gdzie działa transkodowanie:
- Przetwarzanie lokalne: zainstaluj FFmpeg na serwerze CMS (
sudo apt install ffmpeg). Strona Transkodowanie pokazuje wykrytą wersję po jego zainstalowaniu. - Przetwarzanie zdalne: każdy pracownik potrzebuje FFmpeg oraz
php-cliiphp-curl, co najmniej 2 rdzeni CPU i 2 GB RAM oraz otwartego portu pracownika.
Następne kroki
Nadal masz problem?
Otwórz zgłoszenie z poziomu panelu, a nasz zespół Ci pomoże.