Taxas de bits variáveis com configurações "-vb" e "minrate" / "maxrate" no FFmpeg

10

Para renderização, o tempo que leva é muito diferente.

  • -b 3500K -minrate 0K -maxrate 8000K leva 1h 17min
  • vb=3000k demora 2,5 horas

O que é vb 3000k e como ele é diferente de -b 3500K -minrate 0K -maxrate 8000K ? Essas configurações de taxa de bits são variáveis?

Se eu mudei para -b 3500K -minrate 3500K -maxrate 3500K , essa taxa de bits é constante?

    
por Scott Downey 14.01.2013 / 14:53

1 resposta

15

Por favor, leia a documentação para o FFmpeg, e execute ffmpeg -h full para a lista de opções. Além disso, consulte este artigo que escrevi, que mostra as diferenças entre os modos de controle de taxa > em codificadores como x264 e x265.

Geralmente, eis o que as opções significam:

  • -b:v (ou -vb , o mesmo) especifica a taxa de bits média de destino a ser usada pelo codificador:

    -b <int> E..VA. set bitrate (in bits/s) (from 0 to INT_MAX)

  • -minrate especifica uma tolerância mínima a ser usada:

    -minrate <int> E..VA. Set minimum bitrate tolerance (in bits/s). Most useful in setting up a CBR encode. It is of little use otherwise. (from INT_MIN to INT_MAX)

  • -maxrate especifica uma tolerância máxima. No entanto, como a documentação indica, isso só é usado em conjunto com bufsize :

    -maxrate <int> E..VA. Set maximum bitrate tolerance (in bits/s). Requires bufsize to be set. (from INT_MIN to INT_MAX)

    -bufsize <int> E..VA. set ratecontrol buffer size (in bits) (from INT_MIN to INT_MAX)

    Isto só faz sentido para codificação de taxa de bit variável, onde em vez de usar um modelo de taxa de bit constante ou constante, o codificador simula uma transmissão com um buffer virtual no decodificador. As opções -minrate / -maxrate / -bufsize controlam esse tamanho de buffer. Normalmente, você só usa esse modo para streaming, pois a técnica restringirá a taxa de bits para não exceder um determinado valor, o que faria com que o buffer do decodificador ficasse acima ou abaixo do esperado.

Para resumir, você tem várias opções para limitar a taxa de bits:

  1. Para configurar um processo CBR, você precisa verificar o que o codificador oferece. Normalmente, não é possível obter uma taxa de bits constante "perfeita", pois o codificador não desperdiçará bits. Definir -b:v , -minrate e -maxrate para os mesmos níveis conseguirá isso, por exemplo, para libx264:

    ffmpeg -i input.mp4 -c:v libx264 -x264-params "nal-hrd=cbr" -b:v 1M -minrate 1M -maxrate 1M -bufsize 2M output.ts
    

    Aviso: Isso pode resultar em baixa qualidade para vídeos que são difíceis de codificar e desperdiçam bits. A menos que você realmente precise obter uma saída de taxa constante, não use essa opção.

  2. Configure um processo de taxa de bits restrita / variável para streaming. Use -b:v 3500K -maxrate 3500K -bufsize 1000K , por exemplo. Você terá que ajustar a taxa e os tamanhos do buffer para o contexto, obviamente. Quanto maior o tamanho do buffer, maior a variação da taxa de bits permitida.

  3. Use um alvo de qualidade constante e limite a taxa de bits apenas para capturar picos. Por exemplo, use -c:v libx264 -crf 23 -maxrate 4M -bufsize 4M para codificar a taxa de bits variável com um CRF de destino de 23, mas limite a saída a um máximo de 4 MBit / s.

por 14.01.2013 / 15:06

Tags