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 № 1Jeś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