Używam ffmpeg do kodowania moich filmów w celu przesłania ich do Internetu. Widziałem ten post na temat używania ffmpeg, ale nie bardzo rozumiałem, jak brać pod uwagę wartości.
Załóżmy, że mam film o rozmiarze 70 MB, który trwa 4 minuty. Jak bym rozważyć wartość dla tych flag: -b:v
, -maxrate
i -bufsize
dla tego polecenia?
ffmpeg -i input -codec:v libx264 -profile:v main -preset slow -b:v ? -maxrate ? -bufsize ? -vf "scale=720:trunc(ow/a/2)*2" -threads 0 -codec:a libfdk_aac -movflags +faststart output
A może jest jakaś normalna wartość, na przykład dla crf
wartości 19–24? Byłbym bardzo wdzięczny za twoją pomoc i wskazówki.
Odpowiedzi:
To zależy od prędkości wysyłania.
bufsize
określi, jak religijna ffmpeg polega na utrzymywaniu stałej przepływności. Jeśli ustawisz wartośćbufsize
64k, zgodnie z Wiki FFmpeg: Ograniczanie wyjściowej przepływności , będzie obliczać jej bieżącą przepływność co 64 kilobajty i odpowiednio dostosowywać. Mniejsze rozmiary dlabufsize
mogą być szkodliwe dla jakości, ponieważ nie pozwalają wystarczająco dużo miejsca między sprawdzeniami dla x264, aby dokonać nagłych zmian - dostaniesz blokadę.Jeśli twój
maxrate
jest 640kbps, a twójbufsize
jest 64k, wtedy sprawdzałaby się co dziesiąta część x264. Jest to nieoptymalne - FFmpeg Wiki: Kodowanie dla stron streamingowych zaleca się uruchamianie go co 1-2 sekundy. Jeśli to nie miało sensu, pomyśl o tym jakomaxrate
/bufsize
= częstotliwość kontroli. Zachowaj tę częstotliwość od 1 do 2 sekund z reguły.Jeśli ustawisz oba
maxrate
ibufsize
, powinieneś:maxrate
na najniższą możliwą prędkość wysyłania (w przykładzie wiki ffmpeg jest to 80% całkowitej prędkości wysyłania, ale przebieg może się różnić).bufsize
gdzieś pomiędzy tym samym co twojamaxrate
(jedna sekunda) i dwa razymaxrate
(2 sekundy). Jeśli nadal nie jest wystarczająco niski, obniż swój,maxrate
a następnie odpowiednio go zresetujbufsize
.Potem będziesz musiał się trochę pobawić, ale skoro musisz gdzieś zacząć, zacznę od
maxrate
około 600 000, co zwykle wystarczało mi z powrotem, zanim wykorzystałemcrf
wszystko.Jeśli chcesz, możesz wypróbować niższe wartości
bufsize
, na przykład co trzy lub cztery sekundy, aby zobaczyć, jak ta wartość zmienia wygląd twojego wyniku. Następnie możesz określić, jak bardzo powinieneś się tym martwić w swoim filmie.Naprawdę nie ma żadnej wartości normalnej -
crf
chodzi o to, aby zoptymalizować wyjście w oparciu o to, co według niego jest najlepszym rozmiarem bufora do utrzymania tego, co jest ustawione na jego szybkość. Stara się zachować tak mały rozmiar pliku, zachowując pewną jakość, kosztem okazjonalnych skoków.źródło
crf
, to nie muszę określaćbitrate
,buffsize
amaxrate
? A jeśli tak, to co jest bardziej wydajne (użyjcrf
lubbitrate
,buffsize
imaxrate
)?bufsize
imaxrate
.bitrate
Ale nie potrzebujesz . Jak powiedział Ely, poprawi to strumieniowanie.