gu.pro.br
Aprimorando audio digital com Pipewire e FFMpeg

Aprimorando audio digital com Pipewire e FFMpeg

Este tutorial irá guiá-lo pelo mundo do áudio digital, explorando conceitos como dithering, downsampling, taxa de bits e profundidade de bits. Usaremos o PipeWire como um servidor de áudio versátil e o FFmpeg como uma poderosa ferramenta de manipulação de mídia para demonstrar problemas de quantização, aliasing e aprimoramento vocal.

Conceitos Básicos

Taxa de bits (Bitrate):

Define a quantidade de dados de áudio transferida por segundo. Quanto maior a taxa de bits, maior a fidelidade do som, mas também o tamanho do arquivo.

Profundidade de bits (Bit Depth):

Determina o número de bits usados para representar cada amostra de áudio digital. Uma profundidade de bits maior permite capturar uma gama mais ampla de volumes, resultando em um som mais rico e preciso.

Downsampling:

Reduz a taxa de amostragem do áudio, diminuindo a quantidade de dados e o tamanho do arquivo. Porém, se a redução for excessiva, pode causar aliasing.

Aliasing:

Surge quando a taxa de amostragem é insuficiente para capturar fielmente as frequências presentes no áudio original. Isso resulta em sons indesejados como ruídos e chiados.

Quantização:

Processo de conversão de um sinal analógico contínuo (onda sonora) em um sinal digital discreto (sequência de números). Com profundidade de bits limitada, ocorrem erros de quantização, introduzindo ruído digital.

Dithering:

Técnica para reduzir erros de quantização ao adicionar um pequeno ruído ao sinal antes da quantização. Esse ruído ajuda a "mascarar" os erros, tornando-os menos perceptíveis.

Ferramentas

PipeWire: Um servidor de áudio moderno e flexível que gerencia o fluxo de áudio em seu sistema.

FFmpeg: Uma poderosa ferramenta de linha de comando para processamento de áudio e vídeo.

Demo: Ouvindo os Artefatos

Vamos utilizar o FFmpeg para gerar amostras de áudio com diferentes taxas de bits e profundidades de bits para demonstrar os efeitos colaterais da compressão:

Baixe um arquivo de áudio de alta qualidade (por exemplo, FLAC) usando o seu navegador. Existem diversos no webarchive, ou em serviços de alta qualidade de streaming como o www.tidal.com

Abra o terminal e navegue até a pasta onde salvou o arquivo.

Comandos FFmpeg:

Para reduzir a taxa de bits:

ffmpeg -i input.flac -b:a 128k output_baixo_bitrate.wav

Para reduzir a profundidade de bits:

ffmpeg -i input.flac -sample_fmt s16 output_baixa_profundidade.wav

Para ouvir os arquivos gerados:

aplay <arquivo.wav>

Ao comparar o áudio original com os arquivos processados, você deve notar uma perda de qualidade sonora, como falta de clareza, especialmente em sons agudos, e possivelmente ruído digital perceptível.

Demo: Dithering para Resgate de Som

O dithering pode ajudar a melhorar a qualidade do áudio durante a redução da profundidade de bits. Vamos tentar:

Utilize o seguinte comando para aplicar dithering antes da redução da profundidade de bits:

ffmpeg -i input.flac -sample_fmt s16 output_sem_dither.wav
ffmpeg -i input.flac -sample_fmt s16 -af aresample=dither_method=shibata output_com_dither.wav

O primeiro comando (sem resample, dither none) desabilita o dithering.

O segundo comando (dither_method=shibata) aplica dithering com o método shibata.

Compare os arquivos processados com e sem dithering usando um reprodutor de audio, como o aplay mencionado. ( mplayer, totem, vlc, clementine, audacious, etc. Note que alguns destes já usam filtros no audio, seria interessante também comparar subjetivamente.)

Você deve notar que o arquivo com dithering pode soar um pouco mais ruidoso, mas a perda de qualidade geral pode ser menor em comparação ao arquivo sem dithering.

Aprimoramento Vocal (experimental)

Embora o dithering não seja diretamente relacionado ao aprimoramento vocal, técnicas de equalização do FFmpeg podem ser usadas para enfatizar a voz em uma gravação. Isso deve ser feito com cautela para evitar sons artificiais.

Use o seguinte comando para aumentar a frequência central da voz (por exemplo, 1kHz):

ffmpeg -i input.wav -filter "equalizer=f=1000:width=100:gain=3" output_voz_destacada.wav

Aprimorando a Compreensão:

  • Visualização Gráfica: Utilize ferramentas como o Audacity para visualizar os efeitos da taxa de bits, profundidade de bits e dithering nos espectrogramas de áudio. Isso facilita a identificação de perdas de frequência e artefatos sonoros.
  • Testes A/B: Compare diferentes configurações de dithering e equalização usando reprodutores diferentes de mídia para determinar o que soa melhor para seus ouvidos e necessidades.

O playback também pode causar resampling! Filtros aplicados pelos reprodutores de mídia também podem alterar o arquivo “cru”.

Playback e Influência na Qualidade do Som: Ajustando Placas de Som no PipeWire

O tutorial até agora se concentrou em técnicas de processamento de áudio usando o FFmpeg. No entanto, a qualidade final do som também é influenciada pelo playback, ou seja, a reprodução do áudio pelo seu sistema. Fatores como resampling, filtros e configurações da placa de som podem ter um impacto significativo na experiência auditiva.

Resampling:

O resampling ocorre quando a taxa de amostragem do áudio original precisa ser convertida para uma taxa diferente para ser compatível com a placa de som ou com o software de reprodução. Se o resampling não for feito corretamente, pode causar distorções e perda de qualidade sonora.

Filtros:

Filtros digitais podem ser aplicados ao áudio durante a reprodução para remover ruídos indesejados, ajustar o timbre ou aplicar efeitos específicos. No entanto, o uso excessivo de filtros pode resultar em um som artificial ou abafado.

Configurações da Placa de Som:

As placas de som possuem diversas configurações que podem afetar a qualidade do som, como a taxa de bits máxima, a latência e a qualidade dos conversores DAC (Digital para Analógico). Ajustar essas configurações de acordo com suas necessidades e equipamentos pode otimizar a reprodução do áudio.

PipeWire e Configuração de Placas de Som:

Vamos usar um software gráfico legal para mexer no Wireplumber e listar de maneira organizada todos os dispositivos do seu sistema.

Infelizmente ele usa o flatpak, então temos alguns passos para habilitar.

  1. Instalar o flatpak em si, gerenciador de pacotes
  2. adicionar o repositório flathub
  3. Instalar o aplicativo em si, feito por Dyego Aurelio
  4. REINICIE o computador: isso mesmo, é inacreditável mas é necessário segundo as docs. (notem que não me apetece esse flatpak)
sudo apt install flatpak

flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak install flathub io.github.dyegoaurelio.simple-wireplumber-gui

O PipeWire não oferece uma interface amigável oficial para configurar placas de som e gerenciar o fluxo de áudio no sistema. Para acessar as configurações da placa de som pela configuração do Wireplumber, usando o software que instalamos acima,

flatpak run io.github.dyegoaurelio.simple-wireplumber-gui

Você verá uma lista de diversas informações com as opções disponíveis, variam de acordo com a placa de som, se é output ou input etc. Mas não incluem:

  • Taxa de bits: Para que você selecione a taxa de bits máxima compatível com sua placa de som e software de reprodução.
  • Latência: Para que você ajuste a latência para minimizar o atraso entre a entrada de áudio e a reprodução.
  • Canais: Para que você selecione o número de canais de áudio a serem utilizados (por exemplo, estéreo, 5.1 surround).
  • Formato de saída: Escolher o formato de áudio desejado (por exemplo, PCM, S/PDIF).

Qpwgraph:

  • Descrição: Uma interface mais completa com diversas opções de configuração avançada, incluindo visualização de gráficos de latência e estatísticas de desempenho.
  • Instalação:
sudo apt install qpwgraph

Dicas para Melhorar a Qualidade do Playback:

  • Use uma placa de som de boa qualidade: Investir em uma placa de som dedicada pode proporcionar uma reprodução de áudio mais precisa e com menos ruídos.
  • Evite resampling desnecessário: Configure o software de reprodução para utilizar a mesma taxa de amostragem do áudio original, sempre que possível.
  • Aplique filtros com moderação: Use filtros com cuidado para evitar que afetem negativamente a qualidade do som.
  • Mantenha os drivers da placa de som atualizados: Verifique periodicamente se há atualizações de drivers para sua placa de som no site do fabricante.

PS: Vale também mencionar o QasTools (QasConfig), uma ferramenta gráfica de configuração do ALSA em si.

Ao compreender a influência do playback na qualidade do som e ajustar as configurações da placa de som no PipeWire, você pode otimizar a experiência auditiva no seu sistema e desfrutar de um som mais rico e preciso

Aplicações Práticas:

  • Redução de Tamanho de Arquivo: Dithering pode ser útil para reduzir o tamanho de arquivos de áudio sem sacrificar excessivamente a qualidade, especialmente para podcasts, audiobooks ou música online.
  • Restauração de Áudio Antigo: O dithering pode ajudar a melhorar a qualidade de gravações antigas com baixa profundidade de bits, minimizando ruídos e distorções.
  • Masterização Musical: Técnicas de equalização podem ser usadas para ajustar o equilíbrio tonal de músicas, realçando ou atenuando frequências específicas para alcançar o som desejado.

Recursos Adicionais:

Lembre-se:

  • A experimentação é fundamental para encontrar as configurações ideais para suas necessidades e preferências auditivas.
  • O dithering e a equalização podem ser ferramentas valiosas para aprimorar a qualidade do áudio, mas devem ser usados com moderação para evitar resultados indesejáveis.

Aqui então uma base para os conceitos básicos de dithering, downsampling, taxa de bits e profundidade de bits, utilizando o PipeWire e o FFmpeg para demonstrações práticas.

No tutorial anterior eu dei uma pincelada em como alterar essas configurações diretamente no arquivo de configuração do pipewire e wireplumber. Não deixe de checar os meus outros artigos!

https://github.com/dimtpap/coppwr.git -> Essa é uma ferramenta que descobri recentemente, mas ainda não pude fuçar. Trata-se de um graphical low-level cfg para o pipewire! Promissor!!

Abraços pessoal!

Publicado por

Gustavo Conte

Gustavo Conte

EXPERT LINUX | Soluções livres