Mengoptimalkan file audio untuk Speech-to-Text


Tutorial ini menunjukkan cara melakukan pemeriksaan preflight pada file audio yang persiapkan untuk digunakan dengan Speech-to-Text. Di dalamnya terdapat pembahasan tentang format file audio, cara mengoptimalkan file audio yang akan digunakan dengan Speech-to-Text, dan cara mendiagnosis error. Tutorial ini dirancang untuk profesional media dan hiburan non-teknis serta profesional pascaproduksi. Anda tidak harus memiliki pengetahuan mendalam tentang Google Cloud; Anda hanya memerlukan pengetahuan dasar tentang cara menggunakan alat command line gcloud dengan file yang disimpan baik secara lokal maupun di bucket Cloud Storage.

Tujuan

  • Menginstal alat FFMPEG.
  • Mendownload contoh file media.
  • Memutar file audio dan video menggunakan FFMPEG.
  • Mengekstrak, men-transcoding, dan mengonversi properti file audio menggunakan FFMPEG.
  • Menjalankan Speech-to-Text pada berbagai file contoh yang berisi dialog.

Biaya

Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih berikut:

Anda dapat menggunakan kalkulator harga untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Menginstal Google Cloud CLI.
  5. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  6. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  7. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  8. Menginstal Google Cloud CLI.
  9. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init

Dalam tutorial ini, Anda akan menggunakan Cloud Shell untuk menjalankan prosedur, seperti menyalin data dari bucket Cloud Storage ke sesi Cloud Shell. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal. Anda dapat menggunakan gcloud CLI untuk melakukan berbagai langkah dalam tutorial ini. Anda juga akan menginstal software dan mengambil sampel file audio di komputer lokal, lalu menjalankan latihan yang sama dari terminal, seperti dijelaskan di bagian Menjalankan contoh tutorial di terminal lokal di bawah.

Ringkasan

Dalam tutorial ini, Anda akan menggunakan FFMPEG, yaitu alat open source untuk merekam, mengonversi, serta mengalirkan data audio dan video. Tutorial ini akan memberikan informasi selengkapnya tentang alat ini nanti.

Memahami atribut file suara

Bagian ini menjelaskan jenis file audio standar, frekuensi sampel, kedalaman bit, serta media perekaman yang ditemukan dalam alur kerja produksi dan pascaproduksi media.

Untuk mendapatkan hasil terbaik dari Speech-to-Text, Anda harus memastikan bahwa file yang digunakan untuk transkripsi adalah file monaural (mono) yang memenuhi spesifikasi minimum tertentu seperti yang akan dijelaskan nanti. Jika file tidak memenuhi spesifikasi, Anda mungkin perlu membuat file yang dimodifikasi. Misalnya, Anda mungkin perlu melakukan langkah berikut:

  • Mengekstrak data audio dari file video.
  • Mengekstrak trek monaural tunggal dari file audio multi-trek.
  • Melakukan transcoding dari satu codec audio ke codec lain yang lebih cocok untuk Speech-to-Text.

Frekuensi sampel (rentang frekuensi)

Frekuensi sampel menentukan rentang frekuensi file audio. Frekuensi ini didasarkan pada jumlah sampel per detik yang membentuk file audio. Biasanya, frekuensi tertinggi yang dapat direproduksi dari sebuah file audio digital setara dengan separuh frekuensi sampelnya. Misalnya, frekuensi tertinggi yang dapat direproduksi dari file audio 44,1 kHz adalah sekitar 22 kHz, yang berada di ujung atas atau di luar rentang respons frekuensi pendengaran pendengar biasa.

Frekuensi sampel dalam telefoni dan telekomunikasi cenderung berada dalam rentang 8 kHz hingga 16 kHz. Tutorial ini berfokus pada format yang spesifik untuk industri media dan hiburan, yang biasanya di atas 16 kHz. Untuk informasi selengkapnya tentang frekuensi sampel telefoni dan aplikasi suara lainnya, lihat Mentranskripsikan audio ponsel dengan model yang ditingkatkan.

Sebaiknya gunakan frekuensi sampel minimal 16 kHz dalam file audio yang Anda gunakan untuk transkripsi dengan Speech-to-Text. Frekuensi sampel yang ditemukan dalam file audio biasanya 16 kHz, 32 kHz, 44,1 kHz, dan 48 kHz. Karena keterpahaman (intelligibility) audio sangat ditentukan oleh rentang frekuensi, terutama dalam frekuensi lebih tinggi, frekuensi sampel di bawah 16 kHz akan menghasilkan file audio yang memiliki sedikit atau tanpa informasi di atas 8 kHz. Hal ini menyebabkan Speech-to-Text tidak dapat mentranskripsikan audio lisan dengan benar. Keterpahaman ucapan memerlukan informasi dalam rentang 2 kHz hingga 4 kHz, meskipun harmonik (kelipatan) frekuensi tersebut dalam rentang yang lebih tinggi juga penting untuk mempertahankan keterpahaman ucapan. Oleh karena itu, menjaga frekuensi sampel tetap pada nilai minimum 16 kHz merupakan praktik yang baik.

Anda dapat mengonversi dari satu frekuensi sampel ke frekuensi sampel lainnya. Namun, menaikkan sampel audio tidak memberikan manfaat, karena informasi rentang frekuensi dibatasi oleh frekuensi sampel yang lebih rendah dan tidak dapat dipulihkan dengan mengonversi ke frekuensi sampel yang lebih tinggi. Artinya, menaikkan sampel dari 8 kHz menjadi 44,1 kHz akan membatasi rentang frekuensi yang dapat direproduksi menjadi separuh dari frekuensi sampel yang lebih rendah, atau sekitar 4 kHz. Dalam tutorial ini, Anda akan mendengar file audio yang direkam dalam berbagai frekuensi sampel dan kedalaman bit agar Anda dapat mengetahui sendiri perbedaannya.

Kedalaman bit (rentang dinamis)

Kedalaman bit file audio menentukan rentang mulai dari suara paling hening hingga suara paling keras, serta rasio sinyal terhadap noise pada file tersebut. Rentang dinamis kurang berpengaruh terhadap kualitas transkripsi dibandingkan respons frekuensi, tetapi kedalaman bit pada atau di bawah 8 bit dapat menyebabkan derau kuantisasi yang berlebihan dalam trek audio, sehingga menyulitkan transkripsi yang akurat. (Error kuantisasi adalah error pembulatan antara sinyal input analog dan pemetaan nilai output digital sinyal tersebut. Error ini menyebabkan distorsi terdengar yang secara langsung memengaruhi fidelitas suara.) Kedalaman bit file yang direkomendasikan untuk analisis dengan Speech-to-Text adalah 16 bit atau lebih. Seperti halnya frekuensi sampling lainnya, menaikkan konversi kedalaman bit dari 8 menjadi 16 bit tidak memberikan manfaat, karena informasi rentang dinamis dibatasi ke format 8-bit asli.

Media perekaman

Media rekaman asli juga dapat memengaruhi kualitas file audio. Misalnya, konten audio yang awalnya direkam pada pita magnetik mungkin memiliki desis di latar belakang yang tersemat ke dalam file. Dalam beberapa kasus, Anda mungkin perlu mempra-proses audio yang bising untuk mendapatkan hasil transkripsi yang lebih baik saat menggunakan Speech-to-Text. Perlakuan terhadap rekaman bising dan interferensi suara bising di latar belakang berada di luar cakupan tutorial ini. Untuk informasi selengkapnya, lihat Praktik terbaik dalam dokumentasi Speech-to-Text.

Pengantar FFMPEG

Dalam tutorial ini, Anda akan menggunakan FFMPEG untuk bekerja dengan file audio. Kumpulan alat FFMPEG menawarkan berbagai fungsi berikut:

  • Memutar file audio atau video.
  • Mengonversi file audio menjadi salah satu codec yang dikenali oleh Speech-to-Text.
  • Mengonversi frekuensi sampel dan kecepatan bit file audio ke konfigurasi optimal untuk analisis dengan Speech-to-Text.
  • Mengekstrak trek atau aliran data audio individual dari file aliran transport atau file video.
  • Memecah file stereo menjadi dua file monaural.
  • Memecah file audio 5.1 menjadi enam file monaural.
  • Menerapkan ekualisasi dan pemfilteran untuk meningkatkan kejernihan audio.

Anda juga dapat menggunakan fungsi ffprobe di FFMPEG untuk mengetahui metadata yang terkait dengan file media. Hal ini penting jika Anda ingin mendiagnosis masalah yang terkait dengan jenis dan format file untuk analisis machine learning.

Codec yang dikenali oleh Speech-to-Text

Meskipun mengenali sejumlah format file audio, Speech-to-Text mungkin tidak akan membaca atau menganalisis codec tertentu dengan benar. Tutorial ini menunjukkan cara memeriksa apakah konten Anda menggunakan salah satu format file yang didukung.

Dalam tutorial ini, Anda akan membaca informasi metadata untuk mengetahui dan memperbaiki potensi masalah sebelum menggunakan Speech-to-Text. Alat yang sama memungkinkan Anda mengonversi file ke format yang didukung jika terdapat inkompatibilitas.

Speech-to-Text mengenali codec berikut:

  • FLAC: Codec Audio Bebas Lossless
  • LINEAR16: Format modulasi kode pulsa (PCM) tanpa kompresi yang digunakan dalam container WAV, AIFF, AU, dan RAW
  • MULAW: codec PCM yang dirancang untuk telekomunikasi di Amerika Serikat dan Jepang
  • AMR: Codec multi-tingkat adaptif yang dirancang untuk ucapan
  • AMR_WB: Variasi band lebar dari AMR dengan bandwidth dua kali lebih besar daripada AMR
  • OGG_OPUS: Codec lossy yang dirancang untuk aplikasi berlatensi rendah
  • SPEEX_WITH_HEADER_BYTE: Codex yang dirancang untuk aplikasi voice over IP (VOIP)

Penting untuk dipahami bahwa codec dan format file tidak sama. Ekstensi nama file tidak selalu menunjukkan bahwa codec yang digunakan untuk membuat file itu dapat dibaca oleh Speech-to-Text.

Tutorial ini berfokus pada codec FLAC dan LINEAR16, karena keduanya sering ditemukan di lingkungan alur kerja media. Keduanya dalam format lossless.

Jika Anda menggunakan file WAV (dalam format PCM linear tanpa kompresi) dengan Speech-to-Text, file tersebut harus memiliki kedalaman maksimum 16 bit dan dienkode dalam format non-floating point. Ekstensi nama file .wav tidak menjamin bahwa file dapat dibaca oleh Speech-to-Text. Bagian Mengoptimalkan file audio untuk analisis dalam tutorial ini memberikan contoh cara mengonversi file dari floating point ke kedalaman bit bilangan bulat (bertanda tangan) untuk mentranskripsikan file tersebut di Speech-to-Text.

Menginisialisasi lingkungan

Sebelum menjalankan tugas untuk tutorial ini, Anda harus menginisialisasi lingkungan dengan menginstal FFMPEG, menetapkan beberapa variabel lingkungan, dan mendownload file audio. Anda dapat menggunakan file media baik yang disimpan di instance Cloud Shell maupun di bucket Cloud Storage. Penggunaan sumber yang berbeda memungkinkan Anda memanfaatkan berbagai kapabilitas Speech-to-Text.

Di bagian ini, Anda akan menginstal FFMPEG dan menyiapkan variabel lingkungan yang mengarah ke lokasi penyimpanan data sampel di penyimpanan instance Cloud Shell dan di bucket Cloud Storage. File media di kedua lokasi ini sama, dan beberapa contoh dalam tutorial ini mengakses file dari Cloud Shell dan juga dari bucket Cloud Storage. Anda dapat menginstal FFMPEG di komputer lokal dan menjalankan latihan yang sama, seperti yang dijelaskan di bagian Menjalankan contoh tutorial di terminal lokal.

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

  2. Di Cloud Shell, instal FFMPEG versi terbaru:

    sudo apt update
    sudo apt install ffmpeg
    
  3. Pastikan FFMPEG telah diinstal:

    ffmpeg -version
    

    Jika nomor versi ditampilkan, penginstalan berhasil.

  4. Buat direktori untuk file project:

    mkdir project_files
    
  5. Buat direktori untuk file output yang akan Anda buat di langkah berikutnya:

    mkdir output
    
  6. Download contoh file audio:

    gsutil -m cp gs://cloud-samples-data/speech/project_files/*.* ~/project_files/
    
  7. Buat variabel lingkungan untuk nama bucket Cloud Storage:

    export GCS_BUCKET_PATH=gs://cloud-samples-data/speech/project_files
    
  8. Buat variabel lingkungan untuk jalur direktori instance Cloud Shell yang mengarah ke file audio sampel yang didownload:

    export PROJECT_FILES=~/project_files
    

Memeriksa metadata dalam file media

Saat menganalisis file audio atau video dengan Speech-to-Text, Anda perlu mengetahui detail metadata file tersebut. Hal ini membantu Anda mengidentifikasi inkonsistensi atau parameter yang tidak kompatibel yang dapat menyebabkan masalah.

Di bagian ini, Anda akan menggunakan perintah ffprobe di FFMPEG untuk memeriksa metadata dari beberapa file media guna memahami spesifikasi file.

  1. Di Cloud Shell, tampilkan metadata untuk file HumptyDumptySample4416.flac:

    ffprobe $PROJECT_FILES/HumptyDumptySample4416.flac
    

    Output-nya adalah sebagai berikut:

    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
    

    Output ini menunjukkan metadata berikut terkait file:

    • Durasi file audio adalah 26,28 detik.
    • Kecepatan bit adalah 283 KB per detik.
    • Format codec adalah FLAC.
    • Frekuensi sampel adalah 44,1 kHz.
    • File ini adalah file mono satu saluran.
    • Kedalaman bit adalah 16 bit (bilangan bulat bertanda tangan).
  2. Tampilkan metadata untuk file HumptyDumptySampleStereo.flac:

    ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
    

    Output-nya adalah sebagai berikut:

    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
    

    Perbedaan antara file ini dengan file sebelumnya adalah file ini merupakan file stereo yang memiliki kecepatan bit lebih tinggi (378 KB/detik, bukan 283 KB/detik) karena berisi pemutaran dua saluran, bukan satu pelacakan mono. Semua nilai lainnya sama.

    Anda harus memeriksa jumlah saluran dalam file audio yang ingin diproses menggunakan Speech-to-Text; file audio hanya boleh memiliki satu saluran audio. Untuk mentranskripsikan beberapa saluran audio dalam file yang sama, sebaiknya Anda membuat skrip perintah seperti yang diuraikan di bagian Mengoptimalkan file audio untuk analisis di bawah.

  3. Tampilkan metadata untuk file mix audio 5.1:

    ffprobe $PROJECT_FILES/Alice_51_sample_mix.aif
    

    Output-nya adalah sebagai berikut:

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

    Karena format file ini berbeda dengan file mono atau stereo, Anda akan melihat informasi tambahan. Dalam hal ini, file audio tersebut berformat PCM linear, yang direkam pada frekuensi sampel 44,1 kHz dan kecepatan bit 16 bit (bilangan bulat bertanda tangan, little-endian).

    Perhatikan notasi 5.1. Kecepatan data 4.608 Kbit per detik dalam file ini jauh lebih tinggi daripada kecepatan data file contoh sebelumnya, karena file audio ini berisi 6 trek audio.

    Nanti dalam tutorial ini, Anda akan melihat bagaimana file ini menyebabkan error saat Anda mencoba mentranskripsikannya menggunakan Speech-to-Text. Yang lebih penting, Anda akan mengetahui cara mengoptimalkan file tersebut agar dapat digunakan dengan Speech-to-Text tanpa error.

Mengoptimalkan file audio untuk analisis

Seperti disebutkan sebelumnya, saat Anda menggunakan Speech-to-Text, file audio Anda harus berupa file mono saluran tunggal untuk menghindari error dalam proses transkripsi. Tabel berikut menunjukkan format audio yang umum dan proses konversi untuk mengonversi file mono untuk diproses.

Format audio saat ini Proses konversi Format audio yang di-output
Mono Tidak perlu ekstraksi FLAC atau LINEAR16
Stereo Pecah menjadi 2 file mono atau downmix ke file mono FLAC atau LINEAR16
Multitrack (5.1) Pecah menjadi 6 file mono FLAC atau LINEAR16
Audio/video multi-aliran Pecah menjadi beberapa file mono terpisah FLAC atau LINEAR16

Untuk memproses file yang berisi beberapa trek audio, Anda harus mengekstrak trek mono dari file stereo menggunakan FFMPEG atau alat pengeditan audio lainnya. Atau, Anda dapat mengotomatiskan proses ini seperti yang dijelaskan di bagian Mentranskripsikan audio yang berisi beberapa saluran dalam dokumentasi Speech-to-Text. Untuk tutorial ini, Anda akan mempelajari opsi penggunaan FFMPEG untuk mengekstrak trek mono individual dari file stereo.

Seperti yang ditunjukkan di bagian sebelumnya, Anda dapat menggunakan perintah ffprobe untuk menentukan jumlah saluran audio yang ada dalam sebuah file, lalu menggunakan perintah ffmpeg untuk mengekstrak atau mengonversi file tersebut ke format mono, jika diperlukan.

Melihat pratinjau error berdasarkan format yang tidak valid

Untuk melihat pengaruh format yang salah terhadap transkripsi, Anda dapat mencoba menjalankan Speech-to-Text pada file yang tidak berformat mono.

  1. Di Cloud Shell, jalankan Speech-to-Text pada file HumptyDumptySampleStereo.flac:

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

    Output-nya adalah sebagai berikut:

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

    Meskipun format codec, frekuensi sampel, dan kedalaman bit file sudah benar, deskriptor stereo menunjukkan ada dua trek dalam file audio. Oleh karena itu, menjalankan Speech-to-Text akan menyebabkan error Invalid audio channel count.

  2. Jalankan perintah ffprobe pada file:

    ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
    

    Output-nya adalah sebagai berikut:

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

    Kode ini menunjukkan bahwa error Speech-to-Text disebabkan oleh percobaan memproses file stereo

Untuk mengetahui informasi tentang cara mengelola file stereo melalui pembuatan skrip, baca bagian Mentranskripsikan audio yang berisi beberapa saluran dalam dokumentasi Speech-to-Text.

Memecah sebuah file stereo menjadi beberapa file mono FLAC

Salah satu contoh cara menghindari error multi-trek adalah dengan mengekstrak dua trek mono dari satu file audio stereo. Trek yang dihasilkan memiliki format FLAC dan ditulis ke direktori output. Saat mengekstrak dua file mono dari sebuah file stereo, sebaiknya beri file hasil ekstraksi nama yang menunjukkan lokasi saluran file aslinya. Misalnya, dalam prosedur berikut, Anda menetapkan saluran kiri dengan menggunakan akhiran FL dan menetapkan saluran yang kanan menggunakan akhiran FR.

Jika sampel audio yang akan ditranskripsikan ada di kedua saluran, hanya satu saluran yang digunakan untuk transkripsi. Namun, jika pembicara yang berbeda direkam di saluran berbeda, sebaiknya transkripsikan saluran secara terpisah. Speech-to-Text dapat mengenali beberapa suara dalam satu rekaman. Namun, mengisolasi setiap suara ke saluran terpisah akan menghasilkan tingkat keyakinan transkripsi yang lebih tinggi. (Nilai keyakinan dalam pengenalan ucapan disebut juga tingkat error kata, atau WER.) Untuk informasi selengkapnya tentang cara menggunakan beberapa suara dalam rekaman yang sama, lihat Memisahkan pembicara yang berbeda dalam sebuah rekaman audio di dokumentasi Speech-to-Text.

  • Di Cloud Shell, pecah file stereo HumptyDumptySampleStereo.flac menjadi 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
    

    Output-nya adalah sebagai berikut, yang menunjukkan file mono HumptyDumptySample_FL.flac (saluran kiri depan) dan HumptyDumptySample_FR.flac (saluran kanan depan).

    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
    

    File ini sekarang dioptimalkan untuk Speech-to-Text.

Memecah sebuah file audio 5.1 menjadi beberapa file mono

Contoh lain tentang cara mengoptimalkan file audio adalah dengan memecah sebuah file audio 5.1 menjadi beberapa file mono FLAC. Saat merujuk ke saluran dalam mix multisaluran seperti mix 5.1, notasi nama filenya biasanya berbeda dengan yang digunakan pada file stereo atau mono. File saluran kiri biasanya diberi notasi FL untuk kiri depan dan FR untuk kanan depan. Saluran lainnya pada mix 5.1 disebut di sini sebagai FC untuk tengah depan, LFE untuk efek frekuensi rendah, BL untuk kiri belakang (disebut juga surround kiri), dan BR untuk kanan belakang (disebut juga surround kanan). Ini bukan notasi standar, melainkan praktik konvensional untuk mengidentifikasi asal file suara.

Biasanya, dalam file audio multi-saluran untuk gambar bergerak dan televisi, dialog utama ditangani oleh saluran tengah depan. Lazimnya, ini adalah file yang dipilih saat Anda menggunakan Speech-to-Text, karena sebagian besar dialog dalam mix biasanya terdapat dalam file ini.

Di lingkungan pascaproduksi, elemen utama dialog, musik, dan efek dipecah menjadi beberapa grup yang disebut stem, sehingga semua dialog untuk sebuah mix disimpan terpisah dari musik dan efek hingga mix akhir selesai. Karena stem dialog hanya terdiri atas dialog, Speech-to-Text memberikan hasil yang lebih baik saat mentranskripsikan stem ini, daripada ketika mencoba mengambil saluran tengah dari sebuah mix akhir. Hal ini karena saluran tengah yang telah diekstrak mungkin bercampur dengan suara non-dialog, sehingga keterpahamannya berkurang.

  1. Di Cloud Shell, pecah file Alice_51_sample_mix.aif menjadi beberapa file FLAC, dengan menentukan nama file output untuk setiap saluran:

    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
    

    Output-nya adalah sebagai berikut:

    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. Klik file berikut untuk mendengarkannya. File ini berada di bucket Cloud Storage. Saat Anda mengklik namanya, file tersebut akan diputar di tab baru pada browser.

    Alice_mono_downmix.flac
    
  3. Dengarkan FC (file saluran khusus tengah) yang baru saja Anda buat. (Dialog dimulai setelah beberapa detik kesenyapan.)

    Alice_FC.flac
    

    Perhatikan perbedaan kejernihan dengan file sebelumnya. Trek ini didasarkan hanya pada bagian dialog dari mix.

Menguji kualitas file audio

Sebelum mengonversi file media menggunakan Speech-to-Text, sebaiknya Anda memproses file tersebut untuk menentukan apakah terdapat anomali dalam kualitas suara yang dapat membuat alat ML tidak memberikan hasil akurat. Di bagian ini, Anda akan memutar file di browser dengan mengklik nama file. (Sebaiknya gunakan headphone atau pengeras suara dengan rentang dinamis yang lebar.)

Mendengarkan audio dari file video

  1. Klik file berikut untuk memutarnya:

    HumptyDumptySample4416.flac
    

    File ini memiliki frekuensi 44,1 kHz dan kedalaman bit 16 bit. Perhatikan fidelitasnya yang jernih dan tidak terdistorsi serta keterpahaman file ini. File ini merupakan kandidat tepat untuk transkripsi menggunakan Speech-to-Text.

  2. Putar contoh file video format 5.1 berikut untuk mendengarkan mix surround dengan non-dialog di semua saluran kecuali saluran tengah:

    sample_51_mix_movie.mp4
    

    File ini dirancang untuk diputar pada sistem audio 5.1; jika Anda hanya menggunakan headphone atau sistem dua saluran, mungkin hanya saluran tertentu yang terdengar selama pemutaran. (Untuk mendengarkan keenam saluran tersebut, pemutaran harus didekode pada sistem 5.1 atau Anda harus membuat downmix stereo dua saluran.)

    Idealnya, Anda menggunakan saluran khusus dialog untuk Speech-to-Text. File contoh ini memiliki audio non-dialog di lima saluran dan dialog di satu saluran. Di bagian Mengoptimalkan file audio untuk analisis nanti, Anda akan mempelajari cara mengekstrak keenam saluran audio mono individual yang dienkode dalam file 5.1 untuk memproses setiap saluran. Dengan begitu, Anda dapat mengisolasi saluran khusus dialog (biasanya saluran tengah atau tengah depan) dari saluran non-dialog untuk meningkatkan kemampuan Speech-to-Text dalam mentranskripsikan file.

Menguji file yang sama dengan frekuensi sampel yang berbeda

Tabel berikut mencantumkan beberapa versi file audio yang sama untuk Anda dengarkan, masing-masing dengan kedalaman bit dan frekuensi sampel yang berbeda.

File audio Frekuensi sampel/kedalaman bit
HumptyDumptySample4416.flac PCM Linear 44,1 kHz/16-bit
HumptyDumptySample2216.flac PCM Linear 22 kHz/16-bit
HumptyDumptySample1616.flac PCM Linear 16 kHz/16-bit
HumptyDumptySample1116.flac PCM Linear 11 kHz/16-bit
HumptyDumptySample0808.flac PCM Linear 8 kHz/8-bit
HumptyDumptyUpSample4416.flac PCM Linear 44,1 kHz (tidak disampel)/16-bit
HumptyDumptySample4408.flac PCM Linear 44,1 kHz/8-bit
HumptyDumptySample4408to16.flac PCM Linear 44,1 kHz/16-bit (dikonversi naik)
  1. Untuk setiap file dalam tabel sebelumnya, klik nama file untuk mendengarkan file tersebut. (Pemutar audio akan terbuka di tab baru pada browser.) Perhatikan perbedaan kualitas saat frekuensi sampel diturunkan.

    Fidelitas file 16-bit berkurang pada frekuensi sampel lebih rendah dan rasio sinyal terhadap derau berkurang drastis dalam versi file 8-bit ini karena adanya error kuantisasi. File terakhir dalam tabel adalah file 8-bit 8 kHz asli yang telah dinaikkan sampelnya menjadi 44,1 kHz/16-bit. Perhatikan bahwa kualitas suaranya sama dengan file 8 kHz/8-bit.

  2. Di Cloud Shell, periksa metadata untuk file HumptyDumptySampleStereo.flac:

    ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
    

    Output-nya adalah sebagai berikut:

    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
    

    Output-nya menampilkan informasi berikut:

    • Durasi file adalah 26 detik dan 28 frame. Informasi ini berguna untuk kasus penggunaan lanjutan, misalnya jika Anda ingin memproses file yang berdurasi lebih dari 1 menit menggunakan perintah gcloud speech recognize-long-running.
    • Kecepatan bit file adalah 378 kb/dtk.
    • Jumlah aliran data dalam file ini adalah 1. (Jumlah ini berbeda dengan jumlah saluran.)
    • Frekuensi sampel file adalah 44,1 kHz.
    • Jumlah saluran audio adalah 2 (stereo).
    • Kedalaman bit file adalah 16 bit.

    Sebuah aliran transport dapat berisi sejumlah aliran, termasuk audio, video, dan metadata. Setiap aliran ini memiliki karakteristik berbeda, seperti jumlah saluran audio per aliran, codec aliran data video, dan jumlah frame per detik aliran data video.

    Perhatikan bahwa metadata menunjukkan bahwa file ini berjenis stereo. Hal ini penting karena jumlah default saluran audio yang direkomendasikan untuk analisis dengan Speech-to-Text adalah satu saluran mono.

Mentranskripsikan file menggunakan Speech-to-Text

Setelah mengekstrak file mono, sekarang Anda dapat menggunakan Speech-to-Text untuk mentranskripsikan trek audio. Anda perlu menggunakan perintah gcloud ml speech, yang akan memanggil Speech-to-Text API.

  • Transkripsikan file dialog Alice_FC.flac bersih:

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

    Tunggu beberapa detik sampai transkripsi selesai. Output-nya adalah sebagai berikut:

    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"
    

Mentranskripsikan trek "kotor"

Anda mungkin memiliki file audio orang berbicara dengan campuran elemen suara lain di dalamnya. Trek seperti ini biasanya disebut trek "kotor", bukan trek khusus dialog "bersih" yang tidak tercampur dengan elemen lain. Meskipun Speech-to-Text dapat mengenali ucapan di lingkungan yang bising, hasilnya mungkin kurang akurat dibandingkan dengan trek yang bersih. Pemfilteran dan pemrosesan audio tambahan mungkin diperlukan untuk meningkatkan keterpahaman dialog sebelum Anda menganalisis file dengan Speech-to-Text.

Di bagian ini, Anda akan mentranskripsikan downmix mono dari file audio 5.1 yang telah dianalisis pada contoh sebelumnya.

  1. Di Cloud Shell, transkripsikan file Alice_mono_downmix.flac:

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

    Output-nya adalah sebagai berikut:

    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"
    

    Hasil analisis ini tidak akurat karena adanya suara tambahan yang menyamarkan dialog. Tingkat keyakinan transkrip ini di bawah 85%. Seperti yang dapat Anda lihat dari output-nya, teks ini tidak cocok dengan dialog dalam rekaman seakurat yang semestinya.

Mentranskripsikan file audio dengan frekuensi sampel dan kedalaman bit berbeda

Untuk memahami lebih lanjut pengaruh frekuensi sampel dan kedalaman bit terhadap transkripsi, di bagian ini Anda akan mentranskripsikan file audio yang sama yang direkam dalam berbagai frekuensi sampel dan kedalaman bit. Hal ini memungkinkan Anda melihat tingkat keyakinan Speech-to-Text dan hubungannya dengan kualitas suara secara keseluruhan.

  1. Klik nama file dalam tabel berikut untuk mendengarkan sampel, dan perhatikan perbedaan kualitasnya. Setiap kali Anda mengklik nama file, file audio akan diputar di tab baru pada browser.

    Nama file audio Spesifikasi file
    Speech_11k8b.flac Frekuensi sampel 11025 Hz, kedalaman 8 bit
    Speech_16k8b.flac Frekuensi sampel 16 kHz, kedalaman 8 bit
    Speech_16k16b.flac Frekuensi sampel 16 kHz, kedalaman 16 bit
    Speech_441k8b.flac Frekuensi sampel 44100 Hz, kedalaman 8 bit
    Speech_441k16b.flac Frekuensi sampel 44100 Hz, kedalaman 16 bit
  2. Di Cloud Shell, transkripsikan file Speech_11k8b.flac, yang mewakili kualitas audio terendah dalam contoh ini:

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

    Output-nya adalah sebagai berikut:

    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. Transkripsikan file Speech_441k16b.flac, yang direkam dengan fidelitas jauh lebih tinggi:

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

    Output-nya adalah sebagai berikut:

    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"
    

    Perhatikan perbedaan tingkat keyakinan output antara kedua contoh. File pertama (Speech_11k8b.flac), yang direkam pada 11 kHz dengan kedalaman 8 bit, memiliki tingkat keyakinan di bawah 78%. File kedua memiliki tingkat keyakinan sekitar 94%.

  4. Jika ingin, transkripsikan file satunya yang tercantum dalam tabel pada langkah 1 untuk membandingkan lebih lanjut akurasi kedalaman bit dan frekuensi sampel antarfile audio.

Tabel berikut menunjukkan ringkasan output Speech-to-Text untuk setiap file yang tercantum dalam tabel pada langkah 1 prosedur sebelumnya. Perhatikan perbedaan tingkat keyakinan untuk setiap jenis file. (Hasil Anda mungkin sedikit berbeda.) Transkripsi file audio yang memiliki frekuensi sampel dan kecepatan bit lebih rendah cenderung memiliki tingkat keyakinan lebih rendah karena kualitas suara yang lebih buruk.

Nama file audio Keyakinan (bagian satu) Keyakinan (bagian dua)
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

Mengoptimalkan file video untuk analisis

Bagian tutorial ini akan memandu Anda menyelesaikan langkah-langkah yang diperlukan untuk mengekstrak audio 5.1 dari file film.

  1. Di Cloud Shell, ekstrak 6 saluran mono dari file film 5.1 dan konversi setiap file ke format 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
    

    Perintah ini akan mengekstrak file berikut ke dalam direktori output:

    sample_BL.flac
    sample_BR.flac
    sample_FC.flac
    sample_FL.flac
    sample_FR.flac
    sample_LFE.flac
    
  2. Periksa metadata file sampel:

    ffprobe $PROJECT_FILES/Speech_48kFloat.wav
    

    Output-nya adalah sebagai berikut:

    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
    

    Nilai metadata pcm_f32le dan flt menunjukkan bahwa file ini memiliki kecepatan bit floating point. Anda perlu mengonversi file WAV dengan kecepatan bit floating point menjadi format bilangan bulat bertanda tangan.

  3. Konversi kecepatan bit file ke format bilangan bulat bertanda tangan:

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

    Perintah ini akan membuat file WAV baru yang kecepatan bit-nya menggunakan format bilangan bulat bertanda tangan.

  4. Periksa metadata file yang baru dibuat:

    ffprobe ~/output/Speech_48k16bNonFloatingPoint.wav
    

    Output-nya adalah sebagai berikut:

    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
    

    Metadata kini menunjukkan bahwa kecepatan bit dalam file yang dikonversi menggunakan format bilangan bulat bertanda tangan (little-endian), seperti yang ditunjukkan oleh notasi pcm_s16le dan s16.

Menjalankan contoh tutorial di terminal lokal

Anda dapat menjalankan semua contoh dalam tutorial ini dari terminal di komputer lokal. Menjalankan contoh secara lokal akan memberikan kapabilitas penting untuk memutar file audio dan video secara langsung menggunakan perintah ffplay (bukan hanya mendengarkan file tersebut di browser).

  1. Di terminal komputer lokal Anda, instal alat FFMPEG:

    sudo apt update
    sudo apt install ffmpeg
    
  2. Download file contoh ke komputer lokal Anda:

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

    Ganti local_destination_path dengan lokasi untuk menempatkan file contoh.

  3. Tetapkan variabel lingkungan LOCAL_PATH ke lokasi di komputer tempat Anda mendownload file sampel:

    export LOCAL_PATH=local_destination_path
    

    Ganti local_destination_path dengan jalur dari langkah sebelumnya.

  4. Di terminal, gunakan perintah ffplay di terminal untuk mendengarkan file audio sampel:

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

    Lakukan eksperimen di terminal lokal dengan contoh yang Anda kerjakan sebelumnya dalam tutorial ini. Dengan begitu, Anda dapat lebih memahami cara terbaik untuk menggunakan Speech-to-Text.

Pemecahan masalah

Error dapat disebabkan oleh sejumlah faktor, jadi ada baiknya Anda memeriksa beberapa error umum dan mempelajari cara memperbaikinya. Anda mungkin mengalami beberapa error pada file audio tertentu yang membuat proses transkripsi tidak dapat diselesaikan.

Audio terlalu panjang

Perintah gcloud speech recognize dapat memproses file yang berdurasi hingga 1 menit. Misalnya, coba contoh berikut:

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

Output-nya adalah sebagai berikut:

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

Error ini disebabkan oleh upaya menggunakan perintah speech recognize untuk memproses file yang berdurasi lebih dari 1 menit.

Untuk file yang berdurasi lebih dari 1 menit dan kurang dari 80 menit, Anda dapat menggunakan perintah speech recognize-long-running. Untuk melihat durasi file, Anda dapat menggunakan perintah ffprobe, seperti pada contoh berikut:

ffprobe $PROJECT_FILES/HumptyDumpty4416.flac

Outputnya mirip dengan hal berikut ini:

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

Perhatikan bahwa waktu berjalan file audio adalah sekitar 4 menit 8 detik.

Membaca file besar dari komputer lokal

Perintah speech recognize-long-running hanya dapat memproses file yang berdurasi hingga 1 menit dari komputer lokal. Untuk melihat di mana Anda mungkin mengalami error, coba gunakan perintah speech recognize-long-running di Cloud Shell untuk file yang lebih panjang:

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

Output-nya adalah sebagai berikut:

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

Error ini bukan disebabkan oleh panjang audio, tetapi karena ukuran file di komputer lokal. Saat Anda menggunakan perintah recognize-long-running, file harus berada di bucket Cloud Storage.

Untuk membaca file yang berdurasi lebih dari 1 menit, gunakan recognize-long-running untuk membaca file dari bucket Cloud Storage, seperti dalam perintah berikut:

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

Proses ini membutuhkan waktu beberapa menit.

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Langkah selanjutnya