Como o FFmpeg controla a profundidade e a taxa de bits?

Como o FFmpeg controla a profundidade e a taxa de bits?

Ao converter um áudio com FFmpeg, existem opções -are -ac, que controlam a taxa de amostragem e o número de canais, respectivamente. Ele também oferece -abopção que controla a taxa de bits, mas nenhuma opção para controlar a profundidade de bits.

Desde…

[taxa de bits] = [número de canais] * [taxa de amostragem] * [profundidade de bits]

…isso significa que o ffmpeg calcula a profundidade de bits a partir dos outros 3 parâmetros?

Outra postagemdiz que a profundidade de bits é controlada na opção de formato. Isso me confundiu porque a equação acima pode não ser mais válida se o usuário definir todos os 4 parâmetros.

Alguém poderia explicar como a profundidade de bits e a taxa de bits funcionam no FFmpeg?

Responder1

Quanto às possibilidades dedefinir a profundidade de bits: Depende dos arquivos de origem e do formato de saída.

Por exemplo, pegue pcm_s16lee pcm_s24le- ambos renderizarão arquivos PCM, mas com 16 bits/24 bits de profundidade de bits, respectivamente. (Você pode encontrar essas informações com ffmpeg -h encoder=<YOUR_ENCODER>.)

Se você tiver um formato que pode aceitar várias profundidades de bits (como libmp3lame), o FFmpeg especificará por padrão o valor usado observando o arquivo de origem: Então, se você pegar -c:a libmp3lamee seu arquivo de entrada tiver uma profundidade de bits de 16 bits, então FFmpeg usará 16 bits. Se você tiver um arquivo de 32 bits e quiser codificá-lo em um codec que possa conter apenas 16 bits, o FFmpeg fará uma amostragem para você.

Mas você também pode especificá-lo sozinhousando-sample_fmt.


Quanto ao seufórmula de taxa de bits: O FFmpeg, como praticamente todas as outras ferramentas, vê o número de canais de áudio, a profundidade de bits e a taxa de amostragem como valores fixos (o que significa que eles não mudarão dentro do arquivo), enquanto a taxa de bits é a variável que se correlaciona com a qualidade da codificação. Isso, entretanto, só é verdade para codecs com perdas; é por isso que recodificar um arquivo WAV 200 vezes não fará diferença, enquanto recodificar os mesmos arquivos 20 vezes com um codificador de MP3 bastante decente já pode levar a resultados insuportáveis.

Codecs com perdas acrescentam qualidade à sua equação: por exemplo, em MP3, um valor de 320kobteria uma qualidade muito boa, pois o codificador não teria que descartar muita informação para permanecer dentro dos valores especificados. Se você usasse -b:a 64k, o codificador teria que descartar muitas informações para atingir a taxa de bits especificada. Os codificadores diminuirão tanto quanto necessário para atingir a taxa de bits:Exemplos muito banalizados e, portanto, apenas teóricos de informações que poderiam ser descartadas:

  • Se combinar todas as frequências de 8 a 16kHz em uma onda senoidal semicomplexa fizesse com que o codificador atingisse a taxa de bits, ele o faria.
  • Se excluir todos os sinais abaixo de -32dB resolvesse, funcionaria.

Para obter alguma explicação do mundo real sobre quais informações serão descartadas, sugiro que você comece lendoArtigo da Wikipedia sobre compactação de dados de áudio.

informação relacionada