Ir para o conteúdo
AZ Tools

Inspetor de metadados FLAC

Um arquivo FLAC são quatro bytes de marca seguidos de uma cadeia de blocos de metadados — cada um com um cabeçalho de quatro bytes que carrega o sinalizador de último bloco, o tipo e um comprimento de 24 bits — e depois os quadros de áudio. Esta página percorre essa cadeia e mostra o que existe de fato: quais blocos estão presentes, em que ordem, em que deslocamento, quanto cada um ocupa, qual está marcado como último e, portanto, onde o áudio realmente começa. Do STREAMINFO saem a taxa de amostragem, o número de canais, a profundidade de bits e o total de amostras, de modo que a duração é exata em vez de estimada pela taxa de bits; e comparar os bytes depois dos metadados com o PCM sem compressão que esses números implicam dá a taxa de compressão real deste arquivo. Um total de amostras igual a zero é legal: significa que o codificador estava em streaming e nunca soube a duração. VORBIS_COMMENT é a parte que a maioria dos leitores de tags erra: é um multimapa, então ARTIST pode aparecer três vezes, e um programa que o carregue num dicionário comum fica com um valor e descarta os outros sem avisar. Aqui todas as linhas aparecem na ordem do arquivo, com os nomes repetidos marcados. Os blocos PICTURE declaram largura, altura, profundidade de cor e número de cores que ninguém confere, então cada imagem embutida é decodificada no navegador e as dimensões reais ficam ao lado das declaradas. Do SEEKTABLE resumem-se os pontos, quantos são marcadores vazios e o intervalo que cobrem; do CUESHEET, o número de catálogo, a entrada e as faixas; do APPLICATION, seu identificador registrado; do PADDING, quantos bytes estão sem uso. Uma tag ID3v2 colada na frente não faz parte do formato, mas é comum e afasta a marca fLaC do deslocamento 0: isso é detectado e relatado, em vez de o arquivo ser tratado como quebrado. O que ele não pode dizer é se o áudio decodifica: o MD5 do STREAMINFO é do PCM decodificado, portanto verifica um ciclo sem perdas e não os bytes em disco, e conferi-lo exige decodificar o fluxo inteiro.

Como usar

  1. Solte um arquivo .flac na caixa. Só o começo do arquivo é lido, então uma faixa longa abre tão rápido quanto uma curta.
  2. Olhe primeiro os cartões do fluxo: taxa de amostragem, profundidade e canais vêm do STREAMINFO, e a duração é exata porque o total de amostras está gravado, não estimado.
  3. Compare a taxa de compressão com o tamanho do PCM sem compressão ao lado: essa é a economia real, e uma taxa ruim costuma dizer mais sobre a masterização do que sobre o codificador.
  4. Percorra a tabela de blocos para ver a estrutura: quais blocos existem, onde cada um começa, qual está marcado como último e em que deslocamento os quadros de áudio começam.
  5. Na lista de comentários, procure os campos marcados como repetidos: são os que têm mais de um valor e os que os editores de tags mais costumam fundir em um só.

Perguntas frequentes

A mesma tag aparece duas vezes. É um defeito?
Não: é assim que o formato guarda vários valores. Um bloco de comentários Vorbis é uma lista de linhas NOME=valor, não um dicionário, então ARTIST pode aparecer três vezes numa parceria e GENRE duas num disco entre dois estilos. Os nomes de campo não diferenciam maiúsculas, então artist e ARTIST são o mesmo campo, e a ordem das linhas é a que o codificador escreveu. Um leitor que transforme o bloco num mapa comum guarda um valor por nome e joga o resto fora sem dizer nada: é por isso que uma faixa marcada com três artistas volta com um depois de passar pelo editor errado. Esta página lista todas as linhas na ordem do arquivo e marca os nomes que aparecem mais de uma vez.
O que é o MD5 do STREAMINFO e ele prova que o arquivo está íntegro?
É o MD5 do áudio decodificado — as amostras intercaladas, com sinal e em little-endian, exatamente como saem do decodificador — e não do arquivo. É justamente aí que ele serve: recodifique o mesmo áudio com outro nível de compressão e todos os bytes do arquivo mudam enquanto esse MD5 permanece, e é assim que se prova que a conversão foi sem perdas. É também por isso que não dá para conferi-lo olhando o arquivo: é preciso decodificar o fluxo inteiro e calcular o hash do resultado, que é o que o flac -t faz. Alguns codificadores deixam o campo com dezesseis bytes zerados, o que significa que nenhuma assinatura foi gravada, e não que ela falhe.
A duração aparece como desconhecida e o total de amostras é 0. O arquivo está quebrado?
É um fluxo, não um arquivo quebrado. O número de amostras do STREAMINFO é escrito por último, quando o codificador já sabe o tamanho da entrada; quem escreve num pipe ou numa transmissão ao vivo não pode voltar para preencher e deixa zero, algo que a especificação permite explicitamente. Os reprodutores lidam com isso decodificando até os quadros acabarem, e alguns mostram uma duração que cresce durante a reprodução. O resto do STREAMINFO — taxa, canais, profundidade, MD5 — continua válido e o arquivo toca normalmente. Decodificar e recodificar para um arquivo de verdade é o que grava esse número.
Por que meu FLAC começa com uma tag ID3?
Porque uma ferramenta voltada sobretudo para MP3 escreveu uma. O FLAC guarda suas tags no bloco VORBIS_COMMENT e a especificação não tem lugar para ID3, mas o ID3v2 foi feito para ficar no início do arquivo, então alguns extratores, reprodutores e aplicativos de celular colocam mesmo assim. A maioria dos decodificadores pula; alguns rejeitam o arquivo porque fLaC não está no deslocamento 0. Esta página detecta a tag, informa quantos bytes ela ocupa e lê os metadados verdadeiros a partir de onde a marca realmente começa. Vale saber: o que estiver escrito nesse ID3 é invisível para softwares que entendem FLAC, então o mesmo arquivo pode mostrar um título aqui e outro em outro lugar.
Qual taxa de compressão é normal num FLAC?
A maior parte da música fica entre cerca de 50% e 70% do PCM sem compressão, e o número mostrado aqui é calculado exatamente assim: os bytes depois do último bloco de metadados divididos por amostras totais × canais × profundidade ÷ 8. Material silencioso ou esparso comprime muito melhor; masters altos e muito limitados, bem pior; e o que se aproxima de ruído, quase nada. O nível do codificador (-0 a -8) muda o tempo de codificação e mexe no tamanho em alguns pontos percentuais, mas nunca muda o áudio, porque todos os níveis são sem perdas. Um master de 24 bits costuma mostrar taxa pior que um de 16 bits, porque os bits mais baixos são quase aleatórios e não há o que prever.
O arquivo é enviado para algum lugar? Isto verifica o áudio?
Não para as duas perguntas. O arquivo é aberto com a File API do navegador e analisado na página; nem ele inteiro é lido, porque os metadados ficam no começo e os quadros seguintes são apenas medidos. Nada é enviado a lugar nenhum e não existe servidor para receber. A segunda metade da resposta importa tanto quanto: nada aqui é uma afirmação sobre o áudio. Comprimentos de bloco, tags e imagens vêm dos metadados, os quadros nunca são decodificados e o MD5 guardado é copiado em vez de conferido — então um arquivo com metadados perfeitos e áudio corrompido parece saudável nesta página. Quem descobre isso é a decodificação.

Ferramentas relacionadas