Otimize ficheiros de áudio para o Cloud Speech-to-Text

Este tutorial mostra como executar uma verificação prévia em ficheiros de áudio que está a preparar para utilização com o Cloud Speech-to-Text. Fornece informações gerais sobre os formatos de ficheiros de áudio, descreve como otimizar os ficheiros de áudio para utilização com o STT do Google Cloud e como diagnosticar erros. Este tutorial destina-se a profissionais de meios de comunicação e entretenimento não técnicos e a profissionais de pós-produção. Não requer conhecimentos detalhados deGoogle Cloud; requer apenas conhecimentos básicos de como usar a ferramenta de linha de comandos gcloud com ficheiros armazenados localmente e num contentor do Cloud Storage.

Objetivos

  • Instale a ferramenta FFMPEG.
  • Transfira os ficheiros multimédia de exemplo.
  • Reproduza ficheiros de áudio e vídeo com o FFMPEG.
  • Extraia, transcodifique e converta propriedades de ficheiros de áudio com o FFMPEG.
  • Execute o STT na nuvem numa variedade de ficheiros de exemplo que contenham diálogo.

Custos

Este tutorial usa os seguintes componentes faturáveis do Google Cloud:

Pode usar a calculadora de preços para gerar uma estimativa de custo com base na sua utilização prevista.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.

  5. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  6. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  8. Verify that billing is enabled for your Google Cloud project.

  9. Install the Google Cloud CLI.

  10. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  11. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  12. Neste tutorial, usa o Cloud Shell para realizar os procedimentos, como copiar dados de um contentor do Cloud Storage para a sessão do Cloud Shell. O Cloud Shell é um ambiente de shell com a CLI do Google Cloud já instalada. Vai usar a CLI gcloud para muitos passos neste tutorial. Também instala software e ficheiros de áudio de exemplo na sua máquina local e executa estes mesmos exercícios a partir do terminal, conforme descrito na secção Executar exemplos de tutoriais num terminal local mais adiante.

    Vista geral

    Neste tutorial, vai usar o FFMPEG , uma ferramenta de código aberto para gravar, converter e fazer stream de áudio e vídeo. O tutorial fornece mais informações sobre esta ferramenta mais tarde.

    Compreenda os atributos dos ficheiros de som

    Esta secção descreve os tipos de ficheiros de áudio típicos, as taxas de amostragem, as profundidades de bits e os meios de gravação encontrados nos fluxos de trabalho de produção e pós-produção de multimédia.

    Para obter os melhores resultados do STT na nuvem, tem de se certificar de que os ficheiros usados para a transcrição são ficheiros monaurais (mono) que cumprem determinadas especificações mínimas, conforme descrito mais adiante. Se os ficheiros não cumprirem as especificações, pode ter de gerar ficheiros modificados. Por exemplo, pode ter de fazer o seguinte:

    • Extrair os dados de áudio de um ficheiro de vídeo.
    • Extrair uma única faixa monaural de um ficheiro de áudio com várias faixas.
    • Transcodificar de um codec de áudio para outro codec mais adequado para o STT do Google Cloud.

    Taxa de amostragem (intervalo de frequência)

    A taxa de amostragem determina o intervalo de frequência do ficheiro de áudio. Baseia-se no número de amostras por segundo que constituem o ficheiro de áudio. Normalmente, a frequência mais alta reproduzível de um ficheiro de áudio digital é equivalente a metade da taxa de amostragem. Por exemplo, a frequência mais alta que pode ser reproduzida a partir de um ficheiro de áudio de 44,1 kHz é de aproximadamente 22 kHz, que se encontra no limite superior ou além do intervalo de resposta de frequência da audição de um ouvinte típico.

    As taxas de amostragem em telefonia e telecomunicações tendem a estar no intervalo de 8 kHz a 16 kHz. Este tutorial centra-se em formatos específicos da indústria de multimédia e entretenimento, que são normalmente superiores a 16 kHz. Para mais informações sobre telefonia e outras aplicações de som, consulte o artigo Transcrever áudio do telemóvel com modelos melhorados .

    Recomendamos uma taxa de amostragem de, pelo menos, 16 kHz nos ficheiros de áudio que usa para a transcrição com o Cloud STT. As taxas de amostragem encontradas em ficheiros de áudio são normalmente de 16 kHz, 32 kHz, 44, 1 kHz e 48 kHz. Uma vez que a inteligibilidade é muito afetada pelo intervalo de frequências, especialmente nas frequências mais altas, uma taxa de amostragem inferior a 16 kHz resulta num ficheiro de áudio com pouca ou nenhuma informação acima de 8 kHz. Isto pode impedir que o STT na nuvem transcreva corretamente o áudio falado. A inteligibilidade da voz requer informações em toda a gama de 2 kHz a 4 kHz, embora as harmónicas (múltiplos) dessas frequências na gama mais alta também sejam importantes para preservar a inteligibilidade da voz. Por conseguinte, manter a taxa de amostragem num mínimo de 16 kHz é uma boa prática.

    É possível converter de uma taxa de amostragem para outra. No entanto, não existe qualquer vantagem em aumentar a taxa de amostragem do áudio, uma vez que as informações do intervalo de frequências são limitadas pela taxa de amostragem mais baixa e não podem ser recuperadas através da conversão para uma taxa de amostragem mais alta. Isto significa que a sobreamostragem de 8 kHz para 44,1 kHz limitaria o intervalo de frequências reproduzível a metade da taxa de amostragem inferior, ou aproximadamente 4 kHz. Neste tutorial, ouve ficheiros de áudio gravados a várias taxas de amostragem e profundidades de bits para poder ouvir a diferença.

    Profundidade de bits (intervalo dinâmico)

    A profundidade de bits do ficheiro de áudio determina o intervalo entre os sons mais baixos e os sons mais altos, bem como a relação sinal/ruído do ficheiro. A gama dinâmica tem menos efeito na qualidade da transcrição do que a resposta de frequência, mas as profundidades de bits iguais ou inferiores a 8 bits podem causar ruído de quantização excessivo na faixa de áudio, o que dificulta 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 distorção audível que afeta diretamente a fidelidade do som.) A profundidade de bits recomendada dos ficheiros para análise com o STT do Google Cloud é de 16 bits ou superior. Tal como acontece com a frequência de amostragem, não existe vantagem em converter a profundidade de bits de 8 para 16 bits, porque as informações do intervalo dinâmico estão limitadas ao formato original de 8 bits.

    Meio de gravação

    O meio de gravação original também pode afetar a qualidade do ficheiro de áudio. Por exemplo, o conteúdo de áudio gravado originalmente numa fita magnética pode ter um chiado de fundo incorporado no ficheiro. Em alguns casos, pode ter de pré-processar o áudio com ruído para obter melhores resultados no processo de transcrição quando usa o STT na nuvem. O tratamento de gravações com ruído e a interferência de ruído de fundo estão fora do âmbito deste tutorial. Para mais informações, consulte as práticas recomendadas na documentação do Cloud STT.

    Introdução ao FFMPEG

    Neste tutorial, vai usar o FFMPEG para trabalhar com ficheiros de áudio. O conjunto de ferramentas FFMPEG oferece uma grande variedade de funções, incluindo as seguintes:

    • Ouvir um ficheiro de áudio ou ver um ficheiro de vídeo.
    • Converter ficheiros de áudio num dos codecs reconhecidos pelo STT na nuvem.
    • Converter as taxas de amostragem e as taxas de bits dos ficheiros de áudio em configurações ideais para análise pelo Cloud STT.
    • Extrair faixas de áudio ou streams individuais de um ficheiro de stream de transporte ou de um ficheiro de vídeo.
    • Dividir ficheiros estéreo em dois ficheiros mono.
    • Dividir ficheiros de áudio 5.1 em seis ficheiros monaurais.
    • Aplicar equalização e filtragem para melhorar a clareza do áudio.

    Também pode usar a função ffprobe do FFMPEG para revelar metadados associados a um ficheiro multimédia. Isto é importante quando quer diagnosticar problemas relacionados com os tipos de ficheiros e os formatos para análise de aprendizagem automática.

    Codecs reconhecidos pelo STT do Cloud

    Embora o STT na nuvem reconheça vários formatos de ficheiros de áudio, pode não ler nem analisar determinados codecs corretamente. O tutorial mostra como pode verificar se o seu conteúdo está num dos formatos de ficheiro suportados.

    No tutorial, lê as informações de metadados para revelar e corrigir potenciais problemas antes de usar o STT do Google Cloud. As mesmas ferramentas permitem-lhe converter o ficheiro num formato suportado se descobrir uma incompatibilidade.

    O Cloud STT reconhece os seguintes codecs:

    • FLAC: Free Lossless Audio Codec
    • LINEAR16: um formato de modulação de código de impulsos (PCM) não comprimido usado em contentores WAV, AIFF, AU e RAW
    • MULAW: um codec PCM concebido para telecomunicações nos EUA e no Japão
    • AMR: um codec de taxa múltipla adaptável concebido para a voz
    • AMR_WB: uma variação de banda larga do AMR com o dobro da largura de banda do AMR
    • OGG_OPUS: um codec com perdas concebido para aplicações de baixa latência
    • SPEEX_WITH_HEADER_BYTE: um códex concebido para aplicações de voz sobre IP (VOIP)

    É importante compreender que os codecs e os formatos de ficheiros não são a mesma coisa. A extensão do nome do ficheiro não indica necessariamente que o codec usado na criação do ficheiro pode ser lido pelo STT do Google Cloud.

    Este tutorial centra-se nos codecs FLAC e LINEAR16, porque são frequentemente encontrados em ambientes de fluxo de trabalho de multimédia. Ambos são formatos sem perdas.

    Se usar ficheiros WAV (que estão no formato PCM linear não comprimido) com o Cloud STT, os ficheiros têm de ter uma profundidade máxima de 16 bits e ser codificados num formato não de vírgula flutuante. A extensão do nome de ficheiro .wav não garante que o ficheiro possa ser lido pelo STT na nuvem. A secção Otimize os ficheiros de áudio para análise deste tutorial fornece um exemplo de como converter o ficheiro de profundidade de bits de ponto flutuante para inteiro (com sinal) para transcrever o ficheiro no Cloud STT.

    Inicialize o seu ambiente

    Antes de realizar as tarefas deste tutorial, tem de inicializar o seu ambiente instalando o FFMPEG, definindo algumas variáveis de ambiente e transferindo ficheiros de áudio. Usa ficheiros multimédia armazenados numa instância do Cloud Shell e num contentor do Cloud Storage. A utilização de diferentes origens permite-lhe trabalhar com diferentes capacidades do STT do Google Cloud.

    Nesta secção, instala o FFMPEG e configura variáveis de ambiente que apontam para as localizações de armazenamento de dados de amostra no armazenamento da instância do Cloud Shell e num contentor do Cloud Storage. Os ficheiros multimédia são os mesmos em ambas as localizações, e alguns dos exemplos neste tutorial acedem a ficheiros a partir do Cloud Shell e do contentor do Cloud Storage. Pode instalar o FFMPEG na sua máquina local e executar estes mesmos exercícios, conforme descrito mais adiante na secção Executar exemplos de tutoriais num terminal local.

    1. In the Google Cloud console, activate Cloud Shell.

      Activate 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 for apresentado um número de versão, a instalação foi bem-sucedida.

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

      mkdir project_files
      
    5. Crie um diretório para os ficheiros de saída que vai criar num passo posterior:

      mkdir output
      
    6. Transfira os ficheiros de áudio de exemplo:

      gcloud storage cp gs://cloud-samples-data/speech/project_files/*.* ~/project_files/
      
    7. Crie uma variável de ambiente para o nome do contentor do Cloud Storage:

      export GCS_BUCKET_PATH=gs://cloud-samples-data/speech/project_files
      
    8. Crie uma variável de ambiente para o caminho do diretório da instância do Cloud Shell que aponta para os ficheiros de áudio de exemplo transferidos:

      export PROJECT_FILES=~/project_files
      
    9. Examine os metadados em ficheiros multimédia

      Quando analisa ficheiros de áudio ou vídeo com o STT na nuvem, tem de conhecer os detalhes dos metadados do ficheiro. Isto ajuda a identificar inconsistências ou parâmetros incompatíveis que possam causar problemas.

      Nesta secção, usa o comando ffprobe no FFMPEG para examinar os metadados de vários ficheiros multimédia e compreender as especificações de um ficheiro.

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

        ffprobe $PROJECT_FILES/HumptyDumptySample4416.flac
        

        O resultado é o seguinte:

        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
        

        Esta saída indica os seguintes metadados sobre o ficheiro:

        • A duração do ficheiro 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 ficheiro é um ficheiro mono de canal único.
        • A profundidade de bits é de 16 bits (número inteiro com sinal).
      2. Revele os metadados do ficheiro HumptyDumptySampleStereo.flac:

        ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
        

        O resultado é o seguinte:

        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 ficheiro e o anterior são que este é um ficheiro estéreo com uma taxa de bits mais elevada (378 KB/segundo em vez de 283 KB/segundo) porque contém reprodução de dois canais em vez de uma faixa mono. Todos os outros valores são iguais.

        Deve verificar o número de canais num ficheiro de áudio que quer processar através do STT na nuvem. Os ficheiros de áudio devem ter apenas um canal de áudio. Para transcrever vários canais de áudio no mesmo ficheiro, recomendamos que crie um script dos comandos, conforme descrito na secção Otimize os ficheiros de áudio para análise mais adiante.

      3. Revele os metadados de um ficheiro de mistura de áudio 5.1:

        ffprobe $PROJECT_FILES/Alice_51_sample_mix.aif
        

        O resultado é o seguinte:

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

        Uma vez que este ficheiro está num formato diferente do ficheiro mono ou estéreo, são apresentadas informações adicionais. Neste caso, o áudio está num formato PCM linear, gravado a uma taxa de amostragem de 44,1 kHz e uma taxa de bits de 16 bits (inteiro assinado, little-endian).

        Repare na designação 5.1. A taxa de dados de 4608 Kbits por segundo neste ficheiro é significativamente superior à taxa de qualquer um dos exemplos anteriores, porque o ficheiro de áudio contém 6 faixas de áudio.

        Mais adiante neste tutorial, vai ver como este ficheiro causa erros quando tenta transcrevê-lo com o STT do Google Cloud. Mais importante, vai ver como otimizar o ficheiro para o usar com o STT na nuvem sem erros.

      Otimize os ficheiros de áudio para análise

      Conforme mencionado anteriormente, quando usa o STT na nuvem, os ficheiros de áudio têm de ser ficheiros mono de canal único para evitar erros no processo de transcrição. A tabela seguinte mostra os formatos de áudio comuns e o processo de conversão para converter ficheiros mono para processamento.

      Formato de áudio atual Processo de conversão Formato de áudio de saída
      Mono Não é necessária extração FLAC ou LINEAR16
      Estéreo Divida em 2 ficheiros mono ou reduza para um ficheiro mono FLAC ou LINEAR16
      Multipista (5.1) Dividido em 6 ficheiros mono FLAC ou LINEAR16
      Áudio/vídeo em vários streams Divida em ficheiros mono separados FLAC ou LINEAR16

      Para processar ficheiros com várias faixas de áudio, extraia faixas mono do ficheiro estéreo com o FFMPEG ou outras ferramentas de edição de áudio. Em alternativa, pode automatizar o processo conforme descrito na secção Transcrever áudio com vários canais da documentação do Cloud STT. Neste tutorial, vai explorar a opção de usar o FFMPEG para extrair faixas mono individuais do ficheiro estéreo.

      Conforme mostrado na secção anterior, pode usar o comando ffprobe para determinar quantos canais de áudio um ficheiro contém e, em seguida, usar o comando ffmpeg para extrair ou converter o ficheiro para um formato mono, se necessário.

      Pré-visualize um erro com base num formato inválido

      Para ver como um formato incorreto afeta a transcrição, pode tentar executar o Cloud STT num ficheiro que não esteja no formato mono.

      1. No Cloud Shell, execute o STT na nuvem no ficheiro HumptyDumptySampleStereo.flac:

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

        O resultado é o seguinte:

        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 ficheiro estejam corretos, o descritor estéreo significa que existem duas faixas no ficheiro de áudio. Por conseguinte, a execução do STT na nuvem provoca um erro Invalid audio channel count.

      2. Execute o comando ffprobe no ficheiro:

        ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
        

        O resultado é o seguinte:

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

        Isto revela que o erro do STT na nuvem é causado pela tentativa de processar um ficheiro estéreo

      Para informações sobre como gerir ficheiros estéreo através de scripts, consulte o artigo Transcrever áudio com vários canais na documentação do Cloud STT.

      Divida um ficheiro estéreo em vários ficheiros mono FLAC

      Um exemplo de como evitar o erro de várias faixas é extrair duas faixas mono de um ficheiro de áudio estéreo. As faixas resultantes estão no formato FLAC e são escritas no diretório de saída. Quando extrai dois ficheiros mono de um ficheiro estéreo, é recomendável criar nomes para os ficheiros extraídos que indiquem a localização do canal do ficheiro original. Por exemplo, no procedimento seguinte, designa o canal esquerdo com o sufixo FL e designa o canal direito com o sufixo FR.

      Se a amostra de áudio a transcrever estiver em ambos os canais, só é usado um canal para a transcrição. No entanto, se diferentes oradores forem gravados em canais diferentes, recomendamos que transcreva os canais separadamente. O STT na nuvem pode reconhecer várias vozes numa única gravação. No entanto, isolar cada voz em canais separados resulta em níveis de confiança mais elevados na transcrição. (O valor de confiança também é denominado taxa de erro de palavras ou WER no reconhecimento de voz.) Para mais informações sobre como trabalhar com várias vozes na mesma gravação, consulte o artigo Separar diferentes oradores numa gravação de áudio na documentação do STT na nuvem.

      • No Cloud Shell, divida o ficheiro HumptyDumptySampleStereo.flacestéreo em 2 ficheiros 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
        

        O resultado é o seguinte, que mostra os ficheiros mono HumptyDumptySample_FL.flac(canal frontal esquerdo) eHumptyDumptySample_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 ficheiro está agora otimizado para o STT na nuvem.

      Divida um ficheiro de áudio 5.1 em vários ficheiros mono

      Outro exemplo de como otimizar ficheiros de áudio é dividi-los em ficheiros mono FLAC individuais. Quando se refere a canais numa mistura multicanal, como uma mistura 5.1, as designações dos nomes de ficheiros são normalmente diferentes das dos ficheiros estéreo ou mono. Normalmente, o ficheiro do canal esquerdo é designado como FL para a frente esquerda e o canal direito é designado como FR para a frente direita. Os canais restantes de uma mistura 5.1 são referidos aqui como FC para o centro frontal, LFE para efeitos de baixa frequência, BL para a parte traseira esquerda (também conhecida como surround esquerdo) e BR para a parte traseira direita (também conhecida como surround direito). Estas não são designações padrão, mas são uma prática convencional para identificar a origem de um ficheiro de som.

      Normalmente, em ficheiros de áudio multicanal para cinema e televisão, o diálogo principal é transmitido pelo canal central frontal. Normalmente, este é o ficheiro a escolher quando usa o STT na nuvem, porque contém normalmente a maior parte do diálogo na mistura.

      Num ambiente de pós-produção, os elementos principais de diálogo, música e efeitos são divididos em grupos denominados stems, para que todo o diálogo de uma mistura seja mantido separado da música e dos efeitos até à conclusão da mistura final. Porque o segmento de diálogo consiste apenas em diálogo, o Cloud STT dá melhores resultados quando transcreve os segmentos em vez de tentar extrair o canal central de uma mistura final. Isto deve-se ao facto de um canal central extraído poder ser misturado com sons que não são diálogos, o que prejudica a inteligibilidade.

      1. No Cloud Shell, divida o ficheiro Alice_51_sample_mix.aif em ficheiros FLAC, especificando os nomes dos ficheiros 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
        

        O resultado é o seguinte:

        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 seguinte ficheiro para o ouvir. Este ficheiro encontra-se no contentor do Cloud Storage e, quando clica no nome, o ficheiro é reproduzido num novo separador do navegador.

        Alice_mono_downmix.flac
        
      3. Ouça o FC (ficheiro de canal apenas central) que acabou de criar. (O diálogo começa após alguns segundos de silêncio.)

        Alice_FC.flac
        

        Repare na diferença de nitidez em relação ao ficheiro anterior. Esta faixa baseia-se apenas na parte de diálogo da mistura.

      Teste a qualidade do ficheiro de áudio

      Antes de converter os ficheiros multimédia com o STT na nuvem, é aconselhável ouvir os ficheiros para determinar se têm anomalias na qualidade do som que possam impedir as ferramentas de ML de fornecerem resultados precisos. Nesta secção, pode ouvir os ficheiros no navegador clicando nos respetivos nomes. (Recomendamos que use auscultadores ou altifalantes de ampla gama dinâmica.)

      Ouça o áudio de um ficheiro de vídeo

      1. Clique no seguinte ficheiro para o reproduzir:

        HumptyDumptySample4416.flac
        

        Este ficheiro tem uma frequência de 44,1 kHz e uma profundidade de bits de 16 bits. Repare na fidelidade clara e sem distorções, e na inteligibilidade deste ficheiro. Este é um bom candidato para transcrição através do STT do Google Cloud.

      2. Reproduza o seguinte ficheiro de vídeo de formato 5.1 de exemplo para ouvir uma mistura surround com não diálogo em todos os canais, exceto no canal central:

        sample_51_mix_movie.mp4
        

        O ficheiro foi concebido para reprodução num sistema de áudio 5.1. Se estiver a usar apenas auscultadores ou um sistema de dois canais, nem todos os canais podem ser audíveis durante a reprodução. (Para ouvir os seis canais, a reprodução teria de ser descodificada num sistema 5.1 ou teria de criar uma mistura estéreo de dois canais.)

        Idealmente, usa o canal apenas de diálogo para o STT do Google Cloud. O ficheiro de exemplo tem áudio sem diálogo em cinco canais e diálogo num canal. Na secção Otimize os ficheiros de áudio para análise, vai aprender a extrair os seis canais de áudio mono individuais codificados no ficheiro 5.1 para ouvir cada faixa. Isto permite-lhe isolar o canal apenas de diálogo (normalmente, o canal central ou central frontal) dos canais sem diálogo para melhorar a capacidade do STT do Google Cloud de transcrever o ficheiro.

      Teste o mesmo ficheiro com diferentes taxas de amostragem

      A tabela seguinte apresenta várias versões do mesmo ficheiro de áudio para ouvir, cada uma com uma profundidade de bits e uma taxa de amostragem diferentes.

      Ficheiro de áudio Taxa de amostragem/profundidade de bits
      HumptyDumptySample4416.flac 44,1 kHz/16 bits PCM linear
      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 44,1 kHz (com sobreamostragem)/PCM linear de 16 bits
      HumptyDumptySample4408.flac 44,1 kHz/PCM linear de 8 bits
      HumptyDumptySample4408to16.flac 44,1 kHz/16 bits PCM linear (conversão ascendente)
      1. Para cada ficheiro na tabela anterior, clique no nome do ficheiro para ouvir o ficheiro. (O leitor de áudio é aberto num novo separador do navegador.) Repare na diferença de qualidade quando a taxa de amostragem é diminuída.

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

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

        ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
        

        O resultado é o seguinte:

        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
        

        O resultado mostra o seguinte:

        • A duração do ficheiro é de 26 segundos e 28 frames. Estas informações são úteis para exemplos de utilização avançados, por exemplo, se quiser processar ficheiros com mais de 1 minuto através do comando gcloud speech recognize-long-running.
        • A taxa de bits do ficheiro é de 378 kb/s.
        • O número de streams no ficheiro é 1. (Isto é diferente do número de canais.)
        • A taxa de amostragem do ficheiro é de 44,1 kHz.
        • O número de canais de áudio é 2 (estéreo).
        • A profundidade de bits do ficheiro é de 16 bits.

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

        Repare que os metadados revelam que se trata de um ficheiro estéreo. Isto é importante, porque o número predefinido de canais de áudio recomendado para análise com o STT do Google Cloud é um canal mono.

      Transcreva ficheiros através do STT na nuvem

      Agora que extraiu os ficheiros mono, pode usar o STT na nuvem para transcrever as faixas de áudio. Usa o comando gcloud ml speech, que invoca a API Cloud STT.

      • Transcreva o ficheiro 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. O resultado é o seguinte:

        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"

      Pode ter ficheiros de áudio de pessoas a falar com outros elementos de som misturados no diálogo. Estes são frequentemente denominados faixas "sujas", em oposição à faixa "limpa" apenas com diálogos, que não tem outros elementos misturados. Embora o STT na nuvem possa reconhecer a voz em ambientes ruidosos, os resultados podem ser menos precisos do que para faixas limpas. Pode ser necessário filtrar e processar o áudio adicionalmente para melhorar a inteligibilidade do diálogo antes de analisar o ficheiro com o STT do Google Cloud.

      Nesta secção, transcreve uma mistura mono do ficheiro de áudio 5.1 que analisou no exemplo anterior.

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

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

        O resultado é o seguinte:

        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 desta análise são imprecisos devido aos sons adicionais que ocultam o diálogo. O nível de confiança da transcrição está abaixo de 85%. Como pode ver na saída, o texto não corresponde ao diálogo na gravação tão fielmente quanto deveria.

      Transcreva ficheiros de áudio com diferentes taxas de amostragem e profundidades de bits

      Para compreender melhor como a taxa de amostragem e a profundidade de bits afetam a transcrição, nesta secção, transcreve o mesmo ficheiro de áudio gravado numa variedade de taxas de amostragem e profundidades de bits. Isto permite-lhe ver o nível de confiança do STT na nuvem e a respetiva relação com a qualidade de som geral.

      1. Clique nos nomes dos ficheiros na tabela seguinte para ouvir a amostra e reparar na diferença de qualidade. Sempre que clica no nome de um ficheiro, o ficheiro de áudio é reproduzido num novo separador do navegador.

        Nome do ficheiro de áudio Especificações dos ficheiros
        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 44 100 Hz, profundidade de 8 bits
        Speech_441k16b.flac Taxa de amostragem de 44 100 Hz, profundidade de 16 bits
      2. No Cloud Shell, transcreva o ficheiro Speech_11k8b.flac, que representa a qualidade de áudio mais baixa neste exemplo:

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

        O resultado é o seguinte:

        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 ficheiro Speech_441k16b.flac, que é gravado com uma fidelidade significativamente superior:

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

        O resultado é o seguinte:

        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"
        

        Repare na diferença na confiança no resultado dos dois exemplos. O primeiro ficheiro (Speech_11k8b.flac), que foi gravado a 11 kHz com uma profundidade de 8 bits, tem um nível de confiança inferior a 78%. O segundo ficheiro tem um nível de confiança de cerca de 94%.

      4. Opcionalmente, transcreva os outros ficheiros indicados na tabela no passo 1 para fazer comparações adicionais entre a taxa de amostragem do ficheiro de áudio e a precisão da profundidade de bits.

      A tabela seguinte mostra um resumo da saída do STT na nuvem para cada um dos ficheiros indicados na tabela no passo 1 do procedimento anterior. Repare na diferença nos resultados do valor de confiança para cada tipo de ficheiro. (Os seus resultados podem variar ligeiramente.) As transcrições dos ficheiros de áudio com taxas de amostragem e de bits mais baixas tendem a ter resultados de confiança mais baixos devido à qualidade de som inferior.

      Nome do ficheiro de áudio Confiança (secção um) Confiança (secçã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

      Otimize ficheiros de vídeo para análise

      Esta secção do tutorial explica os passos necessários para extrair áudio 5.1 de um ficheiro de filme.

      1. No Cloud Shell, extraia 6 canais mono de um ficheiro de filme 5.1 e converta os ficheiros 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
        

        Este comando extrai os seguintes ficheiros 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 ficheiro de exemplo:

        ffprobe $PROJECT_FILES/Speech_48kFloat.wav
        

        O resultado é o seguinte:

        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 este ficheiro tem uma taxa de bits de ponto flutuante. Tem de converter um ficheiro WAV com uma taxa de bits de vírgula flutuante num formato de número inteiro com sinal.

      3. Converta a taxa de bits do ficheiro para um formato de número inteiro com sinal:

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

        Este comando cria um novo ficheiro WAV cuja taxa de bits está no formato de número inteiro com sinal.

      4. Examine os metadados do ficheiro criado recentemente:

        ffprobe ~/output/Speech_48k16bNonFloatingPoint.wav
        

        O resultado é o seguinte:

        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 mostram agora que a taxa de bits no ficheiro convertido está num formato de número inteiro com sinal (little-endian), conforme indicado pelas designações pcm_s16le e s16.

      Execute exemplos de tutoriais num terminal local

      Pode executar todos os exemplos neste tutorial a partir de um terminal no seu computador local. A execução dos exemplos localmente oferece uma capacidade importante para reproduzir ficheiros de áudio e vídeo diretamente através do comando ffplay (em vez de os ouvir no navegador).

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

        sudo apt update
        sudo apt install ffmpeg
        
      2. Transfira os ficheiros de exemplo para a sua máquina local:

        gcloud storage cp gs://cloud-samples-data/speech/project_files/*.* local_destination_path
        

        Substitua local_destination_path pela localização onde colocar os ficheiros de exemplo.

      3. Defina a variável de ambiente LOCAL_PATH para a localização no computador onde transferiu os ficheiros de exemplo:

        export LOCAL_PATH=local_destination_path
        

        Substitua local_destination_path pelo caminho do passo anterior.

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

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

        Experimente no seu terminal local com os exemplos com que trabalhou anteriormente neste tutorial. Isto ajuda a compreender melhor como usar o STT na nuvem da melhor forma.

      Resolução de problemas

      Os erros podem ser causados por vários fatores, por isso, vale a pena examinar alguns erros comuns e saber como corrigi-los. Pode ocorrer vários erros num determinado ficheiro de áudio que impedem a conclusão do processo de transcrição.

      O áudio é demasiado longo

      O comando gcloud speech recognize pode processar ficheiros com uma duração máxima de 1 minuto. Por exemplo, experimente o seguinte exemplo:

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

      O resultado é o seguinte:

      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 ficheiro com mais de 1 minuto.

      Para ficheiros com mais de 1 minuto e menos de 80 minutos, pode usar o comando speech recognize-long-running. Para ver a duração do ficheiro, pode usar o comando ffprobe, como no exemplo seguinte:

      ffprobe $PROJECT_FILES/HumptyDumpty4416.flac
      

      O resultado é semelhante ao seguinte:

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

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

      Leia ficheiros grandes a partir do seu computador local

      O comando speech recognize-long-running só pode processar ficheiros com uma duração máxima de 1 minuto a partir do computador local. Para ver onde pode encontrar um erro, experimente usar o comando speech recognize-long-running no Cloud Shell para um ficheiro mais longo:

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

      O resultado é o seguinte:

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

      Este erro não é resultado da duração do áudio, mas sim do tamanho do ficheiro na máquina local. Quando usa o comando recognize-long-running, o ficheiro tem de estar num contentor do Cloud Storage.

      Para ler ficheiros com mais de 1 minuto, use o comando recognize-long-running para ler um ficheiro de um contentor do Cloud Storage, como no comando seguinte:

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

      Este processo demora alguns minutos a ser concluído.

    Limpar

    Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.

    Elimine o projeto

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    O que se segue?