Extraindo áudio de videos com tags

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

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.