Como considerar taxa de bits, -maxrate e -bufsize de um vídeo para web

8

Estou usando o ffmpeg para codificar meus vídeos para enviá-los na web. Eu vi este post sobre como usar o ffmpeg, mas não entendi como considerar os valores.

Suponha que eu tenha um vídeo de 70 MB com uma duração de 4 minutos. Como eu consideraria o valor desses sinalizadores: -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 para os valores de crf são 19-24? Eu realmente aprecio sua ajuda e orientação.

    
por Robin 26.07.2015 / 10:22

1 resposta

13

Isso realmente depende da sua velocidade de upload.

bufsize determinará como o ffmpeg religioso está relacionado a manter sua taxa de bits constante. Se você definir um bufsize 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 menores para bufsize podem ser prejudiciais à qualidade, pois eles não permitem espaço suficiente entre as verificações de x264 para fazer alterações repentinas - você terá bloqueios.

Se seu maxrate for 640kbps e seu bufsize for 64k, então, a cada décimo de segundo x264 verificará. Isso é sub-ótimo - FFmpeg Wiki: A codificação de sites de streaming recomenda executá-lo a cada 1 a 2 segundos. Se isso não fizer sentido, pense nisso como maxrate / bufsize = freqüência de verificações. Mantenha esta frequência entre 1 e 2 segundos como regra geral.

Se você definir maxrate e bufsize , deverá:

  • defina maxrate para qualquer que seja sua menor velocidade de upload (no exemplo de wiki ffmpeg , isso é 80 % da velocidade total de upload, mas sua milhagem pode variar).
  • defina bufsize para algo entre o mesmo que seu maxrate (um segundo) e duas vezes do seu maxrate (2 segundos). Se isso ainda não estiver baixo o suficiente, diminua seu maxrate e, em seguida, redefina bufsize de acordo.

Depois, você terá que brincar um pouco, mas desde que você tem que começar em algum lugar, eu começaria em maxrate em torno de 600k, o que geralmente era satisfatório para mim antes de usar crf para tudo.

Se desejar, você pode tentar valores mais baixos para bufsize , como para cada três ou quatro segundos, apenas para ver como o valor altera a aparência de sua saída. Então você pode determinar o quanto você deve se preocupar com isso em seu vídeo.

Não existe um valor normal, realmente - o que o crf faz é otimizar a saída com base no que acha ser o melhor tamanho de buffer para manter qualquer taxa definida. Ele tenta manter um tamanho de arquivo menor, mantendo alguma qualidade, ao custo de picos ocasionais.

    
por 28.07.2015 / 15:16