/ / Dlaczego strumień ffmpeg webm jest znacznie większy niż inne? - ffmpeg, webm, mpeg-dash

Dlaczego jeden dash z webmastera jest znacznie większy niż inne? - ffmpeg, webm, mpeg-dash

Latem pracowałem nad stworzeniemskrypt, który wziął strumień wideo / mp3 x264 i podzielił go na różne strumienie, aby działał przez MSE-DASH. (W dużej mierze oparty na instrukcjach w witryna webmproject.org) Te same skrypty przestały działać, obracając się6 GB wideo na kilka filmów 25 Gb. Nadążałem za aktualizacjami ffmpeg, więc nie wiem, kiedy przestał działać, ale domyślam się, że było to spowodowane sposobem aktualizacji ich implementacji DASH Webm.

Znalazłem nową metodę, która działa lepiej, ale nadal ma duży problem z jednym strumieniem. Miałem nadzieję, że ktoś może wyjaśnić, jak działa to kodowanie, abym mógł zrozumieć podstawową przyczynę.

#!/bin/bash
COMMON_OPTS="-map 0:0 -an -threads 11 -cpu-used 4 -cmp chroma"
WEBM_OPTS="-f webm -c:v vp9 -keyint_min 50 -g 50 -dash 1"

ffmpeg -i $1 -vn -acodec libvorbis -ab 128k audio.webm &
ffmpeg -i $1 $COMMON_OPTS $WEBM_OPTS -b:v 500k -vf scale=1280:720 -y vid-500k.webm &
ffmpeg -i $1 $COMMON_OPTS $WEBM_OPTS -b:v 700k -vf scale=1280:720 -y vid-700k.webm &
ffmpeg -i $1 $COMMON_OPTS $WEBM_OPTS -b:v 1000k -vf scale=1280:720 -y vid-1000k.webm &
ffmpeg -i $1 $COMMON_OPTS $WEBM_OPTS -b:v 1500k -vf scale=1280:720 -y vid-1500k.webm

Transkodowanie nie jest jeszcze zakończone, ale możesz zobaczyć, dokąd to zmierza:

-rw-r--r--  1 user  staff    87M Jan  4 23:27 audio.webm
-rw-r--r--  1 user  staff    27M Jan  4 23:42 vid-1000k.webm
-rw-r--r--  1 user  staff   285M Jan  4 23:42 vid-1500k.webm
-rw-r--r--  1 user  staff    15M Jan  4 23:42 vid-500k.webm
-rw-r--r--  1 user  staff    20M Jan  4 23:42 vid-700k.webm

Wariant 1500k jest nieproporcjonalnie większy niż inne strumienie.

Innym problemem jest to, że kiedy używam krótszegowideo, powiedzmy osiem lub dziewięć minut, powyższa konfiguracja działa zgodnie z oczekiwaniami i wszystko jest idealne. Nie wiem, gdzie jest to ograniczenie, ponieważ każdy test kosztuje dużo mocy obliczeniowej i czasu, ale jeśli zajmuje mniej niż dziesięć minut, działa, a jeśli trwa dłużej niż godzinę, generuje ogromne pliki.

Odpowiedzi:

1 dla odpowiedzi № 1

Jeśli chcesz ograniczyć przepływność wideo do pewnej wartości, nie wystarczy użyć -b:v. W zależności od źródła (wysoki ruch, złożoność sceny) rzeczywista szybkość transmisji wzrośnie.

Musisz określić -maxrate i -bufsize także.

To znaczy. aby uzyskać wideo o zmiennej przepływności (VBR) ograniczone do około 1500k - szczyt może być wyższy w zależności od wielkości VBV - użyłbyś:

-b:v 1500k -maxrate 1500k -bufsize 1500k

Dla stałej przepływności (CBR) najlepsze wyniki uzyskuje się przy VBV z pojedynczą klatką. Przykład dla 25 fps (1500/25 = 60):

-b:v 1500k -minrate 1500k -maxrate 1500k -bufsize 60k