Otimizar os arquivos de áudio do Speech-to-Text

Veja neste tutorial como realizar uma verificação de simulação nos arquivos de áudio que você está preparando para usar com a Conversão de voz em texto. Ele fornece informações sobre formatos de arquivos de áudio, descreve como otimizar arquivos de áudio para uso com a Conversão de voz em texto e como diagnosticar erros. O tutorial foi desenvolvido para profissionais de mídia e entretenimento não técnicos e profissionais de pós-produção. Ele não requer conhecimento profundo do Google Cloud; é necessário apenas conhecimento básico de como usar a ferramenta de linha de comando gcloud com arquivos armazenados localmente e em um bucket do Cloud Storage.

Objetivos

  • Instale a ferramenta FFMPEG.
  • Faça o download dos arquivos de mídia de amostra.
  • Reproduza arquivos de áudio e vídeo usando o FFMPEG.
  • Extrair, transcodificar e converter propriedades de arquivos de áudio usando o FFMPEG.
  • Execute a Conversão de voz em texto em uma variedade de arquivos de amostra que contém uma caixa de diálogo.

Custos

Neste tutorial, usamos o seguinte componente faturável do Google Cloud:

Use a calculadora de preços para gerar uma estimativa de custo com base no uso previsto.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  4. Instale e inicialize o SDK do Cloud..
  5. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  6. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  7. Instale e inicialize o SDK do Cloud..

Neste tutorial, você usa o Cloud Shell para executar os procedimentos, como a cópia de dados de um bucket do Cloud Storage para a sessão do Cloud Shell. O Cloud Shell é um ambiente shell com o SDK do Cloud pré-instalado, incluindo a ferramenta de linha de comando gcloud que você usa em muitas etapas deste tutorial. Você também instala softwares e arquivos de áudio de amostra na máquina local e executa esses mesmos exercícios no terminal, conforme descrito posteriormente na seção Como executar exemplos de tutorial em um terminal local.

Visão geral

Neste tutorial, use o FFMPEG, uma ferramenta de código aberto para gravação, conversão e streaming de áudio e vídeo. O tutorial fornece mais informações sobre essa ferramenta posteriormente.

Entender os atributos do arquivo de som

Nesta seção, descrevemos tipos de arquivos de áudio típicos, taxas de amostragem, profundidade de bits e gravação de mídia encontrada em fluxos de trabalho de produção e pós-produção de mídia.

Para ter os melhores resultados da Conversão de voz em texto, verifique se os arquivos usados para transcrição são arquivos mono que atendem a determinadas especificações mínimas, conforme descrito posteriormente. Se os arquivos não atenderem às especificações, talvez seja necessário gerar arquivos modificados. Por exemplo, talvez seja necessário fazer o seguinte:

  • Extraia os dados de áudio de um arquivo de vídeo.
  • Extraia uma única faixa mono de um arquivo de áudio com várias faixas.
  • Faça a transcodificação de um codec de áudio para outro codec mais adequado para a Conversão de voz em texto.

Taxa de amostragem (intervalo de frequência)

A taxa de amostragem determina o intervalo de frequência do arquivo de áudio. Ela é baseada no número de amostras por segundo que constituem o arquivo de áudio. Normalmente, a maior frequência reproduzível de um arquivo de áudio digital equivale à metade da taxa de amostragem. Por exemplo, a frequência mais alta que pode ser reproduzida de um arquivo de áudio de 44,1 kHz é de aproximadamente 22 kHz, que está na extremidade superior do intervalo da resposta de frequência de um ouvinte típico.

As taxas de amostragem em telefonia e telecomunicações tendem a estar na faixa de 8 kHz a 16 kHz. Neste tutorial, focamos em formatos específicos para o setor de mídia e entretenimento, que normalmente são superiores a 16 kHz. Para mais informações sobre telefonia e outros aplicativos de som, consulte Como transcrever o áudio do telefone com modelos aprimorados.

Recomendamos uma taxa de amostragem de pelo menos 16 kHz nos arquivos de áudio que você usa para transcrição com a Conversão de voz em texto. As taxas de amostra encontradas em arquivos de áudio são normalmente de 16 kHz, 32 kHz, 44, 1 kHz e 48 kHz. Como a inteligibilidade é muito afetada pelo intervalo de frequência, especialmente nas altas frequências, uma taxa de amostragem inferior a 16 kHz resulta em um arquivo de áudio com pouca ou nenhuma informação acima de 8 kHz. Isso pode impedir que a Conversão de voz em texto possa transcrever corretamente o áudio falado. A inteligibilidade de voz requer informações em todo o intervalo de 2 kHz a 4 kHz, ainda que os harmônicos (múltiplos) dessas frequências no intervalo superior também sejam importantes para preservar a inteligibilidade de voz. Portanto, é uma boa prática manter a taxa de amostragem para um mínimo de 16 kHz.

É possível converter de uma taxa de amostragem para outra. No entanto, não há benefícios em aumentar a amostragem do áudio, porque as informações de intervalo de frequência são limitadas pela taxa de amostragem mais baixa e não podem ser recuperadas ao converter para uma taxa de amostragem maior. Isso significa que o aumento da amostragem de 8 kHz a 44,1 kHz limitaria o intervalo de frequência reproduzível à metade da taxa de amostragem mais baixa, ou aproximadamente 4 kHz. Neste tutorial, você ouve os arquivos de áudio gravados com várias taxas de amostragem e profundidades de bits para ouvir a diferença.

Profundidade de bits (intervalo dinâmico)

A profundidade de bits do arquivo de áudio determina o intervalo entre os sons mais baixos e os mais altos, bem como a proporção sinal/ruído do arquivo. O intervalo dinâmico afeta menos a qualidade da transcrição do que a resposta de frequência, mas profundidades de bits iguais ou inferiores a 8 bits podem causar ruído de quantização excessivo na faixa de áudio, dificultando a transcrição precisa. Os erros de quantização são erros de arredondamento entre o sinal de entrada analógico e o mapeamento do valor de saída digital desse sinal. Os erros causam uma distorção audível que afeta diretamente a fidelidade do som. A profundidade de bits recomendada para análise com a conversão de voz em texto é de 16 bits ou mais. Assim como na frequência de amostragem, não há vantagem em converter a profundidade de bits de 8 para 16 bits, porque as informações do intervalo dinâmico são limitadas ao formato original de 8 bits.

Mídia de gravação

A mídia de gravação original também pode afetar a qualidade do arquivo de áudio. Por exemplo, o conteúdo de áudio que foi gravado originalmente em fita magnética pode ter um assobio em segundo plano incorporado no arquivo. Em alguns casos, pode ser necessário pré-processar o áudio com ruído para conseguir melhores resultados no processo de transcrição ao usar a Conversão de voz em texto. O tratamento de gravações com ruído e a interferência de ruído em segundo plano estão além do escopo deste tutorial. Para mais informações, consulte Práticas recomendadas na documentação da Conversão de voz em texto.

Introdução ao FFMPEG

Neste tutorial, você usará o FFMPEG para trabalhar com arquivos de áudio. O conjunto de ferramentas FFMPEG oferece uma ampla variedade de funções que incluem os itens a seguir:

  • Reproduzir um arquivo de áudio ou vídeo.
  • Converter arquivos de áudio em um dos codecs reconhecidos pela Conversão de voz em texto.
  • Converter taxas de amostragem e taxas de bits de arquivo de áudio em configurações otimizadas para análise pela Conversão de voz em texto.
  • Extrair faixas de áudio individuais ou streams de um arquivo de stream de transporte ou arquivo de vídeo.
  • Como dividir arquivos estéreo em dois arquivos mono.
  • Como dividir arquivos de áudio 5.1 em seis arquivos mono.
  • Como aplicar equalização e filtragem para melhorar a clareza do áudio.

Você também pode usar a função ffprobe (em inglês) do FFMPEG para revelar metadados associados a um arquivo de mídia. Isso é importante quando você quer diagnosticar problemas relacionados a tipos de arquivos e formatos para análise de machine learning.

Codecs reconhecidos pela conversão de voz em texto

Embora a Conversão de voz em texto reconheça vários formatos de arquivo de áudio, ele pode não ler ou analisar determinados codecs corretamente. No tutorial, mostramos como verificar se o conteúdo está em um dos formatos de arquivo compatíveis.

No tutorial, você lê as informações de metadados para revelar e corrigir problemas possíveis antes de usar a Conversão de voz em texto. As mesmas ferramentas permitem converter o arquivo em um formato compatível se você descobrir uma incompatibilidade.

A Conversão de voz em texto reconhece os codecs a seguir:

É importante entender que codecs e formatos do arquivo não são iguais. A extensão de nome de arquivo não indica necessariamente que o codec usado na criação do arquivo pode ser lido pela Conversão de voz em texto.

Neste tutorial, focamos nos codecs FLAC e LINEAR16, porque eles são frequentemente encontrados em ambientes de fluxo de trabalho de mídia. Ambos são formatos sem perdas.

Se você usar arquivos WAV (no formato PCM linear não compactado) com a conversão de voz em texto, os arquivos precisam ter uma profundidade máxima de 16 bits e ser codificados em um formato de ponto não flutuante. A extensão de nome de arquivo .wav não garante que o arquivo possa ser lido pela Conversão de voz em texto. Na seção Otimizar arquivos de áudio para análise deste tutorial, fornecemos um exemplo de como converter o arquivo de ponto flutuante em bit inteiro (assinatura) para transcrever o arquivo em Conversão de voz em texto.

Inicializar seu ambiente

Antes de executar as tarefas deste tutorial, você precisa inicializar seu ambiente para instalar o FFMPEG, configurar algumas variáveis de ambiente e fazer o download de arquivos de áudio. Você usa arquivos de mídia armazenados em uma instância do Cloud Shell e em um bucket do Cloud Storage. O uso de fontes diferentes permite que você trabalhe com diferentes recursos da Conversão de voz em texto.

Nesta seção, você instala o FFMPEG e configura variáveis de ambiente que apontam para os locais de armazenamento de dados de amostra no armazenamento da instância do Cloud Shell e em um bucket do Cloud Storage. Os arquivos de mídia são os mesmos nos dois locais, e alguns exemplos neste tutorial acessam arquivos do Cloud Shell e do bucket do Cloud Storage. É possível instalar o FFMPEG na máquina local e executar esses mesmos exercícios, conforme descrito posteriormente na seção Como executar exemplos de tutorial em um terminal local.

  1. No Cloud Shell, acesse o Cloud Shell.

    Acessar o Cloud Shell

  2. No Cloud Shell, instale a versão atual do FFMPEG:

    sudo apt update
    sudo apt install ffmpeg
    
  3. Verifique se o FFMPEG está instalado:

    ffmpeg -version
    

    Se um número de versão for exibido, a instalação foi bem-sucedida.

  4. Crie um diretório para os arquivos do projeto:

    mkdir project_files
    
  5. Crie um diretório para os arquivos de saída que você criará em uma etapa posterior:

    mkdir output
    
  6. Faça o download dos arquivos do áudio de amostra:

    gsutil -m cp gs://sa-speech-to-text-tutorial-bucket/project_files/*.* ~/project_files/
    
  7. Crie uma variável de ambiente para o nome do bucket do Cloud Storage:

    export GCS_BUCKET_PATH=gs://sa-speech-to-text-tutorial-bucket/project_files
    
  8. Crie uma variável de ambiente para o caminho do diretório da instância do Cloud Shell que direcione para os arquivos de áudio de amostra salvos:

    export PROJECT_FILES=~/project_files
    

Examinar metadados em arquivos de mídia

Ao analisar arquivos de áudio ou vídeo com a Conversão de voz em texto, é preciso conhecer os detalhes dos metadados do arquivo. Isso ajuda a identificar inconsistências ou parâmetros incompatíveis que podem causar problemas.

Nesta seção, use o comando ffprobe no FFMPEG para examinar os metadados de vários arquivos de mídia para entender as especificações de um arquivo.

  1. No Cloud Shell, revele os metadados do arquivo HumptyDumptySample4416.flac:

    ffprobe $PROJECT_FILES/HumptyDumptySample4416.flac
    

    A saída é esta:

    Input #0, flac, from 'project_files/HumptyDumptySample4416.flac':
      Duration: 00:00:26.28, start: 0.000000, bitrate: 283 kb/s
        Stream #0:0: Audio: flac, 44100 Hz, mono, s16
    

    Essa saída indica os seguintes metadados sobre o arquivo:

    • A duração do arquivo de áudio é de 26,28 segundos.
    • A taxa de bits é de 283 KB por segundo.
    • O formato do codec é FLAC.
    • A taxa de amostragem é de 44,1 kHz.
    • O arquivo é um arquivo mono de canal único.
    • A profundidade de bits é 16 bits (número inteiro assinado).
  2. Revele metadados para o arquivo HumptyDumptySampleStereo.flac:

    ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
    

    A saída é esta:

    Input #0, flac, from 'project_files/HumptyDumptySampleStereo.flac':
      Duration: 00:00:26.28, start: 0.000000, bitrate: 378 kb/s
        Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
    

    As diferenças entre este arquivo e o anterior é que este é um arquivo estéreo com uma taxa de bits maior (378 KB/segundo, em vez de 283 KB/segundo), porque contém dois canais em vez de uma faixa mono. Todos os outros valores são iguais.

    Verifique o número de canais em um arquivo de áudio que você quer processar usando a Conversão de voz em texto. Os arquivos de áudio precisam ter apenas um canal de áudio. Para transcrever vários canais de áudio no mesmo arquivo, recomendamos que você faça o script dos comandos conforme descrito posteriormente na seção Otimizar arquivos de áudio para análise.

  3. Revele metadados para um arquivo de mixagem de áudio 5.1:

    ffprobe $PROJECT_FILES/Alice_51_sample_mix.aif
    

    A saída é esta:

    Duration: 00:00:58.27, bitrate: 4610 kb/s
        Stream #0:0: Audio: pcm_s16be, 48000 Hz, 5.1, s16, 4608 kb/s
    

    Como esse arquivo está em um formato diferente do arquivo mono ou estéreo, você verá informações adicionais. Nesse caso, o áudio está em um formato PCM linear, gravado a uma taxa de amostragem de 44,1 kHz e a uma taxa de 16 bits (número inteiro assinado, little endian).

    Observe a designação 5.1. A taxa de dados de 4608 Kbits por segundo neste arquivo é significativamente maior do que a taxa de qualquer um dos exemplos anteriores, porque o arquivo de áudio contém seis faixas de áudio.

    Mais adiante neste tutorial, você verá como esse arquivo causa erros quando você tenta transcrevê-lo usando a Conversão de voz em texto. Mais importante, você verá como otimizar o arquivo para usá-lo com a Conversão de voz em texto sem erros.

Otimizar arquivos de áudio para análise

Como mencionado anteriormente, quando você usa a Conversão de voz em texto, os arquivos de áudio precisam ser arquivos mono de canal único para evitar erros no processo de transcrição. Na tabela a seguir, mostramos formatos de áudio comuns e o processo de conversão para converter arquivos mono para processamento.

Formato de áudio atual Processo de conversão Formato de áudio de saída
Mono Nenhuma extração necessária FLAC ou LINEAR16
Estéreo Dividido em dois arquivos mono ou downmix em um arquivo mono FLAC ou LINEAR16
Múltiplas faixas (5.1) Dividir em seis arquivos mono FLAC ou LINEAR16
Áudio/vídeo com vários streams Dividir em arquivos mono separados FLAC ou LINEAR16

Para processar arquivos com várias faixas de áudio, você extrai as faixas mono do arquivo estéreo usando o FFMPEG ou outras ferramentas de edição de áudio. Como alternativa, é possível automatizar o processo conforme descrito na seção Como transcrever áudio com vários canais da documentação da Conversão de voz em texto. Para este tutorial, você explora a opção de usar o FFMPEG para extrair faixas mono individuais do arquivo estéreo.

Conforme mostrado na seção anterior, é possível usar o comando ffprobe para determinar quantos canais de áudio existem em um arquivo e usar o comando ffmpeg para extrair ou converter o arquivo em um formato mono, se necessário.

Visualizar um erro com base em um formato inválido

Para ver como um formato incorreto afeta a transcrição, tente executar a Conversão de voz em texto em um arquivo que não esteja no formato mono.

  1. No Cloud Shell, execute a Conversão de voz em texto no arquivo HumptyDumptySampleStereo.flac:

    gcloud ml speech recognize $PROJECT_FILES/HumptyDumptySampleStereo.flac \
        --language-code='en-US'
    

    A saída é esta:

    ERROR: (gcloud.ml.speech.recognize) INVALID_ARGUMENT: Invalid audio channel count
    

    Embora o formato do codec, a taxa de amostragem e a profundidade de bits do arquivo estejam corretos, o descritor estéreo indica que existem duas faixas no arquivo de áudio. Portanto, executar a Conversão de voz em texto causa um erro Invalid audio channel count.

  2. Execute o comando ffprobe no arquivo:

    ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
    

    A saída é esta:

    Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
    

    Isso revela que o erro da Conversão de voz em texto foi causado por uma tentativa de processar um arquivo estéreo

Para informações sobre como gerenciar arquivos estéreo por meio de scripts, consulte Como transcrever áudio com vários canais na documentação da Conversão de voz em texto.

Dividir um arquivo estéreo em vários arquivos mono FLAC

Um exemplo de como evitar o erro de várias faixas é extrair duas faixas mono de um arquivo de áudio estéreo. As faixas resultantes estão no formato FLAC e são gravadas no diretório de saída. Ao extrair dois arquivos mono de um arquivo estéreo, é recomendável criar nomes para os arquivos extraídos que indiquem o local do canal do arquivo original. Por exemplo, no procedimento a seguir, você escolhe o canal esquerdo usando o sufixo FL e o direito usando o sufixo FR.

Se a amostra de áudio a ser transcrita estiver nos dois canais, apenas um canal será usado para a transcrição. No entanto, se diferentes alto-falantes forem gravados em canais diferentes, recomendamos que você transcreva os canais separadamente. A Conversão de voz em texto pode reconhecer várias vozes em uma única gravação. No entanto, isolar cada voz em canais separados resulta em níveis de confiança maiores na transcrição. O nível de confiança também é conhecido como taxa de erro de palavras (ou WER, na sigla em inglês) no reconhecimento de fala. Para mais informações sobre como trabalhar com várias vozes na mesma gravação, consulte Como separar interlocutores diferentes em uma gravação de áudio na documentação da Conversão de voz em texto.

  • No Cloud Shell, divida o arquivo estéreo HumptyDumptySampleStereo.flac em dois arquivos mono:

    ffmpeg -i $PROJECT_FILES/HumptyDumptySampleStereo.flac -filter_complex "[0:a]channelsplit=channel_layout=stereo[left][right]" -map "[left]" output/HumptyDumptySample_FL.flac -map "[right]" output/HumptyDumptySample_FR.flac
    

    A saída é a seguinte, que mostra os arquivos mono HumptyDumptySample_FL.flac (canal frontal esquerdo) e HumptyDumptySample_FR.flac (canal frontal direito).

    Output #0, flac, to 'HumptyDumptySample_FL.flac':
      Input #0, flac, from 'project_files/HumptyDumptySampleStereo.flac':
      Duration: 00:00:26.28, start: 0.000000, bitrate: 378 kb/s
        Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
    Stream mapping:
      Stream #0:0 (flac) -> channelsplit
      channelsplit:FL -> Stream #0:0 (flac)
      channelsplit:FR -> Stream #1:0 (flac)
    (...)
    Output #0, flac, to 'HumptyDumptySample_FL.flac':
    (...)
    Stream #0:0: Audio: flac, 44100 Hz, 1 channels (FL), s16, 128 kb/s
    (...)
    Output #1, flac, to 'HumptyDumptySample_FR.flac':
    (...)
    Stream #1:0: Audio: flac, 44100 Hz, 1 channels (FR), s16, 128 kb/s
    (...)
    size=918kB time=00:00:26.27 bitrate= 286.2kbits/s speed= 357x
    video:0kB audio:1820kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
    

    Este arquivo agora está otimizado para a Conversão de voz em texto.

Dividir um arquivo de áudio 5.1 em vários arquivos mono

Outro exemplo de como otimizar arquivos de áudio é dividir arquivos de áudio 5.1 em arquivos mono FLAC individuais. Ao se referir a canais em uma mixagem de diversos canais, como uma mixagem 5.1, as designações de nome de arquivo normalmente são diferentes dos arquivos estéreo ou mono. O arquivo do canal esquerdo normalmente é designado como FL para o frontal esquerdo, e o canal direito é designado como FR para o frontal direito. Os canais restantes de um mix 5.1 são chamados aqui de FC para o frontal central, LFE para efeitos de baixa frequência, BL para o traseiro esquerdo (também conhecido como surround esquerdo) e BR para o traseiro direito (também conhecido como surround direito). Essas não são designações padrão, mas são práticas recomendadas para identificar a origem de um arquivo de som.

Normalmente, em arquivos de áudio com vários canais para filmes e televisão, o diálogo principal é transmitido pelo canal central frontal. Geralmente, esse é o arquivo a ser escolhido quando você usa a Conversão de voz em texto, porque ele normalmente contém a maior parte do diálogo na mixagem.

Em um ambiente de pós-produção, os elementos principais do diálogo, da música e dos efeitos são divididos em grupos chamados radicais para que todo o diálogo seja separado da música e dos efeitos até que a mixagem final seja feita. Como o radical do diálogo consiste apenas em diálogo, a Conversão de voz em texto fornece melhores resultados ao transcrevê-lo, em vez de tentar extrair o canal central de uma mixagem final. Isso ocorre porque um canal central extraído pode ser mixado com sons que não são de diálogo, o que causa a falta de inteligibilidade.

  1. No Cloud Shell, divida o arquivo Alice_51_sample_mix.aif em arquivos FLAC, especificando os nomes dos arquivos de saída para cada canal:

    ffmpeg -i $PROJECT_FILES/Alice_51_sample_mix.aif -filter_complex "channelsplit=channel_layout=5.1[FL][FR][FC][LFE][BL][BR]" -map "[FL]" output/Alice_FL.flac -map "[FR]" output/Alice_FR.flac -map "[FC]" output/Alice_FC.flac -map "[LFE]" output/Alice_LFE.flac -map "[BL]" output/Alice_BL.flac -map "[BR]" output/Alice_BR.flac
    

    A saída é esta:

    Duration: 00:00:55.00, bitrate: 4235 kb/s
      Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 5.1, s16, 4233 kb/s
    Stream mapping:
      Stream #0:0 (pcm_s16le) -> channelsplit
      channelsplit:FL -> Stream #0:0 (flac)
      channelsplit:FR -> Stream #1:0 (flac)
      channelsplit:FC -> Stream #2:0 (flac)
      channelsplit:LFE -> Stream #3:0 (flac)
      channelsplit:BL -> Stream #4:0 (flac)
      channelsplit:BR -> Stream #5:0 (flac)
    Press [q] to stop, [?] for help
    Output #0, flac, to 'Alice_FL.flac':
    (...)
        Stream #0:0: Audio: flac, 44100 Hz, 1 channels (FL), s16, 128 kb/s
    (...)
    Output #1, flac, to 'output/Alice_FR.flac':
    (...)
        Stream #1:0: Audio: flac, 44100 Hz, 1 channels (FR), s16, 128 kb/s
    (...)
    Output #2, flac, to 'output/Alice_FC.flac':
    (...)
        Stream #2:0: Audio: flac, 44100 Hz, mono, s16, 128 kb/s
    (...)
    Output #3, flac, to 'output/Alice_LFE.flac':
    (...)
        Stream #3:0: Audio: flac, 44100 Hz, 1 channels (LFE), s16, 128 kb/s
    (...)
    Output #4, flac, to 'output/Alice_BL.flac':
    (...)
        Stream #4:0: Audio: flac, 44100 Hz, 1 channels (BL), s16, 128 kb/s
    (...)
    Output #5, flac, to 'output/Alice_BR.flac':
    (...)
        Stream #5:0: Audio: flac, 44100 Hz, 1 channels (BR), s16, 128 kb/s
    (...)
    
  2. Clique no arquivo a seguir para ouvi-lo. Esse arquivo está no bucket do Cloud Storage e, quando você clica no nome, o arquivo é reproduzido em uma guia nova no navegador.

    Alice_mono_downmix.flac
    
  3. Ouça o FC (arquivo somente do canal central) que você acabou de criar. O diálogo é iniciado após alguns segundos de silêncio.

    Alice_FC.flac
    

    Observe a diferença de clareza do arquivo anterior. Essa faixa é baseada somente na parte do diálogo da mixagem.

Testar a qualidade do arquivo de áudio

Antes de converter os arquivos de mídia usando a Conversão de voz em texto, é recomendável ouvir os arquivos para determinar se eles têm anomalias na qualidade do som que podem impedir que as ferramentas de ML forneçam resultados precisos. Nesta seção, você reproduz os arquivos no seu navegador clicando nos nomes deles. Recomendamos o uso de fones de ouvido ou caixas de som de faixa dinâmica ampla.

Ouvir o áudio de um arquivo de vídeo

  1. Clique no seguinte arquivo para reproduzi-lo:

    HumptyDumptySample4416.flac
    

    Este arquivo tem uma frequência de 44,1 kHz e uma profundidade de 16 bits. Observe a fidelidade nítida e sem distorção e a inteligibilidade desse arquivo. Ele é um bom candidato para a transcrição usando a Conversão de voz em texto.

  2. Reproduza a amostra de arquivo de vídeo a seguir no formato 5.1 para ouvir uma mixagem de som sem diálogo em todos os canais, exceto no canal central:

    sample_51_mix_movie.mp4
    

    O arquivo foi projetado para reprodução em um sistema de áudio 5.1. Se você estiver usando apenas fones de ouvido ou um sistema de dois canais, nem todos os canais poderão ser audíveis durante a reprodução. (Para ouvir todos os seis canais, a reprodução precisaria ser decodificada em um sistema 5.1 ou você precisaria criar um downmix estéreo de dois canais.)

    O ideal é usar o canal somente de diálogo para a Conversão de voz em texto. O arquivo de amostra tem áudio em cinco canais sem diálogo e diálogo em um canal. Na seção Otimizar arquivos de áudio para análise, você verá como extrair os seis canais de áudio mono individuais que estão codificados no arquivo 5.1 para ouvir cada faixa. Isso permite isolar o canal somente de diálogo (normalmente o canal central ou central frontal) dos canais que não são de diálogo para melhorar a capacidade da Conversão de voz em texto de transcrever o arquivo.

Testar o mesmo arquivo em diferentes taxas de amostragem

A tabela a seguir lista várias versões do mesmo arquivo de áudio para você ouvir, cada uma com uma profundidade de bits e uma taxa de amostragem diferentes.

Arquivo de áudio Taxa de amostragem / profundidade de bits
HumptyDumptySample4416.flac PCM linear de 44,1 kHz/16 bits
HumptyDumptySample2216.flac PCM linear de 22 kHz/16 bits
HumptyDumptySample1616.flac PCM linear de 16 kHz/16 bits
HumptyDumptySample1116.flac PCM linear de 11 kHz/16 bits
HumptyDumptySample0808.flac PCM linear de 8 kHz/8 bits
HumptyDumptyUpSample4416.flac PCM linear de 44,1 kHz (upsampled)/16 bits
HumptyDumptySample4408.flac PCM linear de 44,1 kHz/8 bits
HumptyDumptySample4408to16.flac PCM linear (convertido para cima) de 44,1 kHz/16 bits
  1. Clique no nome de cada arquivo na tabela anterior para ouvi-lo. O player de áudio é aberto em uma nova guia do navegador. Observe a diferença na qualidade quando a taxa de amostragem é reduzida.

    A fidelidade dos arquivos de 16 bits é reduzida nas taxas de amostragem mais baixas e a proporção de sinal para ruído é reduzida drasticamente nas versões de arquivos de 8 bits devido aos erros de quantização. O último arquivo na tabela é um arquivo original de 8 kHz/8 bits que foi ampliado para 44,1 kHz/16 bits. Observe que a qualidade do som é a mesma do arquivo de 8 kHz/8 bits.

  2. No Cloud Shell, examine os metadados do arquivo HumptyDumptySampleStereo.flac:

    ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
    

    A saída é esta:

    Input #0, flac, from 'project_files/HumptyDumptySampleStereo.flac':
        Duration: 00:00:26.28, start: 0.000000, bitrate: 378 kb/s
        Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
    

    A saída mostra o seguinte:

    • A duração do arquivo é de 26 segundos e 28 frames. Essas informações são úteis para casos de uso avançados. Por exemplo, se você quiser processar arquivos com mais de um minuto usando o comando gcloud speech recognize-long-running.
    • A taxa de bits do arquivo é 378 kb/s.
    • O número de streams no arquivo é 1. Isso é diferente do número de canais.
    • A taxa de amostragem do arquivo é 44,1 kHz.
    • O número de canais de áudio é 2 (estéreo).
    • A profundidade de bits do arquivo é de 16 bits.

    Um stream de transporte pode conter vários streams, incluindo áudio, vídeo e metadados. Cada um deles tem características diferentes, como o número de canais de áudio por stream, o codec dos streams de vídeo e o número de quadros por segundo dos streams de vídeo.

    Observe que os metadados revelam que este é um arquivo estéreo. Isso é importante porque o número padrão de canais de áudio recomendados para análise com a Conversão de voz em texto é um canal mono.

Transcrever arquivos usando o Speech-to-Text

Agora que você extraiu os arquivos mono, pode usar a Conversão de voz em texto para transcrever as faixas de áudio. Você usa o comando gcloud ml speech, que invoca a API Speech-to-Text.

  • Transcreva o arquivo de diálogo Alice_FC.flac limpo:

    gcloud ml speech recognize ~/output/Alice_FC.flac \
        --language-code='en-US' --format=text
    

    Aguarde alguns segundos para concluir a transcrição. A saída é esta:

    results[0].alternatives[0].confidence: 0.952115
    results[0].alternatives[0].transcript: the walrus and the carpenter were walking close at hand they whip like anything to see such quantities of sand if this were only cleared away they said it would be grand
    results[1].alternatives[0].confidence: 0.968585
    results[1].alternatives[0].transcript: " if 7 Maids with seven mops swept it for half a year do you suppose the walrus said that they could get it clear I doubt it said the Carpenter and shed a bitter tear"
    results[2].alternatives[0].confidence: 0.960146
    results[2].alternatives[0].transcript: " oysters come and walk with us the walrus did beseech a pleasant walk a pleasant talk along the Briny Beach we cannot do with more than four to give a hand to each the eldest oyster look at him but never a word he said the eldest oyster winked his eye and shook his heavy head"
    

Transcreva uma faixa “suja”

É possível ter arquivos de áudio de pessoas falando que têm outros elementos de som misturados no diálogo. Elas costumam ser chamadas de faixas "sujas", ao contrário da faixa "limpa", que não tem outros elementos misturados. Embora a Conversão de voz em texto possa reconhecer a fala em ambientes com ruído, os resultados podem ser menos precisos que para as faixas limpas. Podem ser necessários filtragem e processamento de áudio adicionais para melhorar a inteligibilidade do diálogo antes de analisar o arquivo com a Conversão de voz em texto.

Nesta seção, você transcreve um downmix mono do arquivo de áudio 5.1 analisado no exemplo anterior.

  1. No Cloud Shell, transcreva o arquivo Alice_mono_downmix.flac:

    gcloud ml speech recognize $PROJECT_FILES/Alice_mono_downmix.flac \
        --language-code='en-US' --format=text
    

    A saída é esta:

    results[0].alternatives[0].confidence: 0.891331
    results[0].alternatives[0].transcript: the walrus and the carpenter Milwaukee Corsicana they reflect anything to see such quantity if this were only
    results[1].alternatives[0].confidence: 0.846227
    results[1].alternatives[0].transcript: " it's Sunday 7th March 23rd happy few supposed former said that they could get it clear I doubt it to the doctor and she said it did it to just come and walk with us"
    results[2].alternatives[0].confidence: 0.917319
    results[2].alternatives[0].transcript: " along the Briny Beach it cannot do with more than four to give a hand to each the eldest oyster look at him but he said it was poised to Rich's eye and shook his head"
    

    Os resultados dessa análise são imprecisos devido aos sons adicionais que encobrem o diálogo. O nível de confiança da transcrição está abaixo de 85%. Como é possível ver pela saída, o texto não corresponde ao diálogo na gravação da forma que deveria.

Transcrever arquivos de áudio de diferentes taxas de amostragem e profundidade de bits

Para entender melhor como a taxa de amostragem e a profundidade de bits afetam a transcrição, nesta seção você transcreve o mesmo arquivo de áudio gravado em uma variedade de taxas de amostragem e de profundidades de bits. Isso permite que você veja o nível de confiança da Conversão de voz em texto e a relação dele com a qualidade do som geral.

  1. Clique nos nomes dos arquivos na tabela a seguir para ouvir a amostra e observar a diferença na qualidade. Cada vez que você clica no nome de um arquivo, o arquivo de áudio é reproduzido em uma nova guia no navegador.

    Nome do arquivo de áudio Especificações do arquivo
    Speech_11k8b.flac Taxa de amostragem de 11025 Hz, profundidade de 8 bits
    Speech_16k8b.flac Taxa de amostragem de 16 kHz, profundidade de 8 bits
    Speech_16k16b.flac Taxa de amostragem de 16 kHz, profundidade de 16 bits
    Speech_441k8b.flac Taxa de amostragem de 44100 Hz, profundidade de 8 bits
    Speech_441k16b.flac Taxa de amostragem de 44100Hz, profundidade de 16 bits
  2. No Cloud Shell, transcreva o arquivo Speech_11k8b.flac, que representa a menor qualidade de áudio neste exemplo:

    gcloud ml speech recognize $PROJECT_FILES/Speech_11k8b.flac \
        --language-code='en-US' --format=text
    

    A saída é esta:

    results[0].alternatives[0].confidence: 0.77032
    results[0].alternatives[0].transcript: number of Pentacle represent
    results[1].alternatives[0].confidence: 0.819939
    results[1].alternatives[0].transcript: " what people can get in trouble if we take a look at the X again"
    
  3. Transcreva o arquivo Speech_441k16b.flac, que é gravado com uma fidelidade significativamente maior:

    gcloud ml speech recognize $PROJECT_FILES/Speech_441k16b.flac \
        --language-code='en-US' --format=text
    

    A saída é esta:

    results[0].alternatives[0].confidence: 0.934018
    results[0].alternatives[0].transcript: that gives us the number of pixels per inch when magnified to a 40-foot screen size now we take that number and multiply it by the distance between our eyes the interocular distance of 2 and 1/2 inch number of 10 pixels in other words on a 40-foot screen 10 pixels of information represents 2 and 1/2 in anything farther apart than that and positive Parallax is going to start to force the eyes to rotate that word in order to use the image
    results[1].alternatives[0].confidence: 0.956892
    results[1].alternatives[0].transcript: " where people tend to get in trouble is by looking at these images on a small monitor now if we take a look at the same math using a smaller monitor in this case 60 in the screen size in the resolution to multiply It Again by the distance between our eyes we end up with eighty pixels of Divergence on a monitor which equals two and a half inches so on the monitor things might look fine but when magnified up to the larger screen in this case for defeat we've created a situation that's eight times what we can stand to look at its very painful and should be avoided"
    

    Observe a diferença de confiança na saída dos dois exemplos. O primeiro arquivo (Speech_11k8b.flac), que foi gravado a 11 kHz com profundidade de 8 bits, tem um nível de confiança abaixo de 78%. O segundo arquivo tem um nível de confiança de aproximadamente 94%.

  4. Opcionalmente, transcreva os outros arquivos listados na tabela na etapa 1 para fazer outras comparações entre a taxa de amostragem do arquivo de áudio e a precisão da profundidade de bits.

A tabela a seguir mostra um resumo da saída da Conversão de voz em texto para cada um dos arquivos listados na tabela na etapa 1 do procedimento anterior. Observe a diferença nos resultados do nível de confiança para cada tipo de arquivo. Os resultados podem variar um pouco. As transcrições dos arquivos de áudio que têm a taxa de bits e de amostragem mais baixas tendem a ter resultados de confiança menores devido à qualidade do som mais baixa.

Nome do arquivo de áudio Confiança (seção um) Confiança (seção dois)
Speech_11k8b.flac 0.770318 0.81994
Speech_16k8b.flac 0.935356 0.959684
Speech_16k16b.flac 0.945423 0.964689
Speech_44.1k8b.flac 0.934017 0.956892
Speech_44.1k16b.flac 0.949069 0.961777

Otimizar arquivos de vídeo para análise

Esta seção do tutorial orienta você pelas etapas necessárias para extrair o áudio 5.1 de um arquivo de filme.

  1. No Cloud Shell, extraia seis canais mono de um arquivo de filme 5.1 e converta os arquivos individuais para o formato FLAC:

    ffmpeg -i $PROJECT_FILES/sample_51_mix_movie.mp4 -filter_complex "channelsplit=channel_layout=5.1[FL][FR][FC][LFE][BL][BR]" -map "[FL]" output/sample_FL.flac -map "[FR]" output/sample_FR.flac -map "[FC]" output/sample_FC.flac -map "[LFE]" output/sample_LFE.flac -map "[BL]" output/sample_BL.flac -map "[BR]" output/sample_BR.flac
    

    Esse comando extrai os arquivos a seguir para o diretório de saída:

    sample_BL.flac
    sample_BR.flac
    sample_FC.flac
    sample_FL.flac
    sample_FR.flac
    sample_LFE.flac
    
  2. Verifique os metadados do arquivo de amostra:

    ffprobe $PROJECT_FILES/Speech_48kFloat.wav
    

    A saída é esta:

    Duration: 00:00:05.12, bitrate: 1536 kb/s
    Stream #0:0: Audio: pcm_f32le ([3][0][0][0] / 0x0003), 48000 Hz, mono, flt, 1536 kb/s
    

    Os valores de metadados pcm_f32le e flt indicam que esse arquivo tem uma taxa de bits de pontos flutuantes. Você precisa converter um arquivo WAV de taxa de bits de pontos flutuantes em um formato de número inteiro assinado.

  3. Converta a taxa de bits do arquivo em um formato de número inteiro assinado:

    ffmpeg -i $PROJECT_FILES/Speech_48kFloat.wav -c:a pcm_s16le output/Speech_48k16bNonFloatingPoint.wav
    

    Esse comando cria um arquivo WAV novo com taxa de bits no formato de número inteiro assinado.

  4. Examine os metadados do arquivo recém-criado:

    ffprobe ~/output/Speech_48k16bNonFloatingPoint.wav
    

    A saída é esta:

    Duration: 00:00:05.12, bitrate: 768 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, 1 channels, s16, 768 kb/s
    

    Os metadados agora mostram que a taxa de bits no arquivo convertido está em um formato de número inteiro assinado (little endian), conforme mostrado pelas designações pcm_s16le e s16.

Executar exemplos de tutorial em um terminal local

É possível executar todos os exemplos neste tutorial a partir de um terminal no seu computador local. Executar os exemplos localmente oferece um recurso importante para reproduzir arquivos de áudio e vídeo diretamente usando o comando ffplay (em vez de simplesmente ouvi-los no navegador).

  1. Em um terminal no seu computador local, instale a ferramenta FFMPEG:

    sudo apt update
    sudo apt install ffmpeg
    
  2. Faça o download dos arquivos de amostra para sua máquina local:

    gsutil -m cp gs://sa-speech-to-text-tutorial-bucket/project_files/*.* local_destination_path
    

    Substitua local_destination_path pelo local para colocar os arquivos de amostra.

  3. Defina a variável de ambiente LOCAL_PATH como o local no seu computador em que você fez o download dos arquivos de amostra:

    export LOCAL_PATH=local_destination_path
    

    Substitua local_destination_path pelo caminho da etapa anterior.

  4. No terminal, use o comando ffplay no terminal para ouvir um arquivo de áudio de amostra:

    • Arquivo de áudio: ffplay $LOCAL_PATH/HumptyDumpty4416.flac
    • Arquivo de vídeo: ffplay $LOCAL_PATH/sample_51_mix_movie.mp4
    • Reprodução do bucket do Cloud Storage: ffplay $GCS_BUCKET_PATH/HumptyDumpty4416.flac

    Faça experiências em seu terminal local com os exemplos com os quais você trabalhou anteriormente neste tutorial. Isso ajuda você a entender melhor como usar melhor a Conversão de voz em texto.

Como resolver problemas

Pode haver erros causados por diversos fatores, por isso vale a pena examinar alguns erros comuns e aprender a corrigi-los. Em um determinado arquivo de áudio, é possível encontrar vários erros que impedem a conclusão do processo de transcrição.

O áudio é muito longo

O comando gcloud speech recognize pode processar arquivos de até um minuto. Por exemplo, tente o exemplo a seguir:

gcloud ml speech recognize $PROJECT_FILES/HumptyDumpty4416.flac \
    --language-code='en-US' --format=text

A saída é esta:

ERROR: (gcloud.ml.speech.recognize) INVALID_ARGUMENT: Request payload size exceeds the limit: 10485760 bytes.

O erro é causado pela tentativa de usar o comando speech recognize para processar um arquivo com mais de um minuto.

Para arquivos com mais de 1 minuto e menos de 80 minutos, use o comando speech recognize-long-running. Para ver o comprimento do arquivo, use o comando ffprobe, como no exemplo a seguir:

ffprobe $PROJECT_FILES/HumptyDumpty4416.flac

A resposta será assim:

Duration: 00:04:07.91, start: 0.000000, bitrate: 280 kb/s
Stream #0:0: Audio: flac, 44100 Hz, mono, s16

Observe que o tempo de execução do arquivo de áudio é de aproximadamente 4 minutos e 8 segundos.

Ler arquivos grandes do computador local

O comando speech recognize-long-running pode processar arquivos de até um minuto no computador local. Para ver onde é possível encontrar um erro, tente usar o comando speech recognize-long-running no Cloud Shell para um arquivo mais longo:

gcloud ml speech recognize-long-running $PROJECT_FILES/HumptyDumpty4416.flac \
    --language-code='en-US' --format=text

A saída é esta:

ERROR: (gcloud.ml.speech.recognize-long-running) INVALID_ARGUMENT: Request payload size exceeds the limit: 10485760 bytes.

Esse erro não é resultado da duração do áudio, mas sim do tamanho do arquivo na máquina local. Quando você usa o comando recognize-long-running, o arquivo precisa estar em um bucket do Cloud Storage.

Para ler arquivos com mais de um minuto, use recognize-long-running para ler um arquivo de um bucket do Cloud Storage, como no comando a seguir:

gcloud ml speech recognize-long-running $GCS_BUCKET_PATH/HumptyDumpty4416.flac \
    --language-code='en-US' --format=text

Esse processo leva alguns minutos para ser concluído.

Limpeza

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

Exclua o projeto

  1. No Console do Cloud, acesse a página Gerenciar recursos:

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir