Kiedy używasz trybu jednoprzebiegowego z określonym rozmiarem VBV, libx264 początkowo „worek z piaskiem” bitrate, prawdopodobnie z powodu braku dowodów (a może nawet błędu). ( To ironiczne następstwo tego pytania, które dotyczyło zbyt wysokich początkowych przepływności przy kodowaniu jednoprzebiegowym bez specyfikacji VBV )
Aby uzyskać więcej informacji, zobacz wykresy szybkości transmisji bitów u dołu: zwróć uwagę na oryginalny spadek, a następnie overcorrection („Hej, mam trochę bitów!”) Przed normalizacją. Zauważ, że jest to poprawione w rozwiązaniu dwuprzebiegowym. Brak początkowej ramki I na tych dwóch wykresach jest prawdopodobnie błędem narzędzia (wartość PTS początkowej ramki I wynosi 0,15 sekundy).
Ten efekt zapobiega równoległemu przetwarzaniu długiego zasobu w „dzieleniu, kodowaniu i ponownym składaniu”, ponieważ na początku każdego segmentu uzyskuje się rytm jakości.
Można to naprawić za pomocą kodowania dwuprzebiegowego, co jest niedopuszczalnym rozwiązaniem dla strumieni na żywo (chociaż w przypadku paralelizacji można by zapłacić koszt kodowania dwuprzebiegowego).
Są dwa rozwiązania, na które chciałbym mieć nadzieję: każda pomoc byłaby bardziej niż mile widziana.
Rozwiązanie jednoprzebiegowe, w którym enkoder ma na początku pomieścić o wiele więcej klatek przed wytworzeniem wyjścia, zmniejszając w ten sposób początkowy efekt worka z piaskiem
Sposób wykonania ograniczonego dwuprzebiegowego kodowania jako „potoku”: pełne dwuprzebiegowe kodowanie jako potoku jest oczywiście nie sensowne, ale powinna istnieć możliwość „mikroprzepustów”, w których okres sprzężenia zwrotnego jest podobny druga. Jest to o wiele mniej idealne rozwiązanie niż rozwiązanie jednoprzebiegowe, aby obejść tak krótki efekt, ale byłoby do zaakceptowania, gdyby (1) było niemożliwe.
- Wykres przepływności dla pojedynczego przejścia: zanotuj początkowy „spadek worka z piaskiem”. Wygenerowano z:
ffmpeg -i 1080-60fps.mp4 -vf "scale = 1200: 720" -b: v 1000k -bufsize 1000k onepass.mp4
- Dwuprzebiegowy wykres przepływności: jest to prawie idealny wynik. Pamiętaj, że ta ostateczna forma nie musi być konieczna: wystarczające jest uniknięcie początkowego worka z piaskiem. Wygenerowano z:
ffmpeg -i 1080-60fps.mp4 -vf "scale = 1200: 720" -b: v 1000k -pass 1 -f mp4 / dev / null
ffmpeg -i 1080-60fps.mp4 -vf "scale = 1200: 720" -b: v 1000k -pass 2 twopass.mp4
- Sekcja pierwszej ramki w kodowaniu jednoprzebiegowym
- Sekcja pierwszej ramki w kodowaniu dwuprzebiegowym