x264: która -struga dla najlepszej jakości transmisji na żywo bez zwiększonej przepływności?

1

Próbuję przesyłać strumieniowo strzelankę FPS z OBS 20.0.1 przy możliwie najniższej przepływności, przy jednoczesnym zachowaniu najlepszej możliwej jakości (tj. Mniej blokowych pikseli).

Obawiam się, że więcej ramek referencyjnych zwiększy moją przepływność. Więc skoro jest to przesyłanie strumieniowe w dużym ruchu, czy powinienem używać -tune animationdo zwiększania odblokowywania? A może PSNRalbo SSIMbyć bardziej obiecujących kandydatów?

Czy istnieje lepszy / inny sposób sprawdzenia, która -tuneopcja jest najlepsza, niż wypróbowanie ich za pomocą strumieni testowych?

Czy są jeszcze jakieś opcje x264, z których korzystałby mój strumień, ale które nie są uwzględnione w OBS?

Moja konfiguracja OBS: Konfiguracja OBS

Mój sprzęt:

  • Procesor: Intel i7-4770k
  • Karta graficzna: Nvidia GTX780 Ti
  • RAM: 12 GB , 1600 MHz
Trr1ppy
źródło
twój link jest zepsuty. dlaczego nie postawić kodu w pytaniu? czy również przeczytałeś Przewodnik Streaming FFmpeg ?
flolilo
przeczytaj także ten post o trybach strojenia x264 .
flolilo
Przewodnik po streamingu FFmpegs mówi tylko: użycie -zero opóźnienie, a post trybów tuningu x264 nie jest wystarczająco głęboki, abym mógł podjąć świadomą decyzję, ale gdybym musiał odgadnąć najlepszy,
wybrałbym
Nie próbuję być niegrzeczny, ale skoro mówisz o świętym Graalu ( szybki enkoder, który potrzebuje tylko niewielkiej szybkości transmisji bitów, aby uzyskać wizualnie lepsze wyniki), nie sądzę, że rozumiesz znaczenie (lub jego brak) -tune-parametr w x264. Jeśli korzystanie z -tune PSNRniego doprowadziłoby do lepszych wyników przy mniejszej przepływności w krótszym czasie, pomyślałbym, że wszyscy by go wykorzystali (i promowali), zwłaszcza że mówimy o narzędziu open source, które jest dobrze udokumentowane i omówione.
flolilo
Myślę, że masz rację, po prostu miałem nadzieję, że będzie ekspert h264 z szeroką wiedzą na temat tego, jak parametry strojenia wpływają na algorytm kodowania. Myślę, że parametry strojenia nie są zbyt dobrze omawiane w przypadku streamingu, ale prawdopodobnie dlatego, że tak jak powiedziałeś „brak znaczenia”. To, na co powinienem spojrzeć, to to, co ludzie używają komputera strumieniowego do ich parametru strojenia, i odważę się powiedzieć, że będzie to parametr filmu -tune, ponieważ będą mieli wysokie szybkości transmisji, myślę, że w podsumowaniu dla niskich szybkości transmisji-animacja tuningu najlepiej będzie zmniejszyć blokowanie na strumieniach niskiej jakości
Trr1ppy 11.10.17

Odpowiedzi:

1

Próbuję przesyłać strumieniowo strzelankę FPS z OBS 20.0.1 przy możliwie najniższej przepływności, przy jednoczesnym zachowaniu najlepszej możliwej jakości (tj. Mniej blokowych pikseli).

Możesz to zrobić, ale zajmie to dużo czasu kodowania. Ponieważ streamujesz na żywo, zakładam, że potrzebujesz pojedynczego przejścia do kodowania, a najlepiej takiego, które jest szybkie, tzn. Maksymalizuje zasoby procesora. Dlatego powinieneś bawić się z ustawioną wstępnie szybkością procesora - wybierz najwyższą, którą możesz tolerować.

Niemożliwe jest jednoczesne zoptymalizowanie wszystkich tych parametrów (prędkość, jakość, przepływność), dlatego x264 (i inne kodery) oferują sposób wyboru ustawienia prędkości (np. Od ultrafastdo verysloww x264). Te ustawienia wstępne włączają / wyłączają niektóre opcje, które odpowiednio optymalizują jakość kompresji lub minimalizują czas kodowania.

Obawiam się, że więcej ramek referencyjnych zwiększy moją przepływność

Zasadniczo jest to prawda, ponieważ są one znacznie większe.

Więc skoro jest to streaming w szybkim ruchu, czy powinienem używać animacji -tune, aby przyspieszyć odblokowywanie? A może PSNR lub SSIM będą bardziej obiecującymi kandydatami?

Spójrz na ten inny post, w którym wyjaśniono tryby strojenia .

W przypadku konkretnego przypadku przesyłania strumieniowego na żywo z niskim opóźnieniem, z jednym przejściem kodowania, nie ma sensu używać film. Służy to do zachowania (ziarnistych) szczegółów.

Twoje obawy związane z blokadą przy niskiej przepływności są zrozumiałe, ale animationustawienie wstępne nie ma sensu w przypadku przesyłania strumieniowego na żywo, ponieważ zwiększyłoby to również liczbę ramek B, które i tak chcesz ustawić na 0 (lub niską liczbę), aby umożliwić szybkie kodowanie. Ramki B wymagają zakodowania przeszłych i przyszłych ramek, co oznacza, że ​​koder / dekoder musi przechowywać większy bufor, aby przechowywać te ramki. Im więcej ramek B, tym lepsza jakość kosztem czasu kodowania.

Te psnri ssimtryby nie są przydatne zarówno; są używane tylko podczas opracowywania / optymalizacji enkodera i mogą w rzeczywistości skutkować gorszą subiektywną jakością.

Być może zerolatencylepiej pasuje do twojego przypadku użycia?

Czy istnieje lepszy / inny sposób sprawdzenia, która opcja -tune jest najlepsza, niż wypróbowanie ich za pomocą strumieni testowych?

Teoretycznie możesz zakodować kilka oryginalnych strumieni, a następnie zakodować je przy użyciu różnych ustawień i uruchomić je za pomocą pełnego analizatora jakości wideo, takiego jak VQMT lub VMAF . To da ci wynik jakości kodowania. Ale wydaje mi się, że wizualna kontrola wyników jest również wystarczająca w twoim przypadku.

slhck
źródło
1
Och, i powinienem dodać, że forum OBS jest prawdopodobnie dobrym miejscem do zadawania pytań, ponieważ twoje pytania są bardzo specyficzne dla przesyłania strumieniowego wideo z gier, które jest rodzajem niszowej aplikacji.
slhck 11.10.17
Dziękujemy za bardzo pouczającą odpowiedź. W celu wyjaśnienia Jeśli zwiększę ramki B, koder będzie przetwarzał się do momentu, w którym nie będę mógł kodować w czasie rzeczywistym, a zmniejszanie ramek B przyspieszy kodowanie kosztem jakości ? Czy klatki kluczowe są również powiązane z ramkami B, klatki kluczowe wydają się określać częstotliwość ramek B? Chcę używać jak największej ilości zasobów komputera, pozostając przy kodowaniu w czasie rzeczywistym (oczywiście dlatego, że przesyłam strumieniowo).
Trr1ppy,
1) Tak, chociaż opóźnienie nie będzie zbyt duże. Im mniejszy odstęp między klatkami kluczowymi, tym mniejsze opóźnienie kodowania przy użyciu większej liczby ramek B. 2) Nie, interwał klatki kluczowej określa interwał między ramkami I. bframesUstawienie w x264 określa maksymalną liczbę ramek B w rzędu; jeśli nie używa ramek B, enkoder wypełni je ramkami P. Być może w twoim przypadku nie używaj więcej niż 1-2 klatek B (jeśli w ogóle) i staraj się skrócić interwał klatek kluczowych (przypuszczam, że: 3-4 sekundy?). Trudno podać dokładną odpowiedź, naprawdę musisz sprawdzić wynikową jakość.
slhck 12.10.17
-1

Ten tuneparametr nie ma dużego wpływu na jakość strumienia korelującego z brakiem dyskusji i / lub wzmianką o jego opcjach w przewodnikach. animationmoże być używany ze strumieniami o niskiej przepływności, aby zwiększyć Deblocking, i filmmoże być używany ze strumieniami o dużej przepływności, aby strumień był jak najwierniejszy w źródle. Chociaż nie jestem pewien, jak skuteczne jest odblokowywanie lub brak.

PSNRi SSIMsłużą do testowania i porównywania kontroli szybkości (CBR, ABR, VBR, CRF).

Trr1ppy
źródło