Ottimizzare i file audio per Speech-to-Text


Questo tutorial mostra come eseguire un controllo preliminare sui file audio che stai preparando per l'utilizzo con Speech-to-Text. Fornisce informazioni sui formati dei file audio, descrive come ottimizzare i file audio per l'utilizzo con Speech-to-Text e come diagnosticare gli errori. Il tutorial è progettato per professionisti dei media e dell'intrattenimento non tecnici e professionisti della post-produzione. Non richiede conoscenze approfondite diGoogle Cloud; sono necessarie solo conoscenze di base su come utilizzare lo strumento a riga di comando gcloud con i file archiviati sia localmente sia in un bucket Cloud Storage.

Obiettivi

  • Installa lo strumento FFMPEG.
  • Scarica i file multimediali di esempio.
  • Riproduci file audio e video utilizzando FFMPEG.
  • Estrai, transcodifica e converti le proprietà dei file audio utilizzando FFMPEG.
  • Esegui Speech-to-Text su una serie di file di esempio contenenti dialoghi.

Costi

Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:

Puoi utilizzare il Calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.

Prima di iniziare

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

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.
  5. To initialize the gcloud CLI, run the following command:

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

    Go to project selector

  7. Make sure that billing is enabled for your Google Cloud project.

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init

In questo tutorial utilizzerai Cloud Shell per eseguire le procedure, ad esempio la copia dei dati da un bucket Cloud Storage alla sessione Cloud Shell. Cloud Shell è un ambiente shell in cui è già installato Google Cloud CLI. Gcloud CLI viene utilizzata per molti passaggi di questo tutorial. Inoltre, installi software e file audio di esempio sulla tua macchina locale ed esegui gli stessi esercizi dal terminale, come descritto nella sezione Eseguire esempi del tutorial in un terminale locale di seguito.

Panoramica

In questo tutorial utilizzerai FFMPEG, uno strumento open source per la registrazione, la conversione e lo streaming di audio e video. Il tutorial fornisce ulteriori informazioni su questo strumento più avanti.

Informazioni sugli attributi dei file audio

Questa sezione descrive i tipi di file audio, le frequenze di campionamento, le profondità di bit e i supporti di registrazione tipici che si trovano nei flussi di lavoro di produzione e post-produzione di contenuti multimediali.

Per ottenere i migliori risultati da Speech-to-Text, devi assicurarti che i file utilizzati per la trascrizione siano monoaurali (mono) e soddisfino determinate specifiche minime, come descritto di seguito. Se i file non soddisfano le specifiche, potrebbe essere necessario generare file modificati. Ad esempio, potresti dover eseguire le seguenti operazioni:

  • Estrai i dati audio da un file video.
  • Estrai una singola traccia mono da un file audio multitraccia.
  • Esegui la transcodifica da un codec audio a un altro codec più adatto per Speech-to-Text.

Frequenza di campionamento (gamma di frequenza)

La frequenza di campionamento determina l'intervallo di frequenza del file audio. Si basa sul numero di campioni al secondo che costituiscono il file audio. In genere, la frequenza riproducibile più elevata di un file audio digitale è equivalente alla metà della frequenza di campionamento. Ad esempio, la frequenza più alta che può essere riprodotta da un file audio a 44,1 kHz è di circa 22 kHz, che è la parte superiore o oltre l'intervallo di risposta in frequenza dell'udito di un ascoltatore tipico.

Le frequenze di campionamento in telefonia e telecomunicazioni tendono a rientrare nell'intervallo da 8 kHz a 16 kHz. Questo tutorial è incentrato sui formati specifici per il settore dei media e dell'intrattenimento, che in genere sono superiori a 16 kHz. Per ulteriori informazioni su telefonia e altre applicazioni audio, consulta Trascrizione dell'audio telefonico con modelli avanzati.

Consigliamo una frequenza di campionamento di almeno 16 kHz per i file audio utilizzati per la trascrizione con Speech-to-Text. Le frequenze di campionamento presenti nei file audio sono in genere 16 kHz, 32 kHz, 44, 1 kHz e 48 kHz. Poiché l'intelligibilità è molto influenzata dall'intervallo di frequenza, in particolare dalle frequenze più alte, una frequenza di campionamento inferiore a 16 kHz genera un file audio con poche o nessuna informazione sopra gli 8 kHz. Ciò potrebbe impedire a Speech-to-Text di trascrivere correttamente l'audio parlato. L'intelligibilità del parlato richiede informazioni nell'intervallo da 2 kHz a 4 kHz, anche se le armoniche (moltiplicatori) di queste frequenze nell'intervallo più alto sono importanti anche per preservare l'intelligibilità del parlato. Pertanto, mantenere la frequenza di campionamento a un minimo di 16 kHz è una buona prassi.

È possibile convertire da una frequenza di campionamento a un'altra. Tuttavia, non c'è alcun vantaggio nell'eseguire l'upsampling dell'audio, perché le informazioni sull'intervallo di frequenza sono limitate dalla frequenza di campionamento inferiore e non possono essere recuperate mediante la conversione a una frequenza di campionamento superiore. Ciò significa che l'upsampling da 8 kHz a 44,1 kHz limiterebbe l'intervallo di frequenza riproducibile alla metà della frequenza di campionamento inferiore, ovvero a circa 4 kHz. In questo tutorial ascolterai file audio registrati con varie frequenze di campionamento e profondità di bit per consentirti di sentire la differenza.

Profondità di bit (gamma dinamica)

La profondità in bit del file audio determina l'intervallo dai suoni più silenziosi ai suoni più forti, nonché il rapporto segnale/rumore del file. La gamma dinamica ha un effetto minore sulla qualità della trascrizione rispetto alla risposta in frequenza, ma profondità di bit pari o inferiori a 8 bit possono causare un rumore di quantizzazione eccessivo nella traccia audio, rendendo difficile una trascrizione accurata. Gli errori di quantizzazione sono errori di arrotondamento tra il segnale di ingresso analogico e la mappatura del valore di uscita digitale del segnale. Gli errori causano distorsioni udibili che influiscono direttamente sulla fedeltà del suono. La profondità in bit consigliata dei file per l'analisi con Speech-to-Text è di almeno 16 bit. Come per la frequenza di campionamento, non c'è alcun vantaggio nell'eseguire la conversione di upsampling della profondità di bit da 8 a 16 bit, perché le informazioni sulla gamma dinamica sono limitate al formato originale a 8 bit.

Mezzo di registrazione

Anche il supporto di registrazione originale può influire sulla qualità del file audio. Ad esempio, i contenuti audio registrati originariamente su nastro magnetico potrebbero avere un rumore di fondo incorporato nel file. In alcuni casi, potresti dover pre-elaborare l'audio rumoroso per ottenere risultati migliori nel processo di trascrizione quando utilizzi Speech-to-Text. Il trattamento delle registrazioni con rumore e l'interferenza del rumore di fondo non rientrano nell'ambito di questo tutorial. Per ulteriori informazioni, consulta le best practice nella documentazione di Speech-to-Text.

Introduzione a FFMPEG

In questo tutorial utilizzerai FFMPEG per lavorare con i file audio. Il set di strumenti FFMPEG offre un'ampia gamma di funzioni, tra cui:

  • Riproduzione di un file audio o video.
  • Conversione dei file audio in uno dei codec riconosciuti da Speech-to-Text.
  • Conversione delle frequenze di campionamento e delle frequenze in bit dei file audio in configurazioni ottimali per l'analisi da parte di Speech-to-Text.
  • Estrazione di singole tracce audio o stream da un file video o da un file stream di trasporto.
  • Suddivisione dei file stereo in due file mono.
  • Suddivisione dei file audio 5.1 in sei file mono.
  • Applicazione di equalizzazione e filtri per migliorare la chiarezza dell'audio.

Puoi anche utilizzare la funzione ffprobe di FFMPEG per visualizzare i metadati associati a un file multimediale. Questo è importante quando vuoi diagnosticare problemi relativi ai tipi e ai formati di file per l'analisi di machine learning.

Codec riconosciuti da Speech-to-Text

Sebbene Speech-to-Text riconosca una serie di formati di file audio, potrebbe non leggere o analizzare correttamente alcuni codec. Il tutorial mostra come verificare che i contenuti siano in uno dei formati di file supportati.

Nel tutorial, leggi le informazioni sui metadati per rilevare e correggere potenziali problemi prima di utilizzare Speech-to-Text. Gli stessi strumenti ti consentono di convertire il file in un formato supportato se rilevi un'incompatibilità.

Speech-to-Text riconosce i seguenti codec:

  • FLAC: Free Lossless Audio Codec
  • LINEAR16: un formato PCM (Pulse Code Modulation) non compresso utilizzato nei contenitori WAV, AIFF, AU e RAW
  • MULAW: un codec PCM progettato per le telecomunicazioni negli Stati Uniti e in Giappone
  • AMR: un codec adattivo multirate progettato per l'audio
  • AMR_WB: una variante a banda larga di AMR con il doppio della larghezza di banda di AMR
  • OGG_OPUS: un codec con perdita di dati progettato per applicazioni a bassa latenza
  • SPEEX_WITH_HEADER_BYTE: un codice progettato per le applicazioni voice over IP (VoIP)

È importante capire che i codec e i formati file non sono uguali. L'estensione del nome del file non indica necessariamente che il codec utilizzato per creare il file può essere letto da Speech-to-Text.

Questo tutorial si concentra sui codec FLAC e LINEAR16, poiché si trovano spesso negli ambienti di flusso di lavoro multimediale. Entrambi sono formati lossless.

Se utilizzi file WAV (in formato PCM lineare non compresso) con Speech-to-Text, la profondità massima deve essere di 16 bit e la codifica deve essere in un formato non a virgola mobile. L'estensione del nome file .wav non garantisce che il file possa essere letto da Speech-to-Text. La sezione Ottimizzare i file audio per l'analisi di questo tutorial fornisce un esempio di come convertire il file da virgola mobile a una profondità di bit intera (firmata) per trascrivere il file in Speech-to-Text.

Inizializza l'ambiente

Prima di eseguire le attività per questo tutorial, devi inizializzare il tuo ambiente installando FFMPEG, impostando alcune variabili di ambiente e scaricando i file audio. Utilizzi file multimediali archiviati sia in un'istanza Cloud Shell sia in un bucket Cloud Storage. L'utilizzo di origini diverse ti consente di lavorare con funzionalità diverse di Text-to-Speech.

In questa sezione, installi FFMPEG e configuri le variabili di ambiente che rimandano alle posizioni di archiviazione dei dati di esempio nello spazio di archiviazione dell'istanza Cloud Shell e in un bucket Cloud Storage. I file multimediali sono gli stessi in entrambe le posizioni e alcuni degli esempi in questo tutorial accedono ai file sia da Cloud Shell sia dal bucket Cloud Storage. Puoi installare FFMPEG sulla tua macchina locale ed eseguire gli stessi esercizi, come descritto più avanti nella sezione Eseguire gli esempi del tutorial in un terminale locale.

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

    Activate Cloud Shell

  2. In Cloud Shell, installa la versione corrente di FFMPEG:

    sudo apt update
    sudo apt install ffmpeg
    
  3. Verifica che FFMPEG sia installato:

    ffmpeg -version
    

    Se viene visualizzato un numero di versione, l'installazione è andata a buon fine.

  4. Crea una directory per i file del progetto:

    mkdir project_files
    
  5. Crea una directory per i file di output che creerai in un secondo momento:

    mkdir output
    
  6. Scarica i file audio di esempio:

    gcloud storage cp gs://cloud-samples-data/speech/project_files/*.* ~/project_files/
    
  7. Crea una variabile di ambiente per il nome del bucket Cloud Storage:

    export GCS_BUCKET_PATH=gs://cloud-samples-data/speech/project_files
    
  8. Crea una variabile di ambiente per il percorso della directory dell'istanza Cloud Shell che indirizzi ai file audio di esempio scaricati:

    export PROJECT_FILES=~/project_files
    

Esaminare i metadati nei file multimediali

Quando analizzi file audio o video con Speech-to-Text, devi conoscere i dettagli dei metadati del file. In questo modo puoi identificare incoerenze o parametri incompatibili che potrebbero causare problemi.

In questa sezione, utilizzerai il comando ffprobe in FFMPEG per esaminare i metadati di più file multimediali al fine di comprendere le specifiche di un file.

  1. In Cloud Shell, mostra i metadati del HumptyDumptySample4416.flac file:

    ffprobe $PROJECT_FILES/HumptyDumptySample4416.flac
    

    L'output è il seguente:

    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
    

    Questo output indica i seguenti metadati del file:

    • La durata del file audio è di 26,28 secondi.
    • La velocità in bit è di 283 KB al secondo.
    • Il formato del codec è FLAC.
    • La frequenza di campionamento è 44,1 kHz.
    • Il file è mono a un canale.
    • La profondità di bit è di 16 bit (numero intero con segno).
  2. Mostra i metadati del file HumptyDumptySampleStereo.flac:

    ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
    

    L'output è il seguente:

    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 differenza tra questo file e quello precedente è che si tratta di un file stereo con una maggiore velocità in bit (378 KB/secondo anziché 283 KB/secondo) perché contiene la riproduzione a due canali anziché una traccia mono. Tutti gli altri valori sono uguali.

    Devi controllare il numero di canali in un file audio che vuoi elaborare utilizzando Speech-to-Text. I file audio devono avere un solo canale audio. Per trascrivere più canali audio nello stesso file, ti consigliamo di creare uno script dei comandi come descritto nella sezione Ottimizzare i file audio per l'analisi in seguito.

  3. Per visualizzare i metadati di un file di mix audio 5.1:

    ffprobe $PROJECT_FILES/Alice_51_sample_mix.aif
    

    L'output è il seguente:

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

    Poiché questo file è in un formato diverso rispetto al file mono o stereo, vengono visualizzate informazioni aggiuntive. In questo caso, l'audio è in un formato PCM lineare, registrato con una frequenza di campionamento di 44,1 kHz e una velocità in bit di 16 bit (numero intero con segno, little-endian).

    Tieni presente la designazione 5.1. La larghezza di banda di 4608 Kbit al secondo in questo file è notevolmente superiore a quella di entrambi gli esempi precedenti, perché il file audio contiene 6 tracce audio.

    Più avanti in questo tutorial, vedrai come questo file causa errori quando provi a trascriverlo utilizzando Speech-to-Text. Ancora più importante, scoprirai come ottimizzare il file per utilizzarlo con la funzionalità Speech-to-Text senza errori.

Ottimizzare i file audio per l'analisi

Come accennato in precedenza, quando utilizzi Speech-to-Text, i file audio devono essere mono a un canale per evitare errori nella procedura di trascrizione. La tabella seguente mostra i formati audio comuni e la procedura di conversione per la conversione dei file mono per l'elaborazione.

Formato audio corrente Processo di conversione Formato audio di output
Mono Nessuna estrazione necessaria FLAC o LINEAR16
Stereo Dividi in 2 file mono o esegui il downmix in un file mono FLAC o LINEAR16
Multitraccia (5.1) Suddiviso in 6 file mono FLAC o LINEAR16
Audio/video multistream Suddividere in file mono separati FLAC o LINEAR16

Per elaborare file con più tracce audio, estrai le tracce mono dal file stereo utilizzando FFMPEG o altri strumenti di editing audio. In alternativa, puoi automatizzare la procedura come descritto nella sezione Trascrizione di audio con più canali della documentazione di Speech-to-Text. Per questo tutorial, esplorerai la possibilità di utilizzare FFMPEG per estrarre singole tracce mono dal file stereo.

Come mostrato nella sezione precedente, puoi utilizzare il comando ffprobe per determinare quanti canali audio contiene un file e poi utilizzare il comando ffmpeg per estrarre o convertire il file in formato mono, se necessario.

Anteprima di un errore basato su un formato non valido

Per vedere in che modo un formato errato influisce sulla trascrizione, puoi provare a eseguire Text-to-Speech su un file non in formato mono.

  1. In Cloud Shell, esegui Speech-to-Text sul HumptyDumptySampleStereo.flac file:

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

    L'output è il seguente:

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

    Anche se il formato del codec, la frequenza di campionamento e la profondità di bit del file sono corretti, il descrittore stereo indica che il file audio contiene due tracce. Di conseguenza, l'esecuzione di Speech-to-Text causa un errore Invalid audio channel count.

  2. Esegui il comando ffprobe sul file:

    ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
    

    L'output è il seguente:

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

    Questo rivela che l'errore di Speech-to-Text è causato dal tentativo di elaborare un file stereo

Per informazioni su come gestire i file stereo tramite script, consulta Trascrizione di audio con più canali nella documentazione di Speech-to-Text.

Suddividere un file stereo in più file FLAC mono

Un esempio di come evitare l'errore relativo a più tracce è estrarre due tracce mono da un file audio stereo. Le tracce risultanti sono in formato FLAC e vengono scritte nella directory di output. Quando estrai due file mono da un file stereo, è buona norma creare nomi per i file estratti che indichino la posizione del canale del file originale. Ad esempio, nella procedura che segue, designi il canale sinistro utilizzando il suffisso FL e il canale destro utilizzando il suffisso FR.

Se il Sample audio da trascrivere è presente in entrambi i canali, viene utilizzato solo un canale per la trascrizione. Tuttavia, se vengono registrati diversi oratori su canali diversi, ti consigliamo di trascrivere i canali separatamente. Speech-to-Text è in grado di riconoscere più voci all'interno di una singola registrazione. Tuttavia, l'isolamento di ogni voce in canali separati consente di ottenere livelli di affidabilità più elevati nella trascrizione. Il valore di confidenza è noto anche come tasso di errore di parola o WER nel riconoscimento vocale. Per ulteriori informazioni sull'utilizzo di più voci nella stessa registrazione, consulta Separare diversi interlocutori in una registrazione audio nella documentazione di Speech-to-Text.

  • In Cloud Shell, suddividi il file stereo HumptyDumptySampleStereo.flac in 2 file 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
    

    L'output è il seguente, che mostra i file mono HumptyDumptySample_FL.flac (canale anteriore sinistro) e HumptyDumptySample_FR.flac (canale anteriore destro).

    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
    

    Questo file è ora ottimizzato per Speech-to-Text.

Suddividere un file audio 5.1 in più file mono

Un altro esempio di ottimizzazione dei file audio è la suddivisione dei file audio 5.1 in singoli file FLAC mono. Quando si fa riferimento ai canali in un mix multicanale come un mix 5.1, le designazioni dei nomi file sono in genere diverse da quelle dei file stereo o mono. Il file del canale sinistro è in genere contrassegnato come FL per la parte anteriore sinistra e il canale destro come FR per la parte anteriore destra. I canali rimanenti di un mix 5.1 sono indicati qui come FC per il canale centrale anteriore, LFE per gli effetti a bassa frequenza, BL per il canale posteriore sinistro (noto anche come surround sinistro) e BR per il canale posteriore destro (noto anche come surround destro). Non si tratta di designazioni standard, ma di una pratica convenzionale per identificare l'origine di un file audio.

In genere, nei file audio multicanale per film e televisione, il dialogo principale viene trasmesso dal canale centrale anteriore. Di solito è il file da scegliere quando utilizzi la funzionalità Converti voce in testo, in quanto in genere contiene la maggior parte del dialogo nel mix.

In un ambiente di post-produzione, gli elementi principali di dialoghi, musica ed effetti sono suddivisi in gruppi chiamati stem in modo che tutti i dialoghi di un mix siano tenuti separati dalla musica e dagli effetti fino al termine del mix finale. Poiché la traccia dialogica è costituita solo da dialoghi, la funzionalità Speech-to-Text offre risultati migliori durante la trascrizione delle tracce anziché provare a estrarre il canale centrato da un mix finale. Questo perché un canale centrale estratto potrebbe essere miscelato con suoni non vocali, con conseguente perdita di intelligibilità.

  1. In Cloud Shell, dividi il file Alice_51_sample_mix.aif in file FLAC, specificando i nomi dei file di output per ogni canale:

    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
    

    L'output è il seguente:

    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. Fai clic sul seguente file per ascoltarlo. Questo file si trova nel bucket Cloud Storage e, quando fai clic sul nome, viene riprodotto in una nuova scheda del browser.

    Alice_mono_downmix.flac
    
  3. Ascolta il file FC (file del canale solo centro) che hai appena creato. Il dialogo inizia dopo alcuni secondi di silenzio.

    Alice_FC.flac
    

    Nota la differenza di chiarezza rispetto al file precedente. Questo canale si basa solo sulla parte di dialogo del mix.

Testare la qualità dei file audio

Prima di convertire i file multimediali utilizzando Speech-to-Text, è buona idea ascoltarli per determinare se presentano anomalie nella qualità audio che potrebbero impedire agli strumenti di ML di fornire risultati accurati. In questa sezione, puoi riprodurre i file nel browser facendo clic sui relativi nomi. Ti consigliamo di utilizzare cuffie o altoparlanti con ampia gamma dinamica.

Ascoltare l'audio di un file video

  1. Fai clic sul seguente file per riprodurlo:

    HumptyDumptySample4416.flac
    

    Questo file ha una frequenza di 44,1 kHz e una profondità di bit di 16 bit. Nota la fedeltà chiara e non distorta e l'intelligibilità di questo file. È un buon candidato per la trascrizione utilizzando Speech-to-Text.

  2. Riproduci il seguente file video di esempio in formato 5.1 per ascoltare un mix surround con audio non dialogato in tutti i canali tranne che in quello centrale:

    sample_51_mix_movie.mp4
    

    Il file è progettato per la riproduzione su un impianto audio 5.1. Se utilizzi solo cuffie o un impianto a due canali, è possibile che non tutti i canali siano udibili durante la riproduzione. Per ascoltare tutti e sei i canali, la riproduzione deve essere decodificata su un sistema 5.1 o devi creare un downmix stereo a due canali.

    Idealmente, utilizza il canale solo dialoghi per Speech-to-Text. Il file di esempio contiene audio non dialogato in cinque canali e dialoghi in un canale. Nella sezione Ottimizzare i file audio per l'analisi di seguito, scoprirai come estrarre i sei singoli canali audio mono codificati nel file 5.1 per ascoltare ogni traccia. In questo modo puoi isolare il canale solo parlato (in genere il canale centrale o anteriore centrale) dai canali non parlati per migliorare la capacità di Trascrizione vocale di trascrivere il file.

Testa lo stesso file a frequenze di campionamento diverse

La tabella seguente elenca più versioni dello stesso file audio da ascoltare, ciascuna con una profondità di bit e una frequenza di campionamento diverse.

File audio Frequenza di campionamento/profondità di bit
HumptyDumptySample4416.flac PCM lineare a 44,1 kHz/16 bit
HumptyDumptySample2216.flac PCM lineare a 22 kHz/16 bit
HumptyDumptySample1616.flac PCM lineare a 16 kHz/16 bit
HumptyDumptySample1116.flac PCM lineare a 11 kHz/16 bit
HumptyDumptySample0808.flac PCM lineare a 8 kHz/8 bit
HumptyDumptyUpSample4416.flac 44,1 kHz (upsampling)/PCM lineare a 16 bit
HumptyDumptySample4408.flac PCM lineare a 44,1 kHz/8 bit
HumptyDumptySample4408to16.flac PCM lineare a 44,1 kHz/16 bit (up-convertito)
  1. Per ogni file nella tabella precedente, fai clic sul nome del file per ascoltarlo. Il player audio si apre in una nuova scheda del browser. Nota la differenza di qualità quando la frequenza di campionamento viene ridotta.

    La fedeltà dei file a 16 bit è ridotta a frequenze di campionamento inferiori e il rapporto segnale/rumore è drasticamente ridotto nelle versioni dei file a 8 bit a causa degli errori di quantizzazione. L'ultimo file della tabella è un file originale a 8 kHz e 8 bit che è stato sottoposto ad upsampling a 44,1 kHz/16 bit. Nota che la qualità audio è la stessa del file a 8 kHz/8 bit.

  2. In Cloud Shell, esamina i metadati del HumptyDumptySampleStereo.flac file:

    ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
    

    L'output è il seguente:

    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
    

    L'output mostra quanto segue:

    • La durata del file è di 26 secondi e 28 frame. Queste informazioni sono utili per casi d'uso avanzati, ad esempio se vuoi elaborare file più lunghi di 1 minuto utilizzando il comando gcloud speech recognize-long-running.
    • La velocità in bit del file è di 378 Kbps.
    • Il numero di stream nel file è 1. (è diverso dal numero di canali).
    • La frequenza di campionamento del file è 44,1 kHz.
    • Il numero di canali audio è 2 (stereo).
    • La profondità di bit del file è di 16 bit.

    Uno stream di trasporto può contenere una serie di stream, tra cui audio, video e metadati. Ognuno di questi ha caratteristiche diverse, ad esempio il numero di canali audio per stream, il codec degli stream video e il numero di frame al secondo degli stream video.

    Tieni presente che i metadati rivelano che si tratta di un file stereo. Questo è importante perché il numero predefinito di canali audio consigliati per l'analisi con Speech-to-Text è un canale mono.

Trascrivere file utilizzando Speech-to-Text

Ora che hai estratto i file mono, puoi utilizzare Speech-to-Text per trascrivere le tracce audio. Utilizza il comando gcloud ml speech, che invoca l'API Speech-to-Text.

  • Trascrivi il file di dialogo Alice_FC.flac pulito:

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

    Attendi qualche secondo per completare la trascrizione. L'output è il seguente:

    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"
    

Trascrivere una traccia "sporca"

Potresti avere file audio di persone che parlano con altri elementi audio mescolati al dialogo. Questi sono spesso indicati come tracce "sporche" rispetto alle tracce "pulite" solo con dialoghi che non contengono altri elementi. Anche se Speech-to-Text può riconoscere la voce in ambienti rumorosi, i risultati potrebbero essere meno accurati rispetto a quelli ottenuti con tracce pulite. Potrebbe essere necessario un ulteriore filtro ed elaborazione audio per migliorare l'intelligibilità del dialogo prima di analizzarlo con Speech-to-Text.

In questa sezione, trascrivi un downmix mono del file audio 5.1 che hai analizzato nell'esempio precedente.

  1. In Cloud Shell, trascrivi il file Alice_mono_downmix.flac:

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

    L'output è il seguente:

    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"
    

    I risultati di questa analisi non sono accurati a causa degli altri suoni che mascherano la conversazione. Il livello di confidenza della trascrizione è inferiore all'85%. Come puoi vedere dall'output, il testo non corrisponde esattamente al dialogo nella registrazione.

Trascrivere file audio con frequenze di campionamento e profondità di bit diverse

Per saperne di più su come la frequenza di campionamento e la profondità di bit influiscono sulla trascrizione, in questa sezione trascrivi lo stesso file audio registrato con varie frequenze di campionamento e profondità di bit. In questo modo puoi vedere il livello di confidenza di Speech-to-Text e la sua relazione con la qualità complessiva dell'audio.

  1. Fai clic sui nomi dei file nella tabella seguente per ascoltare il Sample e notare la differenza di qualità. Ogni volta che fai clic sul nome di un file, il file audio viene riprodotto in una nuova scheda del browser.

    Nome file audio Specifiche dei file
    Speech_11k8b.flac Frequenza di campionamento di 11025 Hz, profondità di 8 bit
    Speech_16k8b.flac Frequenza di campionamento di 16 kHz, profondità di 8 bit
    Speech_16k16b.flac Frequenza di campionamento di 16 kHz, profondità di 16 bit
    Speech_441k8b.flac Frequenza di campionamento di 44100 Hz, profondità di 8 bit
    Speech_441k16b.flac Frequenza di campionamento di 44100 Hz, profondità di 16 bit
  2. In Cloud Shell, trascrivi il file Speech_11k8b.flac, che rappresenta la qualità audio più bassa in questo esempio:

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

    L'output è il seguente:

    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. Trascrivere il file Speech_441k16b.flac, che è registrato con una fedeltà molto superiore:

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

    L'output è il seguente:

    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"
    

    Nota la differenza di confidenza nell'output dei due esempi. Il primo file (Speech_11k8b.flac), registrato a 11 kHz con una profondità di 8 bit, ha un livello di confidenza inferiore al 78%. Il secondo file ha un livello di confidenza di circa il 94%.

  4. Se vuoi, trascrivi gli altri file elencati nella tabella del passaggio 1 per fare ulteriori confronti tra la frequenza di campionamento e la precisione della profondità di bit dei file audio.

La tabella seguente mostra un riepilogo dell'output di Speech-to-Text per ciascuno dei file elencati nella tabella del passaggio 1 della procedura precedente. Nota la differenza nei risultati valore di affidabilità per ogni tipo di file. I risultati potrebbero variare leggermente. Le trascrizioni dei file audio con una frequenza di campionamento e una velocità in bit inferiori tendono ad avere risultati di confidenza inferiori a causa della qualità audio inferiore.

Nome file audio Affidabilità (sezione 1) Affidabilità (sezione 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

Ottimizzare i file video per l'analisi

Questa sezione del tutorial illustra i passaggi necessari per estrarre l'audio 5.1 da un file di un film.

  1. In Cloud Shell, estrai 6 canali mono da un file di un film 5.1 e converti i singoli file in 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
    

    Questo comando estrae i seguenti file nella directory di output:

    sample_BL.flac
    sample_BR.flac
    sample_FC.flac
    sample_FL.flac
    sample_FR.flac
    sample_LFE.flac
    
  2. Controlla i metadati del file di esempio:

    ffprobe $PROJECT_FILES/Speech_48kFloat.wav
    

    L'output è il seguente:

    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
    

    I valori dei metadati pcm_f32le e flt indicano che questo file ha una bitrate in virgola mobile. Devi convertire un file WAV con una velocità in bit in virgola mobile in un formato a numero intero con segno.

  3. Converti la velocità in bit del file in un formato di numero intero con segno:

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

    Questo comando crea un nuovo file WAV la cui velocità in bit è in formato intero con segno.

  4. Esamina i metadati del file appena creato:

    ffprobe ~/output/Speech_48k16bNonFloatingPoint.wav
    

    L'output è il seguente:

    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
    

    Ora i metadati mostrano che la velocità in bit nel file convertito è in un formato a numero intero con segno (little-endian), come indicato dalle designazionipcm_s16le e s16.

Eseguire gli esempi del tutorial in un terminale locale

Puoi eseguire tutti gli esempi di questo tutorial da un terminale sul tuo computer locale. L'esecuzione degli esempi in locale offre un'importante funzionalità per riprodurre direttamente i file audio e video utilizzando il comando ffplay (anziché semplicemente ascoltarli nel browser).

  1. In un terminale sul computer locale, installa lo strumento FFMPEG:

    sudo apt update
    sudo apt install ffmpeg
    
  2. Scarica i file di esempio sulla tua macchina locale:

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

    Sostituisci local_destination_path con la posizione in cui inserire i file di esempio.

  3. Imposta la variabile di ambiente LOCAL_PATH sulla posizione sul computer in cui hai scaricato i file di esempio:

    export LOCAL_PATH=local_destination_path
    

    Sostituisci local_destination_path con il percorso del passaggio precedente.

  4. Nel terminale, utilizza il comando ffplay per ascoltare un file audio di esempio:

    • File audio: ffplay $LOCAL_PATH/HumptyDumpty4416.flac
    • File video: ffplay $LOCAL_PATH/sample_51_mix_movie.mp4
    • Riproduzione del bucket Cloud Storage: ffplay $GCS_BUCKET_PATH/HumptyDumpty4416.flac

    Fai esperimenti nel terminale locale con gli esempi con cui hai lavorato in precedenza in questo tutorial. In questo modo, potrai comprendere meglio come utilizzare al meglio Speech-to-Text.

Risoluzione dei problemi

Gli errori possono essere causati da diversi fattori, quindi vale la pena esaminare alcuni errori comuni e imparare a correggerli. In un determinato file audio potrebbero verificarsi più errori che impediscono il completamento della procedura di trascrizione.

L'audio è troppo lungo

Il comando gcloud speech recognize può elaborare file di durata massima di 1 minuto. Ad esempio, prova il seguente esempio:

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

L'output è il seguente:

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

L'errore si verifica quando si tenta di utilizzare il comando speech recognize per elaborare un file di durata superiore a 1 minuto.

Per i file più lunghi di 1 minuto e più brevi di 80 minuti, puoi utilizzare il comando speech recognize-long-running. Per conoscere la durata del file, puoi utilizzare il comando ffprobe, come nell'esempio seguente:

ffprobe $PROJECT_FILES/HumptyDumpty4416.flac

L'output è simile al seguente:

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

Tieni presente che la durata del file audio è di circa 4 minuti e 8 secondi.

Leggere file di grandi dimensioni dal computer locale

Il comando speech recognize-long-running può elaborare file di durata massima di 1 minuto dal computer locale. Per capire dove potresti riscontrare un errore, prova a utilizzare il comando speech recognize-long-running in Cloud Shell per un file più lungo:

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

L'output è il seguente:

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

Questo errore non è dovuto alla durata dell'audio, ma alle dimensioni del file sulla macchina locale. Quando utilizzi il comando recognize-long-running, il file deve trovarsi in un bucket Cloud Storage.

Per leggere file più lunghi di 1 minuto, utilizza recognize-long-running per leggere un file da un bucket Cloud Storage, come nel seguente comando:

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

Il completamento della procedura richiede alcuni minuti.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

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

    Go to Manage resources

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

Passaggi successivi