Zmienne szybkości transmisji z ustawieniami „-vb” i „minrate” / „maxrate” w FFmpeg

12

Czas renderowania jest bardzo różny.

  • -b 3500K -minrate 0K -maxrate 8000K zajmuje 1 godz. 17 min
  • vb=3000k zajmuje 2,5 godziny

Czym jest vb 3000ki czym się różni -b 3500K -minrate 0K -maxrate 8000K? Czy są to ustawienia zmiennej przepływności?

Jeśli zmieniłem na -b 3500K -minrate 3500K -maxrate 3500K, czy to stała szybkość transmisji?

Scott Downey
źródło

Odpowiedzi:

16

Proszę zapoznać się z dokumentacją dla FFmpeg i uruchomić ffmpeg -h fullna liście opcji. Zobacz także ten artykuł, który napisałem, który pokazuje różnice między trybami kontroli szybkości w koderach takich jak x264 i x265.

Zasadniczo oto, co oznaczają opcje:

  • -b:v(lub -vbto samo) określa docelową średnią przepływność, z której koder ma korzystać:

    -b <int> E..VA. ustaw bitrate (w bitach / s) (od 0 do INT_MAX)

  • -minrate określa minimalną tolerancję do zastosowania:

    -minrate <int> E..VA. Ustaw minimalną tolerancję przepływności (w bitach / s). Najbardziej przydatne w konfiguracji kodowania CBR. W przeciwnym razie jest mało użyteczny. (od INT_MIN do INT_MAX)

  • -maxrateokreśla maksymalną tolerancję. Jednak, jak wskazuje dokumentacja, jest to używane tylko w połączeniu z bufsize:

    -maxrate <int> E..VA. Ustaw maksymalną tolerancję przepływności (w bitach / s). Wymaga bufsizeustawienia. (od INT_MIN do INT_MAX)

    -bufsize <int> E..VA. ustaw rozmiar bufora kontroli prędkości (w bitach) (od INT_MIN do INT_MAX)

    Ma to sens tylko w przypadku kodowania o zmiennej przepływności, gdzie zamiast używać modelu o stałej przepływności lub stałej jakości, koder symuluje transmisję z wirtualnym buforem w dekoderze. W -minrate/ -maxrate/ -bufsizemożliwości obsługi rozmiarze bufora. Zwykle używasz tego trybu tylko do przesyłania strumieniowego, ponieważ technika ogranicza przepływność, aby nie przekroczyć określonej wartości, która spowodowałaby przepełnienie lub niedopełnienie bufora dekodera.

Podsumowując, masz kilka opcji ograniczenia przepływności:

  1. Aby skonfigurować proces CBR, musisz sprawdzić, co oferuje koder. Zazwyczaj nie można osiągnąć „idealnej” stałej przepływności, ponieważ koder nie marnuje bitów. Ustawienie -b:v, -minratei -maxratedo tych samych poziomów osiągnie to, na przykład dla libx264:

    ffmpeg -i input.mp4 -c:v libx264 -x264-params "nal-hrd=cbr" -b:v 1M -minrate 1M -maxrate 1M -bufsize 2M output.ts
    

    Ostrzeżenie: może to skutkować niską jakością filmów trudnych do zakodowania i powoduje marnotrawstwo bitów. Chyba że absolutnie musisz osiągnąć stałą wydajność wyjściową, nie używaj tej opcji.

  2. Skonfiguruj ograniczony / zmienny przepływność procesu przesyłania strumieniowego. Użyj -b:v 3500K -maxrate 3500K -bufsize 1000Kna przykład. Musisz oczywiście dostosować szybkość i rozmiary buforów do kontekstu. Im większy rozmiar bufora, tym wyższa dozwolona zmienność przepływności.

  3. Użyj stałego celu jakości i ogranicz bitrate tylko do łapania skoków. Na przykład, użyj -c:v libx264 -crf 23 -maxrate 4M -bufsize 4Mdo kodowania ze zmienną przepływnością z docelowym CRF 23, ale ogranicz wyjście do maksymalnie 4 MBit / s.

slhck
źródło
1
Jak kodowałby przy użyciu zmiennej przepływności? jak w składni do użycia?
Scott Downey
Jakiego enkodera chcesz użyć?
slhck
ffmpeg, wierzę, że jest używany w kdenlive
Scott Downey
Nie, miałem na myśli: x264 dla wideo H.264 / MPEG-4 AVC lub XviD dla MPEG-4, lub Ogg Theora itp. Po prostu, jaki plik chcesz? MP4?
slhck
3
Zobacz tutaj, aby uzyskać więcej informacji na temat kodowania za pomocą x264 w FFmpeg; szczególnie patrzy na presety (generalnie używam bardzo szybkiego ustawienia, w moich testach największy spadek wielkości pliku był pomiędzy superszybkim i bardzo szybkim - potem różnice były znacznie bardziej przyrostowe. YMMV oczywiście).
evilsoup