Optimiza archivos de audio para Speech-to-Text

En este instructivo, se muestra cómo realizar una verificación previa de los archivos de audio que preparas para usar con Speech-to-Text. Se proporciona información general sobre los formatos de archivo de audio, se describe cómo optimizar los archivos de audio para usarlos con Speech-to-Text y cómo diagnosticar errores. El instructivo está diseñado para profesionales de medios de comunicación y entretenimiento no técnicos y profesionales de posproducción. No requiere un conocimiento profundo de Google Cloud; solo requiere conocimientos básicos sobre cómo usar la herramienta de línea de comandos de gcloud con archivos almacenados de forma local y en un depósito de Cloud Storage.

Objetivos

  • Instalar la herramienta FFMPEG
  • Descargar los archivos multimedia de muestra
  • Reproducir archivos de audio y video mediante FFmpeg.
  • Extraer, transcodificar y convertir las propiedades del archivo de audio mediante FFmpeg.
  • Ejecutar Speech-to-Text en una variedad de archivos de muestra que contienen diálogo.

Costos

En este instructivo se usan los siguientes componentes facturables de Google Cloud:

Puedes usar la calculadora de precios para generar una estimación de costos según el uso previsto.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir a la página del selector de proyectos

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. Instala e inicializa el SDK de Cloud.

En este instructivo, debes usar Cloud Shell para realizar los procedimientos, como copiar datos de un bucket de Cloud Storage a la sesión de Cloud Shell. Cloud Shell es un entorno de shell con el SDK de Cloud ya instalado, que incluye la herramienta de línea de comandos de gcloud que usarás para muchos pasos en este instructivo. También debes instalar el software y los archivos de audio de muestra en tu máquina local y ejecutar estos mismos ejercicios desde la terminal, como se describe en la sección Ejecuta ejemplos del instructivo en una terminal local más adelante.

Descripción general

En este instructivo, usarás FFMPEG, una herramienta de código abierto para grabar, convertir y transmitir audio y video. En el instructivo, se proporciona información adicional sobre esta herramienta más adelante.

Información sobre los atributos del archivo de sonido

En esta sección, se describen los tipos de archivos de audio típicos, las tasas de muestreo, las profundidades de bits y los medios de grabación que se encuentran en los flujos de trabajo de producción y posproducción de medios.

A fin de obtener los mejores resultados de Speech-to-Text, debes asegurarte de que los archivos que se usan para la transcripción sean archivos monoaurales (mono) que cumplan con ciertas especificaciones mínimas, como se describe más adelante. Si los archivos no cumplen con las especificaciones, es posible que debas generar archivos modificados. Por ejemplo, es posible que debas hacer lo siguiente:

  • Extraer los datos de audio de un archivo de video
  • Extraer una sola pista monoaural de un archivo de audio de varias pistas
  • Transcodificar de un códec de audio a otro códec que sea más adecuado para Speech-to-Text

Tasa de muestreo (rango de frecuencia)

La tasa de muestreo determina el rango de frecuencia del archivo de audio. Se basa en la cantidad de muestras por segundo que constituyen el archivo de audio. Por lo general, la frecuencia reproducible más alta de un archivo de audio digital es equivalente a la mitad de la tasa de muestreo. Por ejemplo, la frecuencia más alta que se puede reproducir desde un archivo de audio de 44.1 kHz es alrededor de 22 kHz, que se encuentra en el extremo superior, o más allá, del rango de frecuencia de respuesta de un oyente típico.

Las tasas de muestreo en telefonía y telecomunicaciones tienden a estar en el rango entre 8 kHz y 16 kHz. Este instructivo se centra en formatos específicos para la industria del entretenimiento y los medios de comunicación, que suelen superar los 16 kHz. Para obtener más información sobre telefonía y otras aplicaciones de sonido, consulta Transcribe audio telefónico mediante modelos mejorados.

Recomendamos una tasa de muestreo de al menos 16 kHz en los archivos de audio que usas para la transcripción mediante Speech-to-Text. Las tasas de muestreo que se encuentran en los archivos de audio suelen ser de 16 kHz, 32 kHz, 44.1 kHz y 48 kHz. Debido a que la inteligibilidad se ve muy afectada por el rango de frecuencia, en especial en las frecuencias más altas, una tasa de muestreo inferior a 16 kHz da como resultado un archivo de audio que tiene muy poca información por encima de 8 kHz. Esto puede evitar que Speech-to-Text transcriba de forma correcta el audio hablado. La inteligibilidad de voz requiere información a lo largo del rango de 2 kHz a 4 kHz, aunque los armónicos (varios) de esas frecuencias en un rango mayor también son importantes para preservar la inteligibilidad de voz. Por lo tanto, se recomienda mantener la tasa de muestreo en un mínimo de 16 kHz.

Es posible convertir de una tasa de muestreo en otra. Sin embargo, no es beneficioso realizar un aumento de la tasa de muestreo del audio, ya que la información del rango de frecuencia está limitada por la tasa de muestreo más baja y no se puede recuperar mediante la conversión a una tasa de muestreo más alta. Esto significa que un aumento de la tasa de muestreo de 8 kHz a 44.1 kHz limitaría el rango de frecuencia reproducible a la mitad de la tasa de muestreo más baja, o alrededor de 4 kHz. En este instructivo, escucharás archivos de audio grabados con varias tasas de muestreo y profundidades de bits para que puedas escuchar la diferencia.

Profundidad de bits (rango dinámico)

La profundidad de bits del archivo de audio determina el rango de los sonidos más silenciosos a los más ruidosos, así como la relación señal/ruido del archivo. El rango dinámico tiene un efecto menor en la calidad de la transcripción que la frecuencia de respuesta, pero las profundidades de bits de 8 bits o menos pueden causar un ruido excesivo de cuantización en la pista de audio, lo que dificulta la transcripción precisa. (Los errores de cuantizació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 causan una distorsión audible que afecta directamente la fidelidad del sonido). La profundidad de bits recomendada de los archivos para el análisis mediante Speech-to-Text es de 16 bits o más. Al igual que con la frecuencia de muestreo, no existe ninguna ventaja en convertir la profundidad de bits de 8 a 16 bits, porque la información del rango dinámico está limitada al formato original de 8 bits.

Medio de grabación

El medio de grabación original también puede afectar la calidad del archivo de audio. Por ejemplo, el contenido de audio que se grabó en principio en cinta magnética puede tener un silbido de fondo incorporado en el archivo. En algunos casos, es posible que debas preprocesar el audio ruidoso para obtener mejores resultados en el proceso de transcripción cuando uses Speech-to-Text. El tratamiento de las grabaciones ruidosas y la interferencia de ruido de fondo están fuera del alcance de este instructivo. Para obtener más información, consulta Prácticas recomendadas en la documentación de Speech-to-Text.

Introducción a FFmpeg

En este instructivo, debes usar FFmpeg para trabajar con archivos de audio. El conjunto de herramientas FFmpeg ofrece una amplia variedad de funciones que incluyen las siguientes:

  • Reproducir un archivo de audio o video
  • Convertir archivos de audio en uno de los códecs reconocidos por Speech-to-Text
  • Convertir las tasas de bits y de muestreo del archivo de audio en parámetros de configuración óptimos para el análisis mediante Speech-to-Text
  • Extraer transmisiones o pistas de audio individuales de un archivo de transmisión de transporte o un archivo de video
  • 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.

También puedes usar la función ffprobe de FFMPEG para revelar los metadatos asociados a un archivo multimedia. Esto es importante cuando quieres diagnosticar problemas relacionados con los formatos y tipos de archivos para el análisis de aprendizaje automático.

Códecs reconocidos por Speech-to-Text

Si bien Speech-to-Text reconoce varios formatos de archivo de audio, es posible que no lea ni analice ciertos códecs de forma correcta. En el instructivo, se muestra cómo puedes verificar que un contenido esté en uno de los formatos de archivo compatibles.

En el instructivo, debes leer la información de metadatos para revelar y corregir posibles problemas antes de usar Speech-to-Text. Las mismas herramientas te permiten convertir el archivo en un formato compatible si descubres una incompatibilidad.

Speech-to-Text reconoce los siguientes códecs:

  • FLAC: Free Lossless Audio Codec (Códec de audio libre sin pérdida)
  • LINEAR16: Un formato de modulación por impulsos codificados sin comprimir (PCM) que se usa en contenedores de archivos WAV, AIFF, AU y RAW
  • MULAW: Un códec de PCM diseñado para telecomunicaciones en EE.UU. y Japón
  • AMR: Un códec adaptable de varias tasas diseñado para la voz
  • AMR_WB: Una variación de banda ancha de AMR con el doble de ancho de banda de AMR
  • OGG_OPUS: Un códec con pérdida diseñado para aplicaciones de baja latencia
  • SPEEX_WITH_HEADER_BYTE: Un código diseñado para aplicaciones de Voz sobre IP (VOIP)

Es importante comprender que los códecs y los formatos de archivo no son lo mismo. La extensión de nombre de archivo no siempre indica que el códec usado para crear el archivo se pueda leer mediante Speech-to-Text.

Este instructivo se centra en los códecs FLAC y LINEAR16, ya que suelen encontrarse 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 de punto no flotante. La extensión de nombre de archivo .wav no garantiza que Speech-to-Text pueda leer el archivo. En la sección Optimiza archivos de audio para el análisis de este instructivo, se proporciona un ejemplo de cómo convertir el archivo de punto flotante en uno con profundidad de bits de número entero (con signo) a fin de transcribir el archivo en Speech-to-Text.

Inicializa un entorno

Antes de realizar las tareas de este instructivo, debes inicializar un entorno. Para ello, debes instalar FFmpeg, configurar algunas variables de entorno y descargar archivos de audio. Usa archivos multimedia almacenados en una instancia de Cloud Shell y en un bucket de Cloud Storage. Usar diferentes fuentes te permite trabajar con diferentes funciones de Speech-to-Text.

En esta sección, debes instalar FFmpeg y configurar variables de entorno que apunten a las ubicaciones de almacenamiento de datos de muestra en el almacenamiento de la instancia de Cloud Shell y en un bucket de Cloud Storage. Los archivos multimedia son los mismos en ambas ubicaciones y algunos de los ejemplos de este instructivo acceden a los archivos desde Cloud Shell y desde el bucket de Cloud Storage. Puedes instalar FFmpeg en una máquina local y ejecutar estos mismos ejercicios, como se describe más adelante en la sección Ejecuta ejemplos en una terminal local.

  1. En Cloud Shell, ve a Cloud Shell.

    Ir a Cloud Shell

  2. En Cloud Shell, instala la versión actual de FFmpeg:

    sudo apt update
    sudo apt install ffmpeg
    
  3. Verifica que FFmpeg esté instalada:

    ffmpeg -version
    

    Si se muestra un número de versión, la instalación se realizó con éxito.

  4. Crea un directorio para los archivos del proyecto:

    mkdir project_files
    
  5. Crea un directorio para los archivos de salida que crearás en un paso posterior:

    mkdir output
    
  6. Descarga los archivos de audio de muestra:

    gsutil -m cp gs://sa-speech-to-text-tutorial-bucket/project_files/*.* ~/project_files/
    
  7. Crea una variable de entorno para el nombre del bucket de Cloud Storage:

    export GCS_BUCKET_PATH=gs://sa-speech-to-text-tutorial-bucket/project_files
    
  8. Crea una variable de entorno para la ruta de acceso del directorio de instancias de Cloud Shell que apunte a los archivos de audio de muestra descargados:

    export PROJECT_FILES=~/project_files
    

Examina metadatos en archivos multimedia

Cuando analizas archivos de audio o video mediante Speech-to-Text, necesitas conocer los detalles de los metadatos del archivo. Esto te ayuda a identificar inconsistencias o parámetros incompatibles que podrían causar problemas.

En esta sección, debes usar el comando ffprobe en FFmpeg para examinar los metadatos de varios archivos multimedia a fin de comprender las especificaciones de un archivo.

  1. En Cloud Shell, revela los metadatos del archivo HumptyDumptySample4416.flac:

    ffprobe $PROJECT_FILES/HumptyDumptySample4416.flac
    

    Este es el resultado:

    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 tasa 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).
  2. Revela los metadatos del archivo HumptyDumptySampleStereo.flac:

    ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
    

    Este es el resultado:

    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
    

    Las diferencias entre este archivo y el anterior es que este un archivo estéreo que tiene una tasa de bits más alta (378 KB por segundo, en lugar de 283 KB por segundo) porque contiene una reproducción de dos canales en lugar de una pista mono. Todos los demás valores son iguales.

    Debes verificar la cantidad de canales en un archivo de audio que deseas procesar mediante Speech-to-Text; los archivos de audio deben tener solo un canal de audio. A fin de transcribir varios canales de audio dentro del mismo archivo, te recomendamos que ejecutes la secuencia de comandos como se describe en la sección Optimiza archivos de audio para el análisis más adelante.

  3. Revela los metadatos de un archivo de mezcla de audio 5.1:

    ffprobe $PROJECT_FILES/Alice_51_sample_mix.aif
    

    Este es el resultado:

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

    Debido a que este archivo tiene un formato diferente al del archivo mono o estéreo, verás información adicional. En este caso, el audio está en formato PCM lineal, grabado a una tasa de muestreo de 44.1 kHz y una tasa de bits de 16 bits (número entero con signo, formato little-endian).

    Observa la designación 5.1. La tasa de datos de 4,608 Kbits por segundo en este archivo es mucho mayor que la de cualquiera de los ejemplos anteriores, ya que el archivo de audio contiene 6 pistas de audio.

    Más adelante en este instructivo, verás cómo este archivo causa errores cuando intentas transcribirlo mediante Speech-to-Text. Y, lo más importante, verás cómo optimizar el archivo para usarlo con Speech-to-Text sin errores.

Optimiza archivos de audio para el análisis

Como mencionamos 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 comunes y el proceso de conversión a fin de convertir archivos mono para su procesamiento.

Formato de audio actual Proceso de conversión Formato de audio de salida
Mono No se necesita extracción FLAC o LINEAR16
Estéreo División en 2 archivos mono o mezcla en un archivo mono FLAC o LINEAR16
Varias pistas (5.1) División en 6 archivos mono FLAC o LINEAR16
Audio o video de varias transmisiones División en archivos mono separados FLAC o LINEAR16

Para procesar archivos con varias pistas de audio, debes extraer pistas mono del archivo estéreo mediante FFMPEG o mediante otras herramientas de edición de audio. Como alternativa, puedes automatizar el proceso como se describe en la sección Transcribe audio mediante varios canales de la documentación de Speech-to-Text. Para este instructivo, explorarás la opción de usar FFmpeg a fin de extraer pistas mono individuales del archivo estéreo.

Como se muestra en la sección anterior, puedes usar el comando ffprobe a fin de determinar cuántos canales de audio contiene un archivo y, luego, usar el comando ffmpeg para extraer o convertir el archivo en un formato mono, si es necesario.

Obtén la vista previa de un error en función de un formato no válido

Para ver cómo un formato incorrecto afecta la transcripción, puedes intentar ejecutar Speech-to-Text en un archivo que no esté en formato mono.

  1. En Cloud Shell, ejecuta Speech-to-Text en el archivo HumptyDumptySampleStereo.flac:

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

    Este es el resultado:

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

    Aunque el formato de códec, la tasa de muestreo y la profundidad de bits del archivo son correctos, el descriptor estéreo significa que hay dos pistas en el archivo de audio. Por lo tanto, ejecutar Speech-to-Text genera un error Invalid audio channel count.

  2. Ejecuta el comando ffprobe en el archivo:

    ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
    

    Este es el resultado:

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

    Esto revela que el error de Speech-to-Text se produce cuando se intenta procesar un archivo estéreo.

Para obtener información sobre cómo administrar archivos estéreo mediante secuencias de comandos, consulta Transcribe audio mediante varios canales en la documentación de Speech-to-Text.

Divide 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 extraes dos archivos mono de un archivo estéreo, es una buena idea crear nombres para los archivos extraídos que indiquen la ubicación del canal del archivo original. Por ejemplo, en el siguiente procedimiento, designas el canal izquierdo mediante el sufijo FL y el canal derecho mediante el sufijo FR.

Si la muestra de audio a transcribir está en ambos canales, solo se usa un canal para la transcripción. Sin embargo, si hay hablantes diferentes grabados en canales diferentes, recomendamos que transcribas los canales por separado. Speech-to-Text puede reconocer varias voces en una sola grabación. Sin embargo, cuando aíslas cada voz en canales separados, se obtienen niveles de confianza más altos en la transcripción. (El valor de confianza también se conoce como word error rate [tasa de error de palabra] o WER, en el reconocimiento de voz). A fin de obtener más información sobre cómo trabajar con varias voces en la misma grabación, consulta Separa diferentes hablantes en una grabación de audio en la documentación de Speech-to-Text.

  • En Cloud Shell, divide el archivo estéreo HumptyDumptySampleStereo.flac en 2 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) y HumptyDumptySample_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
    

    Este archivo está optimizado para Speech-to-Text.

Divide un archivo de audio 5.1 en varios archivos mono

Otro ejemplo de cómo optimizar los 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 nombre de archivo suelen ser diferentes a las de los archivos estéreo o mono. Por lo general, el archivo del canal izquierdo se designa como FL, para frontal izquierdo, y el canal derecho se designa como FR, para frontal derecho. Los canales restantes de una mezcla 5.1 se denominan aquí como FC para frontal central, LFE para efectos de baja frecuencia, BL para posterior izquierdo (también conocido como sonido envolvente izquierdo) y BR para posterior derecho (también conocido como sonido envolvente derecho). Estas no son designaciones estándar, pero son una práctica convencional para identificar el origen de un archivo de sonido.

Por lo general, en los archivos de audio multicanal para imágenes en movimiento y televisión, el diálogo principal se transmite mediante el canal frontal central. Por lo general, este es el archivo que debes elegir cuando usas Speech-to-Text, ya que suele contener la mayor parte del diálogo de la mezcla.

En un entorno de posproducción, los elementos principales del diálogo, la música y los efectos se dividen en grupos llamados raíces para que todo el diálogo de una mezcla se mantenga separado de la música y los efectos hasta que esté listo. Debido a que la raíz del diálogo solo contiene diálogo, Speech-to-Text da mejores resultados cuando transcribe las raíces en lugar de intentar extraer el canal central de una mezcla final. Esto se debe a que un canal central extraído puede mezclarse con sonidos que no son de diálogo, lo que provoca que la inteligibilidad se vea afectada.

  1. En Cloud Shell, divide el archivo Alice_51_sample_mix.aif en archivos FLAC y especifica los nombres de archivo de salida 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
    

    Este es el resultado:

    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. Haz clic en el siguiente archivo para escucharlo. Este archivo está en el bucket de Cloud Storage y, cuando haces clic en el nombre, el archivo se reproduce en una nueva pestaña del navegador.

    Alice_mono_downmix.flac
    
  3. Escucha el FC (archivo solo de canal central) que acabas de crear. (El diálogo comienza después de unos segundos de silencio).

    Alice_FC.flac
    

    Observa la diferencia en la claridad en comparación con el archivo anterior. Esta pista se basa solo en la parte del diálogo de la mezcla.

Prueba la calidad de archivos de audio

Antes de convertir los archivos multimedia mediante Speech-to-Text, es una buena idea escuchar los archivos para determinar si tienen anomalías en la calidad del sonido que podrían impedir que las herramientas de AA proporcionen resultados precisos. En esta sección, haz clic en los nombres de los archivos para reproducirlos en el navegador. (Recomendamos que uses auriculares o altavoces de amplio rango dinámico).

Escucha el audio de un archivo de video

  1. 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, y la inteligibilidad de este archivo. Este es un buen candidato para una transcripción mediante Speech-to-Text.

  2. Reproduce el siguiente archivo de video de muestra con formato 5.1 para escuchar una mezcla envolvente sin diálogo en todos los canales, excepto en el canal central:

    sample_51_mix_movie.mp4
    

    El archivo está diseñado para reproducirse en un sistema de audio 5.1. Si solo usas audífonos o un sistema de dos canales, es posible que no se escuchen todos los canales durante la reproducción. (Para poder escuchar los seis canales, la reproducción debería decodificarse en un sistema 5.1 o tendrías que crear un mezclador estéreo de dos canales).

    Lo ideal es que uses el canal de solo diálogo para Speech-to-Text. El archivo de muestra tiene audio sin diálogo en cinco canales y diálogo en un canal. Más adelante, en la sección Optimiza archivos de audio para el análisis, aprenderás a extraer los seis canales de audio mono individuales codificados en el archivo 5.1 para escuchar cada pista. Esto te permite aislar el canal de solo diálogo (en general, el canal central o central frontal) de los canales sin diálogo para mejorar la capacidad de Speech-to-Text de transcribir el archivo.

Prueba el mismo archivo con distintas tasas de muestreo

En la siguiente tabla, se enumeran varias versiones del mismo archivo de audio para que escuches, cada una con una profundidad de bits y una tasa de muestreo diferentes.

Archivo de audio Tasa de muestreo y profundidad de bits
HumptyDumptySample4416.flac PCM lineal de 44.1 kHz y 16 bits
HumptyDumptySample2216.flac PCM lineal de 22 kHz y 16 bits
HumptyDumptySample1616.flac PCM lineal de 16 kHz y 16 bits
HumptyDumptySample1116.flac PCM lineal de 11 kHz y 16 bits
HumptyDumptySample0808.flac PCM lineal de 8 kHz y 8 bits
HumptyDumptyUpSample4416.flac PCM lineal de 44.1 kHz y 16 bits (aumento de la tasa de muestreo)
HumptyDumptySample4408.flac PCM lineal de 44.1 kHz y 8 bits
HumptyDumptySample4408to16.flac PCM lineal de 44.1 kHz y 16 bits (conversión ascendente)
  1. Para cada archivo de la tabla anterior, haz clic en el nombre del archivo a fin de escucharlo. (El reproductor de audio se abre en una nueva pestaña del navegador). Observa la diferencia de calidad cuando se disminuye la tasa de muestreo.

    La fidelidad de los archivos de 16 bits se reduce en las tasas de muestreo más bajas y la relación señal/ruido se reduce de forma drástica en las versiones de archivo de 8 bits debido a los errores de cuantización. El último archivo de la tabla es un archivo original de 8 kHz y 8 bits que posee un aumento de la tasa de muestreo 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 y 8 bits.

  2. En Cloud Shell, examina los metadatos del archivo HumptyDumptySampleStereo.flac:

    ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
    

    Este es el resultado:

    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 para casos prácticos avanzados, por ejemplo, si deseas procesar archivos de más de 1 minuto mediante el comando gcloud speech recognize-long-running.
    • La tasa de bits del archivo es de 378 kb/s.
    • La cantidad de transmisiones en el archivo es 1. (Esta cifra es diferente de la cantidad de canales).
    • La tasa de muestreo del archivo es 44.1 kHz.
    • La cantidad de canales de audio es 2 (estéreo).
    • La profundidad de bits del archivo es 16 bits.

    Una transmisión de transporte puede contener varias transmisiones, incluidos audio, video y metadatos. Cada uno de ellos tiene características diferentes, como la cantidad de canales de audio por transmisión, el códec de las transmisiones de video y la cantidad de fotogramas por segundo de las transmisiones de video.

    Ten en cuenta que los metadatos revelan que se trata de un archivo estéreo. Esto es importante, ya que la cantidad predeterminada de canales de audio recomendados para el análisis mediante Speech-to-Text es un canal mono.

Transcribe archivos mediante Speech-to-Text

Una vez que hayas extraído los archivos mono, puedes usar Speech-to-Text para transcribir las pistas de audio. Usa el comando de gcloud ml speech, que invoca la API de Speech-to-Text.

  • 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 completar la transcripción. Este es el resultado:

    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"
    

Transcribe 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, estas pistas se denominan “sucias” en comparación con la pista de diálogo “limpia” que no tiene otros elementos en la mezcla. Aunque Speech-to-Text puede reconocer la voz en entornos ruidosos, es posible que los resultados sean menos precisos que los de las pistas limpias. Puede que se requiera un filtrado y procesamiento de audio adicionales para mejorar la inteligibilidad del diálogo antes de analizar el archivo mediante Speech-to-Text.

En esta sección, transcribes una mezcla mono del archivo de audio 5.1 que analizamos en el ejemplo anterior.

  1. 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
    

    Este es el resultado:

    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 no son precisos 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 con la precisión que debería.

Transcribe archivos de audio con diferentes tasas de muestreo y profundidades de bits

Para comprender mejor cómo la tasa de muestreo y la profundidad de bits afectan la transcripción, en esta sección, transcribes el mismo archivo de audio grabado con una variedad de tasas de muestreo y profundidades de bits. Esto te permite ver el nivel de confianza de Speech-to-Text y su relación con la calidad de sonido general.

  1. Haz clic en los nombres de archivo en la siguiente tabla para escuchar la muestra y observa la diferencia en la calidad. Cada vez que haces clic en el nombre de un archivo, el archivo de audio se reproduce en una nueva pestaña del navegador.

    Nombre del archivo de audio Especificaciones del archivo
    Speech_11k8b.flac Tasa de muestreo de 11,025 Hz, profundidad de 8 bits
    Speech_16k8b.flac Tasa de muestreo de 16 kHz, profundidad de 8 bits
    Speech_16k16b.flac Tasa de muestreo de 16 kHz, profundidad de 16 bits
    Speech_441k8b.flac Tasa de muestreo de 44,100 Hz, profundidad de 8 bits
    Speech_441k16b.flac Tasa de muestreo de 44,100 Hz, profundidad de 16 bits
  2. En Cloud Shell, transcribe el archivo Speech_11k8b.flac, que representa la calidad de audio más baja en este ejemplo:

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

    Este es el resultado:

    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. Transcribe el archivo Speech_441k16b.flac, que se grabó con una calidad mucho mayor:

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

    Este es el resultado:

    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 de 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 alrededor del 94%.

  4. De forma opcional, transcribe los otros archivos que aparecen en la tabla del paso 1 para realizar más comparaciones entre la precisión de la profundidad de bits y la tasa de muestreo del archivo de audio.

En la siguiente tabla, se muestra un resumen del resultado de Speech-to-Text para cada uno de los archivos que aparecen en la tabla del paso 1 del procedimiento anterior. Observa la diferencia en los resultados del valor de confianza para cada tipo de archivo. (Es posible que los resultados varíen un poco). Las transcripciones de los archivos de audio que tienen las tasas de bits y de muestreo más bajas tienden a tener resultados de confianza menores debido a la calidad de sonido inferior.

Nombre del archivo de audio Confianza (sección uno) Confianza (sección dos)
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

Optimiza archivos de video para el análisis

En esta sección del instructivo, se explican los pasos necesarios para extraer el audio 5.1 de un archivo de película.

  1. En Cloud Shell, extrae 6 canales mono de un archivo de película 5.1 y convierte los archivos individuales en 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
    

    Con este comando, se extraen 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
    
  2. Verifica los metadatos del archivo de muestra:

    ffprobe $PROJECT_FILES/Speech_48kFloat.wav
    

    Este es el resultado:

    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 y flt indican que este archivo tiene una tasa de bits de punto flotante. Debes convertir un archivo WAV con tasa de bits de punto flotante en un formato de número entero con signo.

  3. Convierte la tasa de bits del archivo en un formato de número entero con signo:

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

    Con este comando, se crea un nuevo archivo WAV con una tasa de bits de número entero con signo.

  4. Examina los metadatos del archivo recién creado:

    ffprobe ~/output/Speech_48k16bNonFloatingPoint.wav
    

    Este es el resultado:

    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 en el archivo convertido está en un formato de número entero con signo (formato little-endian), como se muestra en las designaciones pcm_s16le y s16.

Ejecuta ejemplos de instructivos en una terminal local

Puedes ejecutar todos los ejemplos de este instructivo desde una terminal en tu computadora local. Ejecutar los ejemplos de forma local proporciona una capacidad importante para reproducir archivos de audio y video directamente mediante el comando ffplay (en lugar de escucharlos en el navegador).

  1. En una terminal de tu computadora local, instala la herramienta FFmpeg:

    sudo apt update
    sudo apt install ffmpeg
    
  2. Descarga los archivos de muestra a tu máquina local:

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

    Reemplaza local_destination_path por la ubicación en la que colocarás los archivos de muestra.

  3. Establece la variable de entorno LOCAL_PATH en la ubicación de tu computadora en la que descargaste los archivos de muestra:

    export LOCAL_PATH=local_destination_path
    

    Reemplaza local_destination_path por el nombre que figura en el paso anterior.

  4. En la terminal, usa el comando ffplay en la terminal para escuchar un archivo de audio de muestra:

    • Archivo de audio: ffplay $LOCAL_PATH/HumptyDumpty4416.flac
    • Archivo de video: ffplay $LOCAL_PATH/sample_51_mix_movie.mp4
    • Reproducción de depósitos de Cloud Storage: ffplay $GCS_BUCKET_PATH/HumptyDumpty4416.flac

    Experimenta en tu terminal local con los ejemplos con los que trabajaste antes en este instructivo. Esto te ayudará a comprender mejor cómo usar Speech-to-Text.

Soluciona problemas

Los errores pueden ser por varios factores, por lo que vale la pena examinar algunos errores comunes y aprender a corregirlos. Es posible que haya 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 el siguiente ejemplo:

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

Este es el resultado:

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

El error se produce cuando intentas usar el comando speech recognize para procesar un archivo que dure más de 1 minuto.

Para archivos de más de 1 minuto y menos de 80 minutos, puedes usar el comando speech recognize-long-running. Para ver la longitud del archivo, puedes usar el comando ffprobe, como en el siguiente ejemplo:

ffprobe $PROJECT_FILES/HumptyDumpty4416.flac

El resultado es similar a este:

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 el tiempo de ejecución del archivo de audio es de alrededor de 4 minutos y 8 segundos.

Lectura de archivos grandes desde una computadora local

El comando speech recognize-long-running puede procesar archivos de hasta 1 minuto de duración desde la computadora local. A fin de ver dónde podrías encontrar un error, intenta usar el comando speech recognize-long-running en Cloud Shell para un archivo más largo:

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

Este es el resultado:

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

Este error no se produce debido a la duración del audio, sino al tamaño del archivo en la máquina local. Cuando uses el comando recognize-long-running, el archivo debe estar en un depósito de Cloud Storage.

A fin de leer archivos de más de 1 minuto, usa recognize-long-running para leer un archivo de un depósito 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.

Realice una limpieza

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

  1. En Cloud Console, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

¿Qué sigue?