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
- 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.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init - 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.
- 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.
- 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)
-
In the Google Cloud console, activate Cloud Shell.
No Cloud Shell, instale a versão atual do FFMPEG:
sudo apt update sudo apt install ffmpegVerifique se o FFMPEG está instalado:
ffmpeg -versionSe for apresentado um número de versão, a instalação foi bem-sucedida.
Crie um diretório para os ficheiros do projeto:
mkdir project_filesCrie um diretório para os ficheiros de saída que vai criar num passo posterior:
mkdir outputTransfira os ficheiros de áudio de exemplo:
gcloud storage cp gs://cloud-samples-data/speech/project_files/*.* ~/project_files/Crie uma variável de ambiente para o nome do contentor do Cloud Storage:
export GCS_BUCKET_PATH=gs://cloud-samples-data/speech/project_filesCrie 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_filesNo Cloud Shell, revele os metadados do ficheiro
HumptyDumptySample4416.flac:ffprobe $PROJECT_FILES/HumptyDumptySample4416.flacO 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, s16Esta 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).
Revele os metadados do ficheiro
HumptyDumptySampleStereo.flac:ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flacO 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, s16As 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.
Revele os metadados de um ficheiro de mistura de áudio 5.1:
ffprobe $PROJECT_FILES/Alice_51_sample_mix.aifO 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/sUma 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.
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.Execute o comando
ffprobeno ficheiro:ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flacO 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
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.flacO 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: unknownEste ficheiro está agora otimizado para o STT na nuvem.
No Cloud Shell, divida o ficheiro
Alice_51_sample_mix.aifem 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.flacO 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 (...)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
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.
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.
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.
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.
No Cloud Shell, examine os metadados do ficheiro
HumptyDumptySampleStereo.flac:ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flacO 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, s16O 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.
- 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
Transcreva o ficheiro de diálogo
Alice_FC.flaclimpo:gcloud ml speech recognize ~/output/Alice_FC.flac \ --language-code='en-US' --format=textAguarde 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"
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=textO 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.
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.flacTaxa de amostragem de 11025 Hz, profundidade de 8 bits Speech_16k8b.flacTaxa de amostragem de 16 kHz, profundidade de 8 bits Speech_16k16b.flacTaxa de amostragem de 16 kHz, profundidade de 16 bits Speech_441k8b.flacTaxa de amostragem de 44 100 Hz, profundidade de 8 bits Speech_441k16b.flacTaxa de amostragem de 44 100 Hz, profundidade de 16 bits 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=textO 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"
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=textO 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%.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.
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.flacEste 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
Verifique os metadados do ficheiro de exemplo:
ffprobe $PROJECT_FILES/Speech_48kFloat.wavO 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_f32leefltindicam 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.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.wavEste comando cria um novo ficheiro WAV cuja taxa de bits está no formato de número inteiro com sinal.
Examine os metadados do ficheiro criado recentemente:
ffprobe ~/output/Speech_48k16bNonFloatingPoint.wavO 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_s16lees16.Num terminal no seu computador local, instale a ferramenta FFMPEG:
sudo apt update sudo apt install ffmpegTransfira 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.
Defina a variável de ambiente
LOCAL_PATHpara 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.
No terminal, use o comando
ffplaypara 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.
- Ficheiro de áudio:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
- Leia a documentação do Cloud STT .
- Leia a documentação para o comando speech recognize e o comando speech recognize-long-running.
- Trabalhe no codelab Transcrição de voz em texto com a Cloud Speech-to-Text API.
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:
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:
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:
É 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.
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.
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.
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.
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.
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
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) |
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 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.
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.
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.
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).
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.