Como considerar a taxa de bits, maxmax e -bufsize de um vídeo para a Web

13

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, -maxratee -bufsizepara 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 crfvalores são 19-24? Eu realmente aprecio sua ajuda e orientação.

Robin
fonte
A codificação de vídeo é uma arte, e existem centenas de parâmetros para dominar. Observe que a codificação de duas passagens oferecerá (muito) melhor qualidade e compactação na maioria dos cenários do que jogar com taxas de bits. Normalmente, o tamanho final e a taxa de bits do vídeo dependem principalmente do tamanho da saída do vídeo. O ffmpeg é geralmente inteligente o suficiente para escolher maxrate e bitrate se você pedir para manter a mesma qualidade de vídeo. Observe também que a criação de um vídeo com largura de 480px é boa o suficiente na maioria dos cenários e economiza muito mais largura de banda do que a reprodução com taxas de bits.
28815 earizon
11
@earizon Concordo, a codificação de vídeo é uma arte e 480 geralmente é boa o suficiente. No entanto, também gosto de ter resoluções mais altas disponíveis, porque não uso mais um CRT em 640x480. É definitivamente uma maneira melhor de reduzir tamanhos do que mexer com taxas de bits, mas, novamente, eu gosto de opções.
precisa saber é o seguinte

Respostas:

20

Realmente depende da sua velocidade de upload.

bufsizedeterminará como o ffmpeg é religioso para manter sua taxa de bits constante. Se você definir um bufsizede 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 menores bufsizepodem 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ê maxratetem 640kbps e bufsize64k, 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 como maxrate/ bufsize= frequência das verificações. Mantenha essa frequência entre 1 e 2 segundos como regra geral.

Se você definir ambos maxratee bufsize, deverá:

  • defina maxratecomo 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).
  • defina bufsizepara algo entre o mesmo que o seu maxrate(um segundo) e o dobro do seu maxrate(2 segundos). Se isso ainda não estiver baixo o suficiente, abaixe o seu maxratee, em seguida, redefina-o de bufsizeacordo.

Então, você terá que brincar um pouco, mas como você tem que começar em algum lugar, eu começaria em maxratetorno de 600k, o que geralmente era satisfatório o suficiente para mim antes de usar crfpara 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 crffaz é 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.

Wyatt8740
fonte
11
"Não deve definir bufsize para algo entre o mesmo que seu maxrate (um segundo) e metade do seu maxrate (2 segundos)" deve ser "definir bufsize para algo entre o mesmo que seu maxrate (um segundo) e duas vezes seu maxrate (2 segundos) "?
Ely
@ Ely, acho que você está certo. O meu faria isso a cada meio segundo. Eu vou consertar isso!
Wyatt8740
@ Wyatt8740 Desculpe, eu estava muito ocupado. Apenas uma pergunta, no entanto. Se eu usar crf, então eu não preciso especificar bitrate, buffsizee maxrate? E se sim, qual é mais eficiente (use crfor bitrate, buffsizeand maxrate)?
Robin
@ Robin Você pode usar o bufsize e maxrate com o crf. Lembre-se de que o crf ajustará a taxa de bits rapidamente para corresponder a uma certa qualidade e, se partes do vídeo forem muito complexas, a taxa de bits disparará no céu e você provavelmente não quer isso, então é melhor "travar" com bufsize e maxrate (! mas não muito rigorosa, ou você vídeo vai olhar como lixo :))
Ely
@ Robin correto, você não precisa usar crf com os outros. No entanto, você pode, se quiser restringi-lo. O crf tenta manter a qualidade constante - você pode forçá-lo a fazê-lo dentro dos limites de bufsizee maxrate. Você não precisa bitrate, no entanto. Como Ely disse, isso melhorará a transmissão.
precisa saber é o seguinte