En este tutorial se explica cómo realizar una comprobación previa en archivos de audio que estés preparando para usar con Speech-to-Text.
En él se explica el contexto de los formatos de archivo de audio, se describe cómo optimizar los archivos de audio para usarlos con Speech-to-Text y se indica cómo diagnosticar errores. El tutorial está diseñado para profesionales del sector de los medios de comunicación y el entretenimiento, así como para profesionales de la posproducción, que no tengan conocimientos técnicos. No requiere conocimientos profundos deGoogle Cloud, solo conocimientos básicos sobre cómo usar la herramienta de línea de comandos gcloud
con archivos almacenados tanto de forma local como en un segmento de Cloud Storage.
Objetivos
- Instala la herramienta FFMPEG.
- Descarga los archivos multimedia de muestra.
- Reproduce archivos de audio y vídeo con FFMPEG.
- Extrae, transcodifica y convierte las propiedades de archivos de audio con FFmpeg.
- Ejecuta la transcripción de voz en varios archivos de muestra que contengan diálogos.
Costes
En este tutorial se usan los siguientes componentes facturables de Google Cloud:
Puedes usar la calculadora de precios para generar una estimación de costes basada en el uso previsto.
Antes de empezar
- 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.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
- Extrae los datos de audio de un archivo de vídeo.
- Extrae una sola pista monoaural de un archivo de audio multipista.
- Transcodifica de un códec de audio a otro que se adapte mejor a Speech-to-Text.
- Reproducir un archivo de audio o vídeo.
- Convertir archivos de audio a uno de los códecs reconocidos por Speech-to-Text.
- Convertir las frecuencias de muestreo y las tasas de bits de los archivos de audio a configuraciones óptimas para que Speech-to-Text pueda analizarlos.
- Extraer pistas o flujos de audio individuales de un archivo de flujo de transporte o de vídeo.
- Dividir archivos estéreo en dos archivos monoaurales.
- Dividir archivos de audio 5.1 en seis archivos monoaurales.
- Aplicar ecualización y filtrado para mejorar la claridad del audio.
- FLAC: Free Lossless Audio Codec (Códec de audio libre sin pérdidas)
- LINEAR16: un formato de modulación por impulsos codificados (PCM) sin comprimir que se usa en contenedores WAV, AIFF, AU y RAW.
- MULAW: un códec PCM diseñado para telecomunicaciones en Estados Unidos y Japón.
- AMR: un códec de tasa múltiple adaptativo diseñado para la voz
- AMR_WB: una variante de banda ancha de AMR con el doble de ancho de banda que AMR
- OGG_OPUS: un códec con pérdidas diseñado para aplicaciones de baja latencia.
- SPEEX_WITH_HEADER_BYTE: un códec diseñado para aplicaciones de voz sobre IP (VoIP)
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
En Cloud Shell, instala la versión actual de FFMPEG:
sudo apt update sudo apt install ffmpeg
Comprueba que FFMPEG esté instalado:
ffmpeg -version
Si se muestra un número de versión, la instalación se ha realizado correctamente.
Crea un directorio para los archivos del proyecto:
mkdir project_files
Crea un directorio para los archivos de salida que crearás en un paso posterior:
mkdir output
Descarga los archivos de audio de muestra:
gcloud storage cp gs://cloud-samples-data/speech/project_files/*.* ~/project_files/
Crea una variable de entorno para el nombre del segmento de Cloud Storage:
export GCS_BUCKET_PATH=gs://cloud-samples-data/speech/project_files
Crea una variable de entorno para la ruta del directorio de la instancia de Cloud Shell que apunte a los archivos de audio de muestra descargados:
export PROJECT_FILES=~/project_files
En Cloud Shell, muestra los metadatos del archivo
HumptyDumptySample4416.flac
:ffprobe $PROJECT_FILES/HumptyDumptySample4416.flac
El resultado es el siguiente:
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
Este resultado indica los siguientes metadatos sobre el archivo:
- La duración del archivo de audio es de 26,28 segundos.
- La tasa de bits es de 283 KB por segundo.
- El formato del códec es FLAC.
- La frecuencia de muestreo es de 44,1 kHz.
- El archivo es un archivo mono de un solo canal.
- La profundidad de bits es de 16 bits (número entero con signo).
Mostrar los metadatos del archivo
HumptyDumptySampleStereo.flac
:ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
El resultado es el siguiente:
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
La diferencia entre este archivo y el anterior es que este es un archivo estéreo que tiene un bitrate más alto (378 KB/s en lugar de 283 KB/s) porque contiene una reproducción de dos canales en lugar de una pista mono. Todos los demás valores son iguales.
Debes comprobar el número de canales de un archivo de audio que quieras procesar con Speech-to-Text. Los archivos de audio solo deben tener un canal de audio. Para transcribir varios canales de audio en el mismo archivo, te recomendamos que escribas los comandos tal como se indica en la sección Optimizar archivos de audio para el análisis más adelante.
Para ver los metadatos de un archivo de mezcla de audio 5.1, sigue estos pasos:
ffprobe $PROJECT_FILES/Alice_51_sample_mix.aif
El resultado es el siguiente:
Duration: 00:00:58.27, bitrate: 4610 kb/s Stream #0:0: Audio: pcm_s16be, 48000 Hz, 5.1, s16, 4608 kb/s
Como este archivo tiene un formato diferente al del archivo mono o estéreo, se muestra información adicional. En este caso, el audio está en formato PCM lineal, grabado a una frecuencia de muestreo de 44,1 kHz y una tasa de bits de 16 bits (número entero con signo, little-endian).
Fíjate en la designación
5.1
. La tasa de datos de 4608 Kbits por segundo de este archivo es significativamente superior a la de los ejemplos anteriores, ya que el archivo de audio contiene 6 pistas de audio.Más adelante en este tutorial, verás cómo este archivo provoca errores cuando intentas transcribirlo con Speech-to-Text. Lo que es más importante, verás cómo optimizar el archivo para usarlo con Speech-to-Text sin errores.
En Cloud Shell, ejecuta Speech-to-Text en el archivo
HumptyDumptySampleStereo.flac
:gcloud ml speech recognize $PROJECT_FILES/HumptyDumptySampleStereo.flac \ --language-code='en-US'
El resultado es el siguiente:
ERROR: (gcloud.ml.speech.recognize) INVALID_ARGUMENT: Invalid audio channel count
Aunque el formato del códec, la frecuencia de muestreo y la profundidad de bits del archivo son correctos, el descriptor estéreo indica que hay dos pistas en el archivo de audio. Por lo tanto, al ejecutar Speech-to-Text se produce un error
Invalid audio channel count
.Ejecuta el comando
ffprobe
en el archivo:ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
El resultado es el siguiente:
Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
Esto revela que el error de Speech-to-Text se debe a que se ha intentado procesar un archivo estéreo.
En Cloud Shell, divide el archivo
HumptyDumptySampleStereo.flac
estéreo en dos archivos 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
El resultado es el siguiente, que muestra los archivos mono
HumptyDumptySample_FL.flac
(canal frontal izquierdo) yHumptyDumptySample_FR.flac
(canal frontal derecho).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
Ahora el archivo está optimizado para la transcripción de voz.
En Cloud Shell, divide el archivo
Alice_51_sample_mix.aif
en archivos FLAC y especifica los nombres de los archivos de salida de 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
El resultado es el siguiente:
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 (...)
Haz clic en el siguiente archivo para escucharlo. Este archivo se encuentra en el segmento de Cloud Storage y, al hacer clic en el nombre, se reproduce en una nueva pestaña del navegador.
Alice_mono_downmix.flac
Escucha el archivo del canal FC (solo el canal central) que acabas de crear. (El diálogo empieza después de unos segundos de silencio).
Alice_FC.flac
Observa la diferencia de nitidez con respecto al archivo anterior. Esta pista se basa únicamente en la parte de diálogo de la mezcla.
Haz clic en el siguiente archivo para reproducirlo:
HumptyDumptySample4416.flac
Este archivo tiene una frecuencia de 44,1 kHz y una profundidad de bits de 16 bits. Observa la fidelidad clara y sin distorsiones, así como la inteligibilidad de este archivo. Este audio es un buen candidato para transcribirse con Speech-to-Text.
Reproduce el siguiente archivo de vídeo de muestra en formato 5.1 para escuchar una mezcla envolvente con elementos que no son diálogos en todos los canales, excepto en el central:
sample_51_mix_movie.mp4
El archivo está diseñado para reproducirse en un sistema de audio 5.1. Si solo usas auriculares o un sistema de dos canales, es posible que no se oigan todos los canales durante la reproducción. Para oír los seis canales, la reproducción debe decodificarse en un sistema 5.1 o debes crear una mezcla estéreo de dos canales.
Lo ideal es que uses el canal de solo diálogo para Speech-to-Text. El archivo de ejemplo tiene audio que no son diálogos en cinco canales y diálogos en un canal. En la sección Optimizar archivos de audio para el análisis, que se encuentra más adelante, aprenderás a extraer los seis canales de audio mono individuales que están codificados en el archivo 5.1 para escuchar cada pista. De esta forma, puedes aislar el canal solo de diálogo (normalmente, el canal central o el frontal central) de los canales que no son de diálogo para mejorar la capacidad de Speech-to-Text de transcribir el archivo.
En la tabla anterior, haz clic en el nombre de cada archivo para escucharlo. El reproductor de audio se abre en una nueva pestaña del navegador. Observa la diferencia de calidad cuando se reduce la frecuencia de muestreo.
La fidelidad de los archivos de 16 bits se reduce a frecuencias de muestreo más bajas y la relación señal/ruido se reduce drásticamente en las versiones de archivos de 8 bits debido a los errores de cuantificación. El último archivo de la tabla es un archivo original de 8 kHz y 8 bits que se ha muestreado a 44,1 kHz y 16 bits. Ten en cuenta que la calidad del sonido es la misma que la del archivo de 8 kHz/8 bits.
En Cloud Shell, examina los metadatos del archivo
HumptyDumptySampleStereo.flac
:ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
El resultado es el siguiente:
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
El resultado muestra lo siguiente:
- La duración del archivo es de 26 segundos y 28 fotogramas. Esta información es útil en casos prácticos avanzados, por ejemplo, si quieres procesar archivos de más de 1 minuto con el comando
gcloud speech recognize-long-running
. - La tasa de bits del archivo es de 378 kb/s.
- El número de flujos del archivo es 1. No es lo mismo que el número de canales.
- La frecuencia de muestreo del archivo es de 44,1 kHz.
- El número de canales de audio es 2 (estéreo).
- La profundidad de bits del archivo es de 16 bits.
Un flujo de transporte puede contener varios flujos, como audio, vídeo y metadatos. Cada uno de ellos tiene características diferentes, como el número de canales de audio por emisión, el códec de las emisiones de vídeo y el número de fotogramas por segundo de las emisiones de vídeo.
Ten en cuenta que los metadatos revelan que se trata de un archivo estéreo. Esto es importante porque el número predeterminado de canales de audio recomendado para el análisis con Speech-to-Text es un canal mono.
- La duración del archivo es de 26 segundos y 28 fotogramas. Esta información es útil en casos prácticos avanzados, por ejemplo, si quieres procesar archivos de más de 1 minuto con el comando
Transcribe el archivo de diálogo
Alice_FC.flac
limpio:gcloud ml speech recognize ~/output/Alice_FC.flac \ --language-code='en-US' --format=text
Espera unos segundos para que se complete la transcripción. El resultado es el siguiente:
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"
En Cloud Shell, transcribe el archivo
Alice_mono_downmix.flac
:gcloud ml speech recognize $PROJECT_FILES/Alice_mono_downmix.flac \ --language-code='en-US' --format=text
El resultado es el siguiente:
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"
Los resultados de este análisis son imprecisos debido a los sonidos adicionales que enmascaran el diálogo. El nivel de confianza de la transcripción es inferior al 85%. Como puedes ver en el resultado, el texto no coincide con el diálogo de la grabación tanto como debería.
Haga clic en los nombres de los archivos de la tabla siguiente para escuchar la muestra y observe la diferencia de calidad. Cada vez que hagas clic en el nombre de un archivo, el archivo de audio se reproducirá en una nueva pestaña del navegador.
Nombre del archivo de audio Especificaciones de archivo Speech_11k8b.flac
Frecuencia de muestreo de 11025 Hz y profundidad de 8 bits Speech_16k8b.flac
Frecuencia de muestreo de 16 kHz y profundidad de 8 bits Speech_16k16b.flac
Frecuencia de muestreo de 16 kHz y profundidad de 16 bits Speech_441k8b.flac
Frecuencia de muestreo de 44.100 Hz y profundidad de 8 bits Speech_441k16b.flac
Frecuencia de muestreo de 44.100 Hz y profundidad de 16 bits En Cloud Shell, transcribe el archivo
Speech_11k8b.flac
, que representa la calidad de audio más baja de este ejemplo:gcloud ml speech recognize $PROJECT_FILES/Speech_11k8b.flac \ --language-code='en-US' --format=text
El resultado es el siguiente:
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"
Transcribe el archivo
Speech_441k16b.flac
, que se ha grabado con una fidelidad significativamente mayor:gcloud ml speech recognize $PROJECT_FILES/Speech_441k16b.flac \ --language-code='en-US' --format=text
El resultado es el siguiente:
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"
Observa la diferencia en la confianza en el resultado de los dos ejemplos. El primer archivo (
Speech_11k8b.flac
), que se grabó a 11 kHz con una profundidad de 8 bits, tiene un nivel de confianza inferior al 78%. El segundo archivo tiene un nivel de confianza de aproximadamente el 94%.Si quieres, transcribe los demás archivos que aparecen en la tabla del paso 1 para comparar con más detalle la precisión de la frecuencia de muestreo y la profundidad de bits de los archivos de audio.
En Cloud Shell, extrae 6 canales mono de un archivo de película 5.1 y convierte los archivos individuales al 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 extrae los siguientes archivos en el directorio de salida:
sample_BL.flac sample_BR.flac sample_FC.flac sample_FL.flac sample_FR.flac sample_LFE.flac
Comprueba los metadatos del archivo de muestra:
ffprobe $PROJECT_FILES/Speech_48kFloat.wav
El resultado es el siguiente:
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
Los valores de metadatos
pcm_f32le
yflt
indican que este archivo tiene una tasa de bits de coma flotante. Tienes que convertir un archivo WAV con una tasa de bits de punto flotante a un formato de entero con signo.Convierte la tasa de bits del archivo a un formato de entero con signo:
ffmpeg -i $PROJECT_FILES/Speech_48kFloat.wav -c:a pcm_s16le output/Speech_48k16bNonFloatingPoint.wav
Este comando crea un archivo WAV cuyo bitrate está en formato de entero con signo.
Examina los metadatos del archivo recién creado:
ffprobe ~/output/Speech_48k16bNonFloatingPoint.wav
El resultado es el siguiente:
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
Los metadatos ahora muestran que la tasa de bits del archivo convertido está en formato de entero con signo (little-endian), como indican las designaciones
pcm_s16le
ys16
.En una terminal de tu ordenador local, instala la herramienta FFMPEG:
sudo apt update sudo apt install ffmpeg
Descarga los archivos de muestra en tu máquina local:
gcloud storage cp gs://cloud-samples-data/speech/project_files/*.* local_destination_path
Sustituye local_destination_path por la ubicación en la que quieras colocar los archivos de ejemplo.
Define la variable de entorno
LOCAL_PATH
en la ubicación de tu ordenador donde hayas descargado los archivos de ejemplo:export LOCAL_PATH=local_destination_path
Sustituye local_destination_path por la ruta del paso anterior.
En el terminal, usa el comando
ffplay
para escuchar un archivo de audio de muestra:- Archivo de audio:
ffplay
$LOCAL_PATH/HumptyDumpty4416.flac
- Archivo de vídeo:
ffplay $LOCAL_PATH/sample_51_mix_movie.mp4
- Reproducción de segmentos de Cloud Storage:
ffplay
$GCS_BUCKET_PATH/HumptyDumpty4416.flac
Experimenta en tu terminal local con los ejemplos que has usado anteriormente en este tutorial. De esta forma, podrás entender mejor cómo usar Speech-to-Text.
- Archivo de audio:
- 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.
- Lee la documentación de Speech-to-Text.
- Lee la documentación de los comandos speech recognize y speech recognize-long-running.
- Sigue el codelab Transcripción de voz a texto con la API Cloud Speech-to-Text.
En este tutorial, usarás Cloud Shell para llevar a cabo los procedimientos, como copiar datos de un segmento de Cloud Storage a la sesión de Cloud Shell. Cloud Shell es un entorno de shell que ya tiene instalada la CLI de Google Cloud. En muchos pasos de este tutorial, se usa la CLI de gcloud. También instalarás software y archivos de audio de muestra en tu máquina local y realizarás estos mismos ejercicios desde tu terminal, tal como se describe en la sección Ejecutar ejemplos de tutoriales en un terminal local más adelante.
Información general
En este tutorial, usarás FFMPEG, una herramienta de código abierto para grabar, convertir y transmitir audio y vídeo. En el tutorial se ofrece más información sobre esta herramienta.
Información sobre los atributos de los archivos de sonido
En esta sección se describen los tipos de archivos de audio, las frecuencias de muestreo, las profundidades de bits y los medios de grabación habituales en los flujos de trabajo de producción y posproducción de contenido multimedia.
Para obtener los mejores resultados con la transcripción de voz a texto, debes asegurarte de que los archivos que se usen para la transcripción sean archivos monoaurales (mono) que cumplan ciertas especificaciones mínimas, tal como se describe más adelante. Si los archivos no cumplen las especificaciones, es posible que tengas que generar archivos modificados. Por ejemplo, puede que tengas que hacer lo siguiente:
Frecuencia de muestreo (rango de frecuencia)
La frecuencia de muestreo determina el intervalo de frecuencias del archivo de audio. Se basa en el número de muestras por segundo que componen el archivo de audio. Normalmente, la frecuencia reproducible más alta de un archivo de audio digital equivale a la mitad de la frecuencia de muestreo. Por ejemplo, la frecuencia más alta que se puede reproducir a partir de un archivo de audio de 44,1 kHz es de aproximadamente 22 kHz, que se encuentra en el extremo superior o más allá del intervalo de respuesta de frecuencia de la audición de un oyente medio.
Las frecuencias de muestreo en telefonía y telecomunicaciones suelen estar entre 8 y 16 kHz. Este tutorial se centra en formatos específicos del sector de los medios y el entretenimiento, que suelen ser superiores a 16 kHz. Para obtener más información sobre la telefonía y otras aplicaciones de sonido, consulta el artículo Transcribir audio telefónico con modelos mejorados.
Recomendamos que los archivos de audio que utilices para la transcripción con Speech-to-Text tengan una frecuencia de muestreo de al menos 16 kHz. Las frecuencias de muestreo que se encuentran en los archivos de audio suelen ser 16 kHz, 32 kHz, 44, 1 kHz y 48 kHz. Dado que la inteligibilidad se ve muy afectada por el intervalo de frecuencias, sobre todo en las frecuencias más altas, una frecuencia de muestreo inferior a 16 kHz da como resultado un archivo de audio que tiene poca o ninguna información por encima de 8 kHz. Esto puede impedir que la función de voz a texto transcriba correctamente el audio hablado. La inteligibilidad del habla requiere información en todo el intervalo de 2 a 4 kHz, aunque los armónicos (múltiplos) de esas frecuencias en el intervalo superior también son importantes para mantener la inteligibilidad del habla. Por lo tanto, es recomendable mantener la frecuencia de muestreo en un mínimo de 16 kHz.
Es posible convertir una frecuencia de muestreo en otra. Sin embargo, no tiene ninguna ventaja aumentar la frecuencia de muestreo del audio, ya que la información del intervalo de frecuencias está limitada por la frecuencia de muestreo más baja y no se puede recuperar convirtiendo el audio a una frecuencia de muestreo más alta. Esto significa que, si se aumenta el muestreo de 8 kHz a 44,1 kHz, el intervalo de frecuencias reproducibles se limitaría a la mitad de la frecuencia de muestreo más baja, es decir, a unos 4 kHz. En este tutorial, escucharás archivos de audio grabados con diferentes frecuencias de muestreo y profundidades de bits para que puedas apreciar la diferencia.
Profundidad de bits (rango dinámico)
La profundidad de bits del archivo de audio determina el intervalo entre los sonidos más bajos y los más altos, así como la relación señal/ruido del archivo. El rango dinámico influye menos en la calidad de la transcripción que la respuesta de frecuencia, pero las profundidades de bits iguales o inferiores a 8 bits pueden provocar un ruido de cuantización excesivo en la pista de audio, lo que dificulta la transcripción precisa. Los errores de cuantificación son errores de redondeo entre la señal de entrada analógica y la asignación del valor de salida digital de esa señal. Los errores provocan una distorsión audible que afecta directamente a la fidelidad del sonido. La profundidad de bits recomendada de los archivos para analizarlos con Transcripción de voz es de 16 bits o más. Al igual que ocurre con la frecuencia de muestreo, no hay ninguna ventaja en convertir la profundidad de bits de 8 a 16 bits, ya que la información del rango dinámico se limita al formato original de 8 bits.
Medio de grabación
El medio de grabación original también puede afectar a la calidad del archivo de audio. Por ejemplo, el contenido de audio que se grabó originalmente en una cinta magnética puede tener un siseo de fondo insertado en el archivo. En algunos casos, es posible que tengas que preprocesar el audio ruidoso para obtener mejores resultados en el proceso de transcripción cuando uses Speech-to-Text. El tratamiento de las grabaciones con ruido y las interferencias del ruido de fondo no se tratan en este tutorial. Para obtener más información, consulta las prácticas recomendadas en la documentación de Speech-to-Text.
Introducción a FFMPEG
En este tutorial, usarás FFMPEG para trabajar con archivos de audio. El conjunto de herramientas FFMPEG ofrece una gran variedad de funciones, entre las que se incluyen las siguientes:
También puedes usar la función ffprobe de FFMPEG para consultar los metadatos asociados a un archivo multimedia. Esto es importante cuando quieres diagnosticar problemas relacionados con los tipos y formatos de archivo para el análisis de aprendizaje automático.
Códecs reconocidos por Speech-to-Text
Aunque Speech-to-Text reconoce varios formatos de archivo de audio, es posible que no lea ni analice correctamente determinados códecs. En el tutorial se explica cómo puedes comprobar que tu contenido está en uno de los formatos de archivo admitidos.
En el tutorial, lees la información de los metadatos para detectar y corregir posibles problemas antes de usar Speech-to-Text. Las mismas herramientas te permiten convertir el archivo a un formato compatible si detectas alguna incompatibilidad.
Speech-to-Text reconoce los siguientes códecs:
Es importante saber que los códecs y los formatos de archivo no son lo mismo. La extensión del nombre de archivo no indica necesariamente que Speech-to-Text pueda leer el códec usado para crear el archivo.
Este tutorial se centra en los códecs FLAC y LINEAR16, ya que se encuentran con frecuencia en entornos de flujo de trabajo multimedia. Ambos son formatos sin pérdida.
Si usas archivos WAV (que están en formato PCM lineal sin comprimir) con Speech-to-Text, los archivos deben tener una profundidad máxima de 16 bits y estar codificados en un formato que no sea de coma flotante. La extensión de nombre de archivo .wav
no garantiza que Speech-to-Text pueda leer el archivo. En la sección Optimizar archivos de audio para el análisis de este tutorial se muestra un ejemplo de cómo convertir el archivo de coma flotante a profundidad de bits de número entero (con signo) para transcribirlo en Speech-to-Text.
Inicializa tu entorno
Antes de realizar las tareas de este tutorial, debes inicializar tu entorno instalando FFMPEG, definiendo algunas variables de entorno y descargando archivos de audio. Utilizas archivos multimedia almacenados tanto en una instancia de Cloud Shell como en un segmento de Cloud Storage. Usar diferentes fuentes te permite trabajar con distintas funciones de Speech-to-Text.
En esta sección, instalarás FFMPEG y configurarás variables de entorno que apunten a las ubicaciones de almacenamiento de datos de ejemplo en el almacenamiento de tu instancia de Cloud Shell y en un segmento de Cloud Storage. Los archivos multimedia son los mismos en ambas ubicaciones y algunos de los ejemplos de este tutorial acceden a los archivos tanto desde Cloud Shell como desde el segmento de Cloud Storage. Puedes instalar FFMPEG en tu máquina local y realizar estos mismos ejercicios, tal como se describe más adelante en la sección Ejecutar ejemplos del tutorial en una terminal local.
Examinar los metadatos de los archivos multimedia
Cuando analizas archivos de audio o vídeo con Speech-to-Text, debes conocer los detalles de los metadatos del archivo. Esto le ayudará a identificar incoherencias o parámetros incompatibles que puedan causar problemas.
En esta sección, usará el comando ffprobe
en FFMPEG para examinar los metadatos de varios archivos multimedia y conocer las especificaciones de un archivo.
Optimizar archivos de audio para el análisis
Como hemos mencionado antes, cuando usas Speech-to-Text, los archivos de audio deben ser archivos mono de un solo canal para evitar errores en el proceso de transcripción. En la siguiente tabla se muestran los formatos de audio habituales y el proceso de conversión de archivos mono para su procesamiento.
Formato de audio actual | Proceso de conversión | Formato de audio de salida |
---|---|---|
Mono | No es necesario extraer nada | FLAC o LINEAR16 |
Estéreo | Dividir en dos archivos mono o reducir a un archivo mono | FLAC o LINEAR16 |
Multipista (5.1) | Dividir en 6 archivos mono | FLAC o LINEAR16 |
Audio o vídeo con varias emisiones | Dividir en archivos mono independientes | FLAC o LINEAR16 |
Para procesar archivos con varias pistas de audio, extrae las pistas mono del archivo estéreo con FFMPEG u otras herramientas de edición de audio. También puedes automatizar el proceso como se describe en la sección Transcribir audio con varios canales de la documentación de Speech-to-Text. En este tutorial, se explica cómo usar FFMPEG para extraer pistas mono individuales del archivo estéreo.
Como se muestra en la sección anterior, puedes usar el comando ffprobe
para determinar cuántos canales de audio contiene un archivo y, a continuación, usar el comando ffmpeg
para extraer o convertir el archivo a un formato mono si es necesario.
Previsualizar un error basado en un formato no válido
Para ver cómo afecta un formato incorrecto a la transcripción, puedes probar a ejecutar Speech-to-Text en un archivo que no esté en formato mono.
Para obtener información sobre cómo gestionar archivos estéreo mediante secuencias de comandos, consulta el artículo Transcribir audio con varios canales de la documentación de Speech-to-Text.
Dividir un archivo estéreo en varios archivos mono FLAC
Un ejemplo de cómo evitar el error de varias pistas es extraer dos pistas mono de un archivo de audio estéreo. Las pistas resultantes están en formato FLAC y se escriben en el directorio de salida. Cuando extraigas dos archivos mono de un archivo estéreo, te recomendamos que les pongas nombres que indiquen la ubicación del canal del archivo original. Por ejemplo, en el siguiente procedimiento, se designa el canal izquierdo con el sufijo FL
y el derecho con el sufijo FR
.
Si la muestra de audio que se va a transcribir está en ambos canales, solo se usará uno para la transcripción. Sin embargo, si se graba a diferentes participantes en canales distintos, te recomendamos que transcribas los canales por separado. Speech-to-Text puede reconocer varias voces en una misma grabación. Sin embargo, aislar cada voz en canales independientes da como resultado niveles de confianza más altos en la transcripción. (El valor de confianza también se conoce como tasa de error de palabras o WER en el reconocimiento de voz). Para obtener más información sobre cómo trabajar con varias voces en la misma grabación, consulta el artículo Separar a diferentes interlocutores en una grabación de audio de la documentación de Speech-to-Text.
Dividir un archivo de audio 5.1 en varios archivos mono
Otro ejemplo de cómo optimizar archivos de audio es dividir los archivos de audio 5.1 en archivos mono FLAC individuales. Cuando se hace referencia a canales en una mezcla multicanal, como una mezcla 5.1, las designaciones de los nombres de archivo suelen ser diferentes a las de los archivos estéreo o mono. El archivo del canal izquierdo suele designarse como FL
para el canal delantero izquierdo, y el del canal derecho, como FR
para el canal delantero derecho. Los canales restantes de una mezcla 5.1 se denominan FC
para el centro delantero, LFE
para los efectos de baja frecuencia, BL
para el canal trasero izquierdo (también conocido como envolvente izquierdo) y BR
para el canal trasero derecho (también conocido como envolvente derecho). No se trata de designaciones estándar, pero es una práctica habitual para identificar el origen de un archivo de sonido.
Normalmente, en los archivos de audio multicanal de películas y series de televisión, el diálogo principal se transmite por el canal central delantero. Normalmente, este es el archivo que debes elegir cuando usas la función de transcripción de voz, ya que suele contener la mayor parte del diálogo de la mezcla.
En un entorno de posproducción, los elementos principales de los diálogos, la música y los efectos se dividen en grupos llamados pistas para que todos los diálogos de una mezcla se mantengan separados de la música y los efectos hasta que se complete la mezcla final. Como el stem de diálogo solo contiene diálogos, la conversión de voz a texto ofrece mejores resultados al transcribir los stems que al intentar extraer el canal central de una mezcla final. Esto se debe a que un canal central extraído podría mezclarse con sonidos que no son diálogos, lo que afectaría a la inteligibilidad.
Probar la calidad de un archivo de audio
Antes de convertir los archivos multimedia con Speech-to-Text, es recomendable que los escuches para determinar si tienen anomalías en la calidad del sonido que puedan impedir que las herramientas de aprendizaje automático proporcionen resultados precisos. En esta sección, puedes reproducir los archivos en tu navegador haciendo clic en sus nombres. Te recomendamos que uses auriculares o altavoces con un rango dinámico amplio.
Escuchar el audio de un archivo de vídeo
Probar el mismo archivo con diferentes frecuencias de muestreo
En la siguiente tabla se muestran varias versiones del mismo archivo de audio para que las escuches. Cada una tiene una profundidad de bits y una frecuencia de muestreo diferentes.
Archivo de audio | Frecuencia de muestreo/profundidad de bits |
---|---|
HumptyDumptySample4416.flac |
PCM lineal de 44,1 kHz/16 bits |
HumptyDumptySample2216.flac |
PCM lineal de 16 bits y 22 kHz |
HumptyDumptySample1616.flac |
PCM lineal de 16 kHz/16 bits |
HumptyDumptySample1116.flac |
PCM lineal de 11 kHz/16 bits |
HumptyDumptySample0808.flac |
PCM lineal de 8 kHz/8 bits |
HumptyDumptyUpSample4416.flac |
PCM lineal de 16 bits/44,1 kHz (muestreo superior) |
HumptyDumptySample4408.flac |
PCM lineal de 8 bits y 44,1 kHz |
HumptyDumptySample4408to16.flac |
PCM lineal de 44,1 kHz/16 bits (convertido a una resolución superior) |
Transcribir archivos con Speech-to-Text
Ahora que has extraído los archivos mono, puedes usar Speech-to-Text para transcribir las pistas de audio. Usas el comando gcloud ml speech
, que invoca la API Speech-to-Text.
Transcribir una pista "sucia"
Es posible que tengas archivos de audio de personas hablando que tengan otros elementos de sonido mezclados en el diálogo. A menudo se denominan pistas "sucias" en contraposición a las pistas "limpias" que solo contienen diálogos y no tienen otros elementos mezclados. Aunque la transcripción de voz puede reconocer la voz en entornos ruidosos, los resultados pueden ser menos precisos que en pistas limpias. Es posible que tengas que aplicar filtros y procesamientos de audio adicionales para mejorar la inteligibilidad del diálogo antes de analizar el archivo con Speech-to-Text.
En esta sección, transcribes una mezcla de audio mono del archivo de audio 5.1 que has analizado en el ejemplo anterior.
Transcribir archivos de audio con diferentes frecuencias de muestreo y profundidades de bits
Para entender mejor cómo afectan la frecuencia de muestreo y la profundidad de bits a la transcripción, en esta sección transcribirás el mismo archivo de audio grabado con varias frecuencias de muestreo y profundidades de bits. De esta forma, puedes ver el nivel de confianza de Speech-to-Text y su relación con la calidad general del sonido.
En la siguiente tabla se muestra un resumen de la salida de Speech-to-Text de cada uno de los archivos que se indican en la tabla del paso 1 del procedimiento anterior. Observa la diferencia en los resultados del valor de confianza de cada tipo de archivo. (Los resultados pueden variar ligeramente). Las transcripciones de los archivos de audio que tienen tasas de muestreo y de bits más bajas suelen tener resultados de confianza más bajos debido a la peor calidad del sonido.
Nombre del archivo de audio | Confianza (sección 1) | Confianza (sección 2) |
---|---|---|
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 |
Optimizar archivos de vídeo para el análisis
En esta sección del tutorial se explican los pasos necesarios para extraer audio 5.1 de un archivo de película.
Ejecutar ejemplos del tutorial en un terminal local
Puedes ejecutar todos los ejemplos de este tutorial desde una terminal de tu ordenador local. Ejecutar los ejemplos de forma local ofrece una función importante para reproducir archivos de audio y vídeo directamente mediante el comando ffplay
(en lugar de simplemente escucharlos en el navegador).
Solución de problemas
Los errores pueden deberse a varios factores, por lo que merece la pena examinar algunos errores comunes y aprender a corregirlos. Es posible que se produzcan varios errores en un archivo de audio determinado que impidan que se complete el proceso de transcripción.
El audio es demasiado largo
El comando gcloud speech recognize
puede procesar archivos de hasta 1 minuto de duración. Por ejemplo, prueba lo siguiente:
gcloud ml speech recognize $PROJECT_FILES/HumptyDumpty4416.flac \
--language-code='en-US' --format=text
El resultado es el siguiente:
ERROR: (gcloud.ml.speech.recognize) INVALID_ARGUMENT: Request payload size exceeds the limit: 10485760 bytes.
El error se debe a que se ha intentado usar el comando speech recognize
para procesar un archivo de más de 1 minuto.
En el caso de los archivos que duren entre 1 y 80 minutos, puedes usar el comando speech recognize-long-running
. Para ver la duración del archivo, puedes usar el comando ffprobe
, como en el siguiente ejemplo:
ffprobe $PROJECT_FILES/HumptyDumpty4416.flac
El resultado debería ser similar al siguiente:
Duration: 00:04:07.91, start: 0.000000, bitrate: 280 kb/s Stream #0:0: Audio: flac, 44100 Hz, mono, s16
Ten en cuenta que la duración del archivo de audio es de aproximadamente 4 minutos y 8 segundos.
Leer archivos grandes de tu ordenador local
El comando speech recognize-long-running
solo puede procesar archivos de hasta 1 minuto de duración del ordenador local. Para ver dónde puede producirse un error, prueba a usar el comando speech recognize-long-running
en Cloud Shell con un archivo más largo:
gcloud ml speech recognize-long-running $PROJECT_FILES/HumptyDumpty4416.flac \
--language-code='en-US' --format=text
El resultado es el siguiente:
ERROR: (gcloud.ml.speech.recognize-long-running) INVALID_ARGUMENT: Request payload size exceeds the limit: 10485760 bytes.
Este error no se debe a la duración del audio, sino al tamaño del archivo en el equipo local. Cuando usas el comando recognize-long-running
, el archivo debe estar en un segmento de Cloud Storage.
Para leer archivos de más de 1 minuto, usa recognize-long-running
para leer un archivo de un segmento de Cloud Storage, como en el siguiente comando:
gcloud ml speech recognize-long-running $GCS_BUCKET_PATH/HumptyDumpty4416.flac \
--language-code='en-US' --format=text
Este proceso tarda unos minutos en completarse.
Limpieza
Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.