(Ovo je drugi članak u seriji od tri članka na temu transkripcije.)
U prethodnom članku Višnja je pisala o tome zašto transkribirati audio i video govor u tekst, u finalnom članku je pisala o tome kako transkribirati, a ja ću u ovom postu:
- opisati način na koji smo mi krenuli u taj posao,
- spomenuti alate koje koristimo i
- dati pregled koraka koji nas vode od originalne video datoteke do konačnog transkripta.
Preduvjeti i korišteni alati
Iako u ovom članku nema nikakvog programiranja, ipak je potrebno određeno tehničko predznanje da biste mogli pratiti proceduru koju ovdje opisujem. Vjerujem da vam je potrebno sljedeće:
- Dobro snalaženje u terminalu (command lineu),
- Volja za praćenjem dokumentacije o Google Cloudu.
Za potrebe ovog članka izostavio sam upute o tome kako podesiti Google Cloud jer bi to značajno preraslo okvire ovog članka.
Koristio sam sljedeće servise i alate:
- Google Cloud - online usluga na kojoj ćemo koristiti Storage i Speech-to-Text servise
- gsutil - alat za pristup Google Cloudu
- ffmpeg - library za konverziju audio i video formata
- jq - alat za rad s JSON-om
Svi ovi alati postoje na Linux, MacOS i Windows operativnim sustavima. Alate pokrećete u terminalu i možete koristiti bilo koju terminal aplikaciju koja je dostupna na vašem OS-u.
Google Cloud nije besplatan, ali su cijene korištenja Google Clouda vrlo prihvatljive. Do 60 minuta transkripcije mjesečno je besplatno.
Krenut ćemo s originalnom video datotekom (u našem slučaju to je bila .mp4 datoteka treće epizode Eduza Showa, snimljena pomoću Zooma). Možete odabrati i audio datoteku.
Konačni rezultat koji želimo jest tekstualni transkript te datoteke.
Naprije, međutim, morate pripremiti datoteke za konverziju, što objašnjavam u koracima #1 i #2.
Korak #1: konverzija u audio FLAC format
Google Speech-to-Text servis, koji je dio Google Clouda, zahtijeva ulaznu datoteku u FLAC audio formatu. Zato ćemo najprije konvertirati svoj video u željeni format koristeći ffmpeg.
U terminalu pokrenite sljedeću komandu, pri čemu prilagodite nazive datoteka:
ffmpeg -i video-file.mp4 -ac 1 audio-file.flac
-ac 1
koristimo zato jer Google Speech-to-Text servis zahtijeva zvuk na samo 1 kanalu.
Korak #2: upload datoteke na Google Storage
Google Speech-to-Text servis zahtijeva da se ulazna datoteka nalazi na Google Storage bucketu (taj je servis također dio Google Clouda).
Zato ćemo koristeći gsutil kopirati datoteku s lokalnog računala na Google Storage bucket.
Bucket (i/ili datoteka) smiju biti privatni, iako bi se iz trenutne Google dokumentacije moglo zaključiti da moraju biti javni.
gsutil cp audio-file.flac gs://bucket-name/
Naravno, zamijenite bucket-name
s nazivom obog bucketa koji vi koristite i spremite datoteku u taj bucket na proizvoljni path.
Korak #3: pokretanje transkript operacije
Sada napokon imamo riješene sve preduvjete za pokretanje transkripcije.
gcloud ml speech recognize-long-running \
gs://bucket-name/audio-file.flac --language-code=hr --async
Prilikom prvog pokretanja speech
servisa, Speech-to-Text servis će vas tražiti da uključite API.
To možete odraditi sa odgovorom 'Yes', a možda ste prije toga u Cloud konzoli to već uključili.
Odmah ćete dobiti povratni rezultat koji sadrži informaciju o transcript operaciji:
Check operation [operations/OPERATION_ID] for status.
{
"name": "OPERATION_ID"
}
OPERATION_ID
ovdje jest broj koji koristite u sljedećem koraku.
Korak 4) Čekanje na rezultat
Unesite sljedeću komandu:
gcloud ml speech operations wait OPERATION_ID > transcript-file.json
Jednom kad transkripcija završim rezultat je spremljen u transcript-file.json
fileu.
Sada slobodno uzmite predah: napravite si večeru ili pogledajte što ima novo od jutros na Hacker News, jer će sama transcript operacija potrajati neko vrijeme.
To vrijeme, naravno, ovisi o minutaži vaše izvorne datoteke. U našem slučaju, za ulaznu video datoteku od cca 1 sat trajanja, transkripcija je trajala nešto manje od 30min.
Korak 5) Pretvaranje JSON datoteke u tekstualno čitljivi format
Rezultat iz prethodnog koraka jest JSON file kojeg trebamo pretvoriti u tekst čitljiv osobi koja će uređivati i koristiti transkript.
To radimo koristeći jq:
jq --raw-output '.results[].alternatives[].transcript' \
transcript-file.json > transcript-file.txt
Finalni rezultat
To je to! Kao rezultat ste dobili transcript-file.txt
koji kad ga otvorite u tekstualnom editoru, izgleda kao običan tekst, nešto ovako:
(Namjerno nisam htio uploadati text file jer unutra ima svega i svačega, pa čak i NSFW riječi, pa nisam htio da Google indeksira te riječi.)
Kakva je kvaliteta transkripta?
Ukratko, daleko od savršenog.
Loša vijest je da transkript koji smo dobili van definitivno nije dovoljno dobar za objavu i treba još dosta ručnog uređivanja da biste ga pretvorili u nešto čitljivo.
Primjerice, Google Speech-to-Text ne prepoznaje interpunkcije, barem ne na hrvatskom jeziku. Zato je finalni rezultat jedan veliki zid gotovo neprekinutog teksta, računalno razbijen 'tek toliko' u pravilnim intervalima. Nadam se da će ta značajka biti implementirana za hrvatski jezik čim prije, jer sam siguran da bi to značajno poboljšalo rezultat.
Google Speech-to-Text također ne prepoznaje različite govornike na hrvatskom, pa transkript ne označava kad prestaje govoriti jedna i počinje govoriti druga osoba. To je kod nekoliko drugih jezika u beta fazi. Nadam se da će kroz neko vrijeme i ta značajka doći do nas.
Dobra vijest je da čak i ovakav transkript ipak pomaže u pocesu transkripcije na način da štedi nešto vremena. Višnja je izračunala da joj je transkript uštedio barem 20% vremena (u odnosu na proces transkribiranja bez transkripta.)