Caso você só precise da faixa de áudio de um arquivo de vídeo, é possível fazer sua extração e até conversão em diferentes formatos, além de incluir metadados como autor e nome da faixa. Veja o funcionamento de um script em bash que recebe essas informações como argumentos e entrega um arquivo de áudio com metadados de autor e nome da música.
A tecnologia mais antiga de digitalização sonora é a PCM (“Pulse Code Modulation”), que considera a taxa de amostra (“sample rate”, que indica a quantidade de vezes em que a amplitude de uma onda é medida) e profundidade de bit (“bit depth”, que indica o número de bits em cada amostragem).
Dentre os formatos de áudio não comprimidos, estão o CDDA (“Compact Disc Digital Audio”), WAV (“Waveform Audio File Format”) e AIFF (“Audio Interchangeable File Format”). Apesar de manterem uma boa qualidade, ocupam muito espaço em disco. Existem formatos que realizam compressão sem perder qualidade, como o FLAC (“Free Lossless Audio Codec”) e o ALAC (“Apple Lossless Encoder”, utilizado em vídeos MP4).
Existem formatos que excluem informações dos arquivos para reduzir ainda mais o tamanho deles, mas com algumas perdas. O popular MP3 codifica somente as frequências sonoras captadas pelo ouvido humano, conseguindo equilibrar bons índices de compressão e qualidade. Duas décadas após o surgimento do MP3, o FIIC, instituto alemão que inventou o formato de áudio e licenciou uma série de patentes relacionadas a ele, informou que o programa de licenciamento do MP3 foi oficialmente encerrado.
O formato AAC (“Advanced Audio Coding”) é um avanço em relação ao MP3, por exemplo. No entanto, os arquivos ADTS (“Audio Data Transport Stream”) AAC brutos não têm formato de marcação nativo e alguns aplicativos podem forçar tags ID3 neles com resultados/legibilidade imprevisíveis. Nesse caso, uma opção é envolver os arquivos AAC em M4A (“container”), que oferece um sistema de marcação bem definido e reconhecido: ffmpeg -i audio.aac -codec copy audio.m4a.
Comparando-se com o AAC, o codec Opus é melhor ainda segundo um Teste Público Multiformato de 2014. Nele, são comparadas as respostas de ouvintes a cinco diferentes codecs populares, com bitrate fixado em aproximadamente 96kbps, classificando-os pela qualidade e pelas distorções audíveis.
O codec Opus (antigo Harmony) é um formato de codificação de áudio desenvolvido pela Xiph.Org Foundation e padronizado pela IETF (“Internet Engineering Task Force”). Trata-se de um novo codec para compressão de audio digital com perdas, livre de royalties, que consegue manter baixa latência e uma boa qualidade de áudio. Ele é amplamente utilizado como codec de voz sobre IP (VoIP) em aplicativos como Discord, WhatsApp, PlayStation 4 e Youtube.
Os pacotes opus foram projetados para encapsulamento em contêineres Ogg – um campo de container pode armazenar imagens, áudio, vídeo e outros arquivos. Somente a partir do Android 10 que o formato opus foi reconhecido oficialmente (desde a versão 7, somente ogg era aceito) e do Windows 10 (versões mais recentes). Ogg vem de ogging, jargão do game Netrek, que passou a significar fazer algo sem levar em conta a possibilidade de esgotar os recursos.
Como obter o arquivo de vídeo e extrair/converter a faixa de áudio?
Você pode baixar um arquivo de vídeo do Youtube usando o programa “yt-dlp” (um fork do conhecido youtube-dl, que deixara de receber necessárias atualizações constantes desde meados de 2021). Ele pode ser instalado através do comando “python3 -m pip install –upgrade yt-dlp” e atualizado através do comando “yt-dlp -U”. Sua execução com o parâmetro “-x” extrai somente a faixa de áudio, que pode ser convertida em certos formatos usando o parâmtero “–audio-format FORMAT”. O parâmetro “–postprocessor-args” pode receber metadados como argumentos.
Geralmente as conversões de formato são feitas chamando o FFmpeg: um programa em linha de comando composto de uma coleção de software livre e bibliotecas de código aberto. Ele grava, converte e cria stream de áudio e vídeo em diversos formatos. Pode ser instalado através do comando “sudo apt install ffmpeg”. O formato do arquivo é dado pela extensão do nome de saída utilizado (“ffmpeg -i video_file audio_file.opus”, por exemplo). Outra forma de converter o arquivo é usando o VLC, o que pode ser feito através da própria interface gráfica – veja mais em Aprenda como extrair o áudio dos vídeos usando o VLC.
Como inserir metadados (TAG com informações)?
Além do yt-dlp, é possível usar o próprio FFmpeg para inserir metadados, como nome do artista e título da faixa. Dentre as outras opções estão o “kid3-cli” (instalado pelo comando “sudo apt install kid3-cli”) e o id3v2 (“sudo apt install id3v2”). As TAGs também podem ser editadas usando interface gráfica através do programa “EasyTAGs” – veja mais no final do post Edição multimídia no Linux. Veja alguns exemplos desses comandos comentados no final do código.
O script deste post inclui os comandos a serem executados para cumprir todas as tarefas acima designadas. O usuário deve informar a URL do vídeo, nome do artista e título da música (aceitam espaço e outros caracteres). O arquivo gerado foi aberto no VLC e no MP3 Player para Android com sucesso (reproduziu e apresentou as informações de TAG corretamente).
#!/bin/bash # Script to get Youtube video, extract audio and add "artist - title" TAG # Write Video URL, artist and title url="https://www.youtube.com/watch?v=DWjFW7Yq1fA" artist="RYYZN" title="Persuasion" ext='opus' # Download video to local file and get only audio yt-dlp -x $url --postprocessor-args "-metadata artist='$artist' -metadata title='$title'" # Rename output audio file filename_in=$(ls -1r *.opus | tail -n 1) filename_out=$artist' - '$title'.'$ext mv "$filename_in" "$filename_out" # Add TAG info (artist and title) #kid3-cli -c "set artist '$artist'" \ # -c "set title '$title'" \ # "$filename_out" # TAG option using id3v2 #id3v2 -t "$artist" -a "$title" "$filename_out" # TAG option using FFmpeg #ffmpeg -loglevel quiet -i "$filename_out" -codec copy \ #-metadata artist="$artist" -metadata title="$title" "$audio_file"
Para evitar a edição do arquivo toda vez que mudar algum input, é possível subsituir os valores das variáveis definidas no início para reecber os argumentos na chamada do script em linha de comando. Por exemplo, para entrar com URL, artist e title, substitua os valores no código por $1, $2 e $3, respectivamente, e execute o comando como: bash NOME_DO_SCRIPT.sh URL “ARTIST NAME” “MUSIC TITLE” – substituindo os nomes genéricos pelos desejados, lembrando de deixar os nomes de cada variável entre aspas no caso de haver espaço nas strings.
Obs.: conversão para MP3 usando FFmpeg no Debian 11 dava o erro “Default encoder for format mp3 (codec mp3) is probably disabled. Please choose an encoder manually.” Ao definir o codec usando o parâmetro “-codec:a libmp3lame”, o erro dado era “Unknown encoder ‘libmp3lame'”. Ao executar somente o comando “ffmpeg”, a saída imprimia um “configuration” onde não se lia “–enable-libmp3lame”, ou seja, ele deveria ser recompilado usando essa opção. Para contornar esse problema, foi usado o seguinte comando: ffmpeg -loglevel quiet -i video.webm -f wav – | lame – output.mp3
Fontes
- Tecmundo – Saiba quais são as principais diferenças entre formatos de áudio
- Olhar Digital – O MP3 está oficialmente ‘morto’
- Wikipedia – Opus
- Github – yt-dlp
- SuperUser – How to use ffmpeg to add metadata to an AAC file without reencoding?
- Linux Questions – [SOLVED] ffmpeg: Unknown encoder ‘libmp3lame’
- Musicbee – AAC WITH ID3 TAGS