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

11

Para renderização, o tempo necessário é muito diferente.

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

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

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

Scott Downey
fonte

Respostas:

15

Por favor, leia a documentação do FFmpeg e execute ffmpeg -h fulla lista de opções. Além disso, dê uma olhada neste artigo que escrevi, que mostra as diferenças entre os modos de controle de taxa em codificadores como x264 e x265.

Geralmente, aqui está o que as opções significam:

  • -b:v(ou -vbo mesmo) especifica a taxa de bits média alvo para o codificador usar:

    -b <int> E..VA. definir taxa de bits (em bits / s) (de 0 a INT_MAX)

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

    -minrate <int> E..VA. Defina a tolerância mínima à taxa de bits (em bits / s). Mais útil na configuração de uma codificação CBR. É de pouco uso caso contrário. (de INT_MIN a INT_MAX)

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

    -maxrate <int> E..VA. Defina a tolerância máxima à taxa de bits (em bits / s). Requer bufsizeser definido. (de INT_MIN a INT_MAX)

    -bufsize <int> E..VA. definir o tamanho do buffer do controle de rato (em bits) (de INT_MIN a INT_MAX)

    Isso faz sentido apenas para a codificação de taxa de bits variável, onde, em vez de usar uma taxa de bits constante ou um modelo de qualidade constante, o codificador simula uma transmissão com um buffer virtual no decodificador. As opções -minrate/ -maxrate/ -bufsizecontrolam esse tamanho do buffer. Normalmente, você usa esse modo apenas para streaming, pois a técnica restringirá a taxa de bits para não exceder um determinado valor que faria com que o buffer do decodificador fosse excedido ou insuficiente.

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

  1. Para configurar um processo CBR, você deve verificar o que o codificador oferece. Normalmente, você não pode obter uma taxa de bits constante "perfeita", pois o codificador não desperdiçará bits. A configuração de -b:v, -minratee -maxratenos 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 difíceis de codificar e desperdiçar bits. A menos que você precise absolutamente obter uma saída de taxa constante, não use esta 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 os tamanhos de taxa e buffer para o contexto, obviamente. Quanto maior o tamanho do buffer, maior a variação de taxa de bits permitida.

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

slhck
fonte
1
Como seria codificado usando uma taxa de bits variável? como na sintaxe para usar?
21813 Scott Downey
Qual codificador você deseja usar?
slhck
ffmpeg, eu acredito que é usado em Kdenlive
Scott Downey
Não, eu quis dizer como em: x264 para vídeo H.264 / MPEG-4 AVC ou XviD para MPEG-4 ou Ogg Theora, etc., simplesmente, qual arquivo você deseja? MP4?
slhck
3
Veja aqui para mais informações sobre codificação com x264 no FFmpeg; olha especialmente para as predefinições (geralmente eu uso a predefinição muito rápida, nos meus testes a maior queda no tamanho do arquivo foi entre super rápida e muito rápida - depois disso as diferenças foram muito mais incrementais. YMMV, é claro).
precisa saber é