Estou usando o ffmpeg para codificar meus vídeos e enviá-los para a web. Vi este post sobre o uso do ffmpeg, mas não entendi bem como considerar os valores.
Suponha que eu tenha um vídeo de tamanho 70 MB com duração de 4 minutos. Como eu iria considerar o valor para essas bandeiras: -b:v
, -maxrate
e -bufsize
para este comando?
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
Ou existe algum valor normal, como os crf
valores são 19-24? Eu realmente aprecio sua ajuda e orientação.
Respostas:
Realmente depende da sua velocidade de upload.
bufsize
determinará como o ffmpeg é religioso para manter sua taxa de bits constante. Se você definir umbufsize
de 64k, conforme FFmpeg Wiki: Limitando a taxa de bits de saída , ele calculará sua taxa de bits atual a cada 64 kilobytes e ajustará de acordo. Tamanhos menoresbufsize
podem ser prejudiciais à qualidade, pois não permitem espaço suficiente entre as verificações do x264 para fazer alterações repentinas - você terá obstruções.Se você
maxrate
tem 640kbps ebufsize
64k, cada décimo de segundo x264 é verificado. Isso é subótimo - o FFmpeg Wiki: codificação para sites de streaming recomenda executá-lo a cada 1 a 2 segundos. Se isso não fez sentido, pense nisso comomaxrate
/bufsize
= frequência das verificações. Mantenha essa frequência entre 1 e 2 segundos como regra geral.Se você definir ambos
maxrate
ebufsize
, deverá:maxrate
como a menor velocidade de upload provavelmente será (no exemplo wiki do ffmpeg , isso representa 80% da velocidade total de upload, mas sua milhagem pode variar).bufsize
para algo entre o mesmo que o seumaxrate
(um segundo) e o dobro do seumaxrate
(2 segundos). Se isso ainda não estiver baixo o suficiente, abaixe o seumaxrate
e, em seguida, redefina-o debufsize
acordo.Então, você terá que brincar um pouco, mas como você tem que começar em algum lugar, eu começaria em
maxrate
torno de 600k, o que geralmente era satisfatório o suficiente para mim antes de usarcrf
para tudo.Se desejar, tente valores mais baixos por
bufsize
, a cada três ou quatro segundos, apenas para ver como o valor muda a aparência da saída. Em seguida, você pode determinar o quanto deve se preocupar com isso no seu vídeo.Na verdade, não existe um valor normal - o que
crf
faz é otimizar a saída com base no que ele considera o melhor tamanho de buffer para manter a taxa que está definida. Ele tenta manter um tamanho de arquivo baixo, mantendo alguma qualidade, à custa de picos ocasionais.fonte
crf
, então eu não preciso especificarbitrate
,buffsize
emaxrate
? E se sim, qual é mais eficiente (usecrf
orbitrate
,buffsize
andmaxrate
)?bufsize
emaxrate
. Você não precisabitrate
, no entanto. Como Ely disse, isso melhorará a transmissão.