Ottimizzare i file audio per Speech-to-Text


Questo tutorial mostra come eseguire un controllo preflight dei file audio che stai preparando per l'utilizzo con Speech-to-Text. Fornisce informazioni sui formati file audio, descrive come ottimizzare i file audio da utilizzare con Speech-to-Text e come diagnosticare gli errori. Il tutorial è pensato per i professionisti non tecnici di media e intrattenimento e per i professionisti della post-produzione. Non richiede una conoscenza approfondita di Google Cloud, ma solo una conoscenza di base dell'utilizzo dello 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 che contengono finestre di dialogo.

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. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Installa Google Cloud CLI.
  5. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  6. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  7. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  8. Installa Google Cloud CLI.
  9. Per initialize gcloud CLI, esegui questo comando:

    gcloud init

In questo tutorial utilizzerai Cloud Shell per eseguire le procedure, ad esempio copiare i dati da un bucket Cloud Storage alla sessione di Cloud Shell. Cloud Shell è un ambiente shell con Google Cloud CLI già installato. In questo tutorial utilizzerai gcloud CLI per molti passaggi. Puoi anche installare software e file audio di esempio sulla tua macchina locale ed eseguire gli stessi esercizi dal tuo terminale, come descritto più avanti nella sezione Esecuzione di esempi di tutorial in un terminale locale.

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 dei 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 file monofonici che soddisfano determinate specifiche minime, come descritto di seguito. Se i file non soddisfano le specifiche, potresti dover generare file modificati. Ad esempio, potresti dover:

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

Frequenza di campionamento (intervallo 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 massima frequenza riproducibile di un file audio digitale equivale alla metà della frequenza di campionamento. Ad esempio, la frequenza più alta che può essere riprodotta da un file audio a 44,1 kHz corrisponde a circa 22 kHz, ovvero all'estremità superiore o oltre l'intervallo di risposta in frequenza dell'udito di un ascoltatore tipico.

Le frequenze di campionamento nel settore della telefonia e delle telecomunicazioni tendono a essere comprese tra 8 kHz e 16 kHz. Questo tutorial è incentrato sui formati specifici del settore dei media e dell'intrattenimento, che in genere superano i 16 kHz. Per ulteriori informazioni sulla telefonia e su altre applicazioni audio, consulta Trascrizione dell'audio del telefono con modelli avanzati.

Consigliamo di utilizzare una frequenza di campionamento di almeno 16 kHz nei file audio che utilizzi 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à è fortemente influenzata dalla gamma di frequenza, soprattutto nelle frequenze più alte, una frequenza di campionamento inferiore a 16 kHz genera un file audio con poche informazioni o nessuna al di sopra di 8 kHz. Ciò può impedire a Speech-to-Text di trascrivere correttamente l'audio parlato. L'intelligibilità vocale richiede informazioni nell'intervallo da 2 kHz a 4 kHz, sebbene anche gli armonici (multipli) di queste frequenze nella gamma più alta siano importanti per preservare l'intelligibilità del parlato. Pertanto, mantenere la frequenza di campionamento al minimo di 16 kHz è una buona pratica.

È possibile passare da una frequenza di campionamento a un'altra. Tuttavia, non ha alcun vantaggio nell'eseguire l'upgrade dell'audio, poiché le informazioni sull'intervallo di frequenza sono limitate dalla frequenza di campionamento più bassa e non possono essere recuperate con una conversione a una frequenza di campionamento maggiore. Ciò significa che l'up-campionamento da 8 kHz a 44,1 kHz limiterebbe l'intervallo di frequenza riproducibile alla metà della frequenza di campionamento inferiore, ovvero di circa 4 kHz. In questo tutorial, ascolti i file audio registrati con diverse frequenze di campionamento e profondità di bit, così puoi sentire la differenza personalmente.

Profondità di bit (intervallo dinamico)

La profondità in bit del file audio determina l'intervallo dai suoni più deboli a quelli più forti, nonché il rapporto segnale-rumore del file. L'intervallo dinamico influisce meno sulla qualità della trascrizione rispetto alla risposta in frequenza, ma una profondità di bit pari o inferiore a 8 bit può 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 di tale segnale. Gli errori causano una distorsione udibile che influisce direttamente sulla fedeltà del suono. La profondità in bit consigliata dei file per l'analisi con Speech-to-Text è di 16 bit o superiore. Come per la frequenza di campionamento, non c'è alcun vantaggio di convertire la profondità di bit da 8 a 16 bit, poiché le informazioni sull'intervallo dinamico sono limitate al formato originale a 8 bit.

Mezzo di registrazione

Anche il mezzo di registrazione originale può influire sulla qualità del file audio. Ad esempio, i contenuti audio originariamente registrati su nastro magnetico potrebbero presentare sibilo di sfondo incorporato nel file. In alcuni casi, potrebbe essere necessario pre-elaborare audio rumorosi per ottenere risultati migliori nel processo di trascrizione quando utilizzi Speech-to-Text. Il trattamento di registrazioni rumorose e dell'interferenza del rumore di fondo non rientra 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 una vasta gamma di funzioni, tra cui:

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

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

Codec riconosciuti da Speech-to-Text

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

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

Speech-to-Text riconosce i seguenti codec:

  • FLAC: Codec audio senza perdita di dati
  • LINEAR16: un formato PCM (Pulse Code Modulation) non compresso utilizzato in container WAV, AIFF, AU e RAW
  • MULAW: un codec PCM progettato per le telecomunicazioni negli Stati Uniti e in Giappone
  • AMR: un codec adattivo a più frequenze progettato per la voce
  • AMR_WB: una variazione 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 codec e formati file non sono gli stessi. L'estensione del nome file non indica necessariamente che il codec utilizzato nella creazione del file possa essere letto da Speech-to-Text.

Questo tutorial è incentrato sui codec FLAC e LINEAR16, perché si trovano spesso negli ambienti del flusso di lavoro multimediale. Entrambi sono formati senza perdita di dati.

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

Inizializzare l'ambiente

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

In questa sezione installerai FFMPEG e imposterai le variabili di ambiente che puntano alle posizioni di archiviazione dei dati di esempio nell'archiviazione dell'istanza di 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 Esempi del tutorial sull'esecuzione in un terminale locale.

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva 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 è riuscita.

  4. Crea una directory per i file di progetto:

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

    mkdir output
    
  6. Scarica i file audio di esempio:

    gsutil -m 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 di Cloud Shell che rimanda ai file audio di esempio scaricati:

    export PROJECT_FILES=~/project_files
    

Esaminare i metadati nei file multimediali

Quando analizzi i file audio o video con Speech-to-Text, devi conoscere i dettagli dei metadati del file. Ciò consente di 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 e comprendere le specifiche di un file.

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

    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 relativi al file:

    • La durata del file audio è 26,28 secondi.
    • La velocità in bit è di 283 kB al secondo.
    • Il formato del codec è FLAC.
    • La frequenza di campionamento è 44,1 kHz.
    • Si tratta di un file mono a canale singolo.
    • La profondità in bit è di 16 bit (numero intero con segno).
  2. Mostra metadati per il 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 il precedente è che si tratta di un file stereo con una velocità in bit maggiore (378 kB/secondo invece di 283 kB/secondo) perché contiene 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 all'interno dello stesso file, ti consigliamo di creare lo script dei comandi come descritto nella sezione Ottimizzare i file audio per l'analisi più avanti.

  3. Mostra i metadati per un file 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é il formato del file è diverso da quello del file mono o stereo, verranno visualizzate ulteriori informazioni. In questo caso, l'audio è in formato PCM lineare, registrato con una frequenza di campionamento di 44,1 kHz e una velocità in bit di 16 bit (numero intero firmato, small-endian).

    Osserva la designazione 5.1. La velocità dati di 4608 Kbit al secondo in questo file è molto più elevata rispetto a quella per entrambi degli esempi precedenti, perché il file audio contiene sei tracce audio.

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

Ottimizza i file audio per l'analisi

Come accennato in precedenza, quando utilizzi Speech-to-Text, i file audio devono essere file mono a canale singolo per evitare errori nel processo di trascrizione. La tabella seguente mostra i formati audio comuni e il processo di conversione per convertire i file mono ai fini dell'elaborazione.

Formato audio attuale Processo di conversione Formato audio di output
Mono Nessuna estrazione necessaria FLAC o LINEAR16
Stereo Suddividi in 2 file mono o esegui il downgrade in un file mono FLAC o LINEAR16
Multitraccia (5.1) Suddividi in 6 file mono FLAC o LINEAR16
Audio/video multi-stream Suddividi in file mono separati FLAC o LINEAR16

Per elaborare file con più tracce audio, puoi estrarre le tracce mono dal file stereo utilizzando il formato FFMPEG o altri strumenti di editing audio. In alternativa, puoi automatizzare il processo come descritto nella sezione Trascrizione di audio con più canali della documentazione di Speech-to-Text. Per questo tutorial, esplorerai l'opzione di utilizzo di FFMPEG per estrarre singole tracce mono dal file stereo.

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

Visualizza l'anteprima di un errore in base a un formato non valido

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

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

    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
    

    Sebbene il formato del codec, la frequenza di campionamento e la profondità in bit del file siano 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 Speech-to-Text è causato dal tentativo di elaborare un file stereo

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

Dividi un file stereo in più file FLAC mono

Per evitare l'errore relativo alle tracce multiple, è possibile 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, è consigliabile creare dei nomi per i file estratti che indichino la posizione del canale del file originale. Ad esempio, nella procedura seguente, specifichi il canale sinistro con il suffisso FL e il canale destro con il suffisso FR.

Se il campione audio da trascrivere è in entrambi i canali, viene utilizzato un solo canale per la trascrizione. Tuttavia, se su canali diversi sono registrati diversi altoparlanti, 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 ciascuna voce su canali separati porta a livelli di affidabilità maggiori nella trascrizione. Il valore di affidabilità è definito anche percentuale di errore delle parole o WER nel riconoscimento vocale. Per ulteriori informazioni sull'utilizzo di più voci nella stessa registrazione, consulta la sezione Separare diversi altoparlanti 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 sinistro anteriore) e HumptyDumptySample_FR.flac (canale destro anteriore).

    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 come ottimizzare i file audio è la suddivisione dei file audio 5.1 in singoli file FLAC mono. Quando ci si riferisce ai canali in un mix multicanale, ad esempio un mix 5.1, le designazioni dei nomi dei file sono generalmente diverse da quelle dei file stereo o mono. Il file del canale sinistro è in genere designato come FL per la parte anteriore sinistra, mentre il canale destro è designato come FR per la parte anteriore destra. I canali rimanenti di un mix 5.1 sono indicati qui come FC per la parte anteriore centrale, LFE per gli effetti a bassa frequenza, BL per la parte posteriore sinistra (detta anche surround sinistra) e BR per la parte posteriore destra (nota anche come surround destro). Non sono designazioni standard, ma sono una pratica convenzionale per identificare l'origine di un file audio.

In genere, nei file audio multicanale per film e televisione, la finestra di dialogo principale è presente dal canale centrale anteriore. In genere questo è il file da scegliere quando utilizzi Speech-to-Text, perché in genere contiene la maggior parte delle finestre di dialogo nel mix.

In un ambiente di post-produzione, gli elementi principali di dialoghi, musica ed effetti vengono suddivisi in gruppi chiamati stems, in modo che tutti i dialoghi di un mix vengano tenuti separati dalla musica e dagli effetti fino a quando il mix finale non è terminato. Poiché la derivazione della finestra di dialogo è composta solo da una finestra di dialogo, Speech-to-Text fornisce risultati migliori durante la trascrizione delle radici, invece di tentare di estrarre il canale centrale da un mix finale. Questo perché un canale centrale estratto potrebbe confondersi con suoni non di dialogo, causando un peggioramento dell'intelligibilità.

  1. In Cloud Shell, suddividi il file Alice_51_sample_mix.aif in file FLAC, specificando i nomi dei file di output per ciascun 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, il file viene riprodotto in una nuova scheda del browser.

    Alice_mono_downmix.flac
    
  3. Ascolta il FC (file del canale solo al centro) che hai appena creato. La finestra di dialogo inizia dopo qualche secondo di silenzio.

    Alice_FC.flac
    

    Nota la differenza in termini di chiarezza rispetto al file precedente. Questa traccia è basata solo sulla parte di dialogo del mix.

Testare la qualità del file audio

Prima di convertire i file multimediali utilizzando Speech-to-Text, ti consigliamo di ascoltare i file per determinare se la qualità audio presenta anomalie che potrebbero impedire agli strumenti di ML di fornire risultati accurati. In questa sezione, puoi riprodurre i file nel browser facendo clic sui nomi dei file. (consigliamo di utilizzare cuffie o altoparlanti ad ampio raggio dinamico).

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. Osserva la fedeltà chiara e non distorta e l'intelligibilità di questo file. È un buon candidato per la trascrizione mediante Speech-to-Text.

  2. Riproduci il seguente file video in formato 5.1 di esempio per sentire un mix surround senza dialoghi in tutti i canali, ad eccezione del canale centrale:

    sample_51_mix_movie.mp4
    

    Il file è progettato per la riproduzione su un sistema audio 5.1; se utilizzi solo cuffie o un sistema a due canali, non tutti i canali potrebbero essere udibili durante la riproduzione. (Per sentire tutti e sei i canali, la riproduzione deve essere decodificata su un sistema 5.1 o creare un downmix stereo a due canali).

    Idealmente, dovresti usare il canale solo per le finestre di dialogo per Speech-to-Text. Il file di esempio ha un audio non delle finestre di dialogo in cinque canali e le finestre di dialogo in un unico canale. Nella sezione Ottimizza i file audio per l'analisi più avanti, imparerai a estrarre i sei singoli canali audio mono che sono codificati nel file 5.1 per ascoltare ogni traccia. Ciò ti consente di isolare il canale solo dialogo (in genere il canale centrale o anteriore) dai canali non di dialogo al fine di migliorare la capacità di Speech-to-Text di trascrivere il file.

Testa lo stesso file con frequenze di campionamento diverse

La seguente tabella elenca più versioni dello stesso file audio da ascoltare, ciascuna con profondità in bit e 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 PCM lineare a 16 bit da 44,1 kHz (upcampionata)
HumptyDumptySample4408.flac PCM lineare a 44,1 kHz/8 bit
HumptyDumptySample4408to16.flac PCM lineare a 16 bit/44,1 kHz (convertita in up)
  1. Per ogni file nella tabella precedente, fai clic sul nome del file per ascoltarlo. Il lettore audio si apre in una nuova scheda del browser. Nota la differenza di qualità quando la frequenza di campionamento diminuisce.

    La fedeltà dei file a 16 bit si riduce alle frequenze di campionamento più basse 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 a 8 bit che è stato ricampionato a 44,1 kHz/16 bit. Tieni presente che la qualità audio è la stessa del file a 8 kHz/8 bit.

  2. In Cloud Shell, esamina i metadati per il 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
    

    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 un minuto utilizzando il comando gcloud speech recognize-long-running.
    • La velocità in bit del file è 378 kb/s.
    • Il numero di flussi 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à in bit del file è 16 bit.

    Uno stream 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 dei flussi video e il numero di frame al secondo dei flussi video.

    Tieni presente che i metadati indicano 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.

Trascrizione di file con Speech-to-Text

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

  • Trascrizione del file di finestra 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"
    

Trascrizione di una traccia "sporca"

Potresti avere file audio di persone che parlano con altri elementi sonori combinati nella finestra di dialogo. Queste tracce vengono spesso chiamate tracce "sporche" e non nella traccia "pulita" solo per finestre di dialogo in cui non sono presenti altri elementi mescolati. Sebbene Speech-to-Text sia in grado di riconoscere la voce in ambienti rumorosi, i risultati potrebbero essere meno precisi rispetto alle tracce pulite. Potrebbero essere necessarie elaborazioni ed filtri audio aggiuntivi per migliorare l'intelligibilità della finestra di dialogo prima di analizzare il file con Speech-to-Text.

In questa sezione, trascriverai 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 precisi a causa dei suoni aggiuntivi che mascherano la finestra di dialogo. Il livello di confidenza della trascrizione è inferiore all'85%. Inoltre, come puoi vedere dall'output, il testo non corrisponde esattamente alla finestra di dialogo nella registrazione.

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

Per capire meglio come la frequenza di campionamento e la profondità di bit influiscano sulla trascrizione, in questa sezione trascrivi lo stesso file audio registrato con una varietà di frequenze di campionamento e profondità di bit. In questo modo puoi vedere il livello di confidenza di Speech-to-Text e la relazione con la qualità audio complessiva.

  1. Fai clic sui nomi dei file nella tabella seguente per ascoltare l'esempio 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 del file
    Speech_11k8b.flac Frequenza di campionamento a 11025 Hz, profondità a 8 bit
    Speech_16k8b.flac Frequenza di campionamento: 16 kHz, profondità a 8 bit
    Speech_16k16b.flac Frequenza di campionamento: 16 kHz, profondità a 16 bit
    Speech_441k8b.flac Frequenza di campionamento: 44100 Hz, profondità a 8 bit
    Speech_441k16b.flac Frequenza di campionamento: 44100 Hz, profondità a 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. Trascrivi il file Speech_441k16b.flac, che viene registrato con una fedeltà notevolmente 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 affidabilità di circa il 94%.

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

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

Nome file audio Confidenza (sezione uno) Confidenza (sezione due)
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

Ottimizza i file video per l'analisi

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

  1. In Cloud Shell, estrai 6 canali mono da un file di filmato 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. Verifica 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 il file ha una velocità in bit con virgola mobile. Devi convertire un file WAV con velocità in bit in virgola mobile in un formato intero con accesso.

  3. Converti la velocità in bit del file in un formato intero con accesso eseguito:

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

  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
    

    I metadati ora mostrano che la velocità in bit nel file convertito è in formato con numero intero firmato (little-endian), come mostrato dalle designazioni pcm_s16le e s16.

Esegui esempi di 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 i file audio e video direttamente utilizzando il comando ffplay (anziché semplicemente ascoltarli nel browser).

  1. Installa lo strumento FFMPEG in un terminale sul computer locale:

    sudo apt update
    sudo apt install ffmpeg
    
  2. Scarica i file di esempio sul tuo computer locale:

    gsutil -m cp gs://cloud-samples-data/speech/project_files/*.* local_destination_path
    

    Sostituisci local_destination_path con il percorso per inserire i file di esempio.

  3. Imposta la variabile di ambiente LOCAL_PATH nella posizione del computer da 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 nel terminale 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 dei bucket Cloud Storage: ffplay $GCS_BUCKET_PATH/HumptyDumpty4416.flac

    Fai degli esperimenti nel terminale locale con gli esempi con cui hai lavorato in precedenza in questo tutorial. Questo ti aiuta a capire meglio come utilizzare al meglio Speech-to-Text.

Risoluzione dei problemi

Gli errori possono essere causati da una serie di fattori, quindi ti consigliamo di esaminare alcuni errori comuni e imparare a correggerli. Potresti riscontrare diversi errori su un determinato file audio che impediscono il completamento del processo di trascrizione.

L'audio è troppo lungo

Il comando gcloud speech recognize può elaborare file che durano fino a 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 è causato dal tentativo di utilizzare il comando speech recognize per elaborare un file di durata superiore a 1 minuto.

Per i file di durata superiore a 1 minuto e inferiore a 80 minuti, puoi utilizzare il comando speech recognize-long-running. Per conoscere la lunghezza 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 è in grado di elaborare file di massimo 1 minuto dal computer locale. Per vedere 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 dipende dalla lunghezza dell'audio, ma dalle dimensioni del file sul computer locale. Quando utilizzi il comando recognize-long-running, il file deve essere in un bucket Cloud Storage.

Per leggere file di durata superiore a 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. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Passaggi successivi