Subtítulació de vídeos en català amb Whisper
La història de l'accessibilitat del contingut web en les administracions públiques no és malauradament una història d'èxit, com demostra el timeline normatiu del Portal de Administración Electrónica. Un dels requisits per assolir la conformitat amb els criteris d'accessibilitat és oferir subtítols sincronitzats per al contingut multimèdia. Avui us comparteixo una solució per afegir subtítols en català de qualitat als vídeos de YouTube mitjançant Whisper, una intel·ligència artificial (IA) creada per OpenAI (els de ChatGPT) i alliberada com a programari de codi obert (open source).
Introducció
Whisper és una IA enfocada en el reconeixement automàtic de la parla (ASR, Automatic Speech Recognition), amb unes característiques que la fan totalment disruptiva davant les opcions preexistents, com són haver estat entrenada amb un dataset de més de 600.000 hores d'audio, el 17% d'elles en idiomes diferents de l'anglès, incloent-hi el català amb 1.883 hores en un lloc rellevant (14è entre 75 idiomes). Poden semblar poques 1.883 hores, però la veritat és que són més que suficients per obtenir resultats gairebé professionals, com veurem més endavant.
La situació anterior a Whisper
El català no està entre les 14 llengües suportades per a la generació automàtica de subtítols en Youtube. De tota manera, la subtitolació automàtica en sí mateixa pot arribar a provocar errors fints i tot mortals com el descrit en aquest enllaç de la WAI/W3C.
Tot i que existien diverses alternatives externes, el cert és que les solucions anteriors a Whisper prometien molt però la realitat és que donaven més feina de la que estalviaven. A tall d'exemple, veieu aquest vídeo del Govern de les Illes Balears demostratiu de les capacitats de Subtitle Edit: Subtitle Edit. Generar subtítols en català. IBSTEAM (caib). El vídeo és de l'any 2022, per tant coetani a la publicació de Whisper. L'enllaç porta directament al minut 2:37 on es veuen els resultats generats pel programari i les correccions que ha de fer l'usuari al text generat, gairebé l'ha de reescriure de nou:
- Text generat automàticament: "O dona és que tal volta trobes so miquel nebot assessor dir vestim i en El dia de hui no";
- Text corregit manualment: "Molt bones, què tal com te trobes? Som en Miquel Nebot, assessor d'IBSTEAM i en el dia d'avui".
Funcionament de Whisper
Hi ha diverses opcions per executar Whisper, però la més senzilla i immediata que requereix menys recursos és executar-lo en un entorn remot com Colaboratory de Google. Només us caldrà un compte de Google i unes poques línies de codi. És recomanable consultar la secció de Primeres passes amb Colab.
Pel que fa el compte de Google podeu fer servir el mateix que vau crear per configurar el mòbil corporatiu.
- Entreu a https://colab.research.google.com/ i valideu-vos amb les vostres credencials.
- Un cop dintre de l'eina, Cliqueu a sobre de "+ Nuevo Cuaderno" o "+ New Notebook"
- En el menú superior cliqueu a "Entorno de ejecución > Cambiar tipo de entorno de ejecución" o "Runtime > Change Runtime type", verifiqueu que estigui seleccionat Python 3 com a entorn d'execució i GPU com a accelerador de hardware
- A continuació cliqueu a sobre de "+ Código" o "+ Code" es crearà una nova cel·la per introduir instruccions
- Copieu i enganxeu aquestes 3 línies que instal·laran en l'entorn virtual de Google Colab el programari necessari, no s'instal·larà res en el vostre maquinari:
!pip install git+https://github.com/openai/whisper.git
- Executeu la cel·la clicant a la icona de Play situada a l'esquerra, espereu fins que al costat d'aquesta icona aparegui un símbol de verificat i els segons que ha trigat l'execució.
- Ara si teniu l'àudio del vostre vídeo el podeu carregar a la zona de fitxers de Colab, o bé podeu importar-lo directament de YouTube, amb aquestes línies de codi. Ho farem en una nova cel·la de codi, o sigui que novament "+ Código" i enganxem i executem aquesta cel·la prement novament el botó play (codi editat el 16 octubre de 2024 per fer servir pytubefix en comptes de pytube, més info als comentaris):
!pip install pytubefix
from pytubefix import YouTube
- En una altra cel·la enganxem i executem (Play)
url = input("Introdueix la URL del video de YouTube: ")
- Ens demanarà la URL del vídeo que prèviament, o ara mateix, podem copiar (aneu al vídeo i feu botó dret a sobre i Copiar URL del video), l'enganxem amb Ctrl+V i Intro.
- En una altra cel·la copiem i executem el següent:
yt_url = YouTube(url)
audio_stream = yt_url.streams.filter(only_audio=True).first()
output_path="/content"
filename="audio.mp3"
audio_stream.download(output_path=output_path, filename=filename)
print(f"S'ha desat l'audio a la seguent carpeta del COLAB {output_path}/{filename}")
- Ja estem acabant, si cliqueu en la icona amb forma de carpeta a l'esquerra de Colab, s'obrirà (o es tancarà, alternativament) la zona d'arxius d'usuari, veureu que s'ha creat un fitxer anomenat "audio.mp3".
- Ara que ja tenim Whisper instal·lat i l'audio del nostre vídeo podem executar la següent línia de codi:
!whisper "/content/audio.mp3" --task transcribe --model large --language=ca --verbose False --output_format srt --output_dir audio_transcription
- Depenent de la durada de l'àudio trigarà més o menys l'execució. En un primer moment us apareixerà una barra de progrés que només indica la càrrega del model de la IA, que actualment són 2,87 GB. A continuació apareixerà un nou contador, en aquest cas de frames (per exemple: 100% 633027/633027 [48:10<00:00, 219.00frames/s])
- El fitxer amb els subtítols en format SRT es desarà en una carpeta anomenada audio_transcription. Descarrega-ho quan abans millor (botó dret > Descargar) perquè tots els arxius de l'entorn de Colab desapareixeran en tancar la sessió. El fitxer SRT es pot carregar directament en Youtube, trobareu més de com fer-ho i de com canviar la configuració d'idioma del vídeo -si cal- en l'ajuda de Youtube.
- Ara podeu tornar a iniciar el procés, per generar els subtítols d'un altre video a partir de les pases en que carreguem l'audio, mentre estigui activa la sessió, no cal tornar a instal·lar els programes.
A tall d'exemple, he fet la prova amb el primer vídeo del canal Diba que actualment és el de la campanya Foc off! i que en tenir subtítols integrats, serveix per comparar els resultats amb els generats per Whisper que copio a continuació:
1
00:00:00,000 --> 00:00:05,000
Has vist l'incendi descontrolat i tu llençant burilles per la finestra?
2
00:00:06,000 --> 00:00:07,000
Foc off!
3
00:00:07,000 --> 00:00:10,000
Amb la sequera que patim i faràs barbacoes a tocar del bosc?
4
00:00:10,000 --> 00:00:11,000
Foc off!
5
00:00:11,000 --> 00:00:14,000
I encendràs petards en plena onada de calor?
6
00:00:16,000 --> 00:00:17,000
Foc off!
7
00:00:17,000 --> 00:00:20,000
Saps que si utilitzes maquinària on no toca pots provocar un desastre?
8
00:00:20,000 --> 00:00:21,000
Foc off!
9
00:00:21,000 --> 00:00:23,000
Aquesta es diu més que cap altra.
10
00:00:23,000 --> 00:00:24,000
Per les imprudències...
11
00:00:24,000 --> 00:00:25,000
Foc off!
12
00:00:25,000 --> 00:00:28,000
Si veus foc o una columna de fum, truca al 112.
13
00:00:28,000 --> 00:00:29,000
Generalitat de Catalunya.
14
00:00:29,000 --> 00:00:30,000
Sempre endavant.
Només cal corregir:
- "Has vist l" per "El risc d" al núm. 1
- "Aquesta es diu" per "Aquest estiu" al núm. 9
- "Per" per "A" al núm. 10
Sempre cal revisar els resultats, òbviament, sobretot pel que fa noms propis, gentilicis, topònims, etc. però Whisper estalvia més del 90% de la feina. Gaudiu-ne!
- blog de Fernando Gutiérrez Ferrerías
- 1217 lectures
11 comentaris
Hola de nou,
Hi ha hagut algun canvi respecte la generació de subtítols?
He mirat de seguir el procediment però em trobo aquest error a l'hora d'extreure l'audio:
Sabeu què està passant?
Gràcies
Bon dia Xavier,
La generació de subtítols continua operativa, Whisper funciona correctament.
El que ha deixat de funcionar [1] és l'extracció d'àudio amb Pytube, sembla ser que a causa d'algun canvi recent a la programació de YouTube que, de retruc, ha afectat Pytube. Això passa sovint amb gairebé tots els descarreagadors de video. Mentre no ho arreglen (si ho fan, perquè llegeixo comentaris contradictoris sobre si PyTube està sent mantingut actualment), pots provar un fork anomenat pytubefix que, de moment, funciona. Només has de canviar les dos primeres línies. Trobo que fins i tot va més ràpid del que anava Pytube.
Recorda, per últim, que sempre tens l'opció de pujar manualment el fitxer d'àudio com descrivia en la publicació original. Per obtenir el fitxer d'àudio hi ha moltes opcions, aquestes són algunes:
[1] https://github.com/pytube/pytube/issues?q=is%3Aissue+is%3Aopen+%22HTTP+E...
[2] https://github.com/JuanBindez/pytubefix
Gràcies, Fernando.
Bon dia,
Disculpeu, però em torno amb un problema després d'introduir la URL del vídeo:
Què estic fent malament?
Gràcies
Bona tarda Xavier,
Executa abans aquesta cel·la i torna a provar (pot ser que hagis de tornar a començar pel començament si se t'ha desconnectat l'entorn d'execució):
from pytube import YouTube
Veig que faltava aquesta línia a l'article, l'actualitzo per incorporar-la.
Salutacions
Ara sí. Gràcies!
De res!
Hola, Fernando!
Des de Turisme fem càpsules de vídeo i el català no hi és dins de l'Adobe Premiere a l'hora de reconèixer l'àudio per fer els subtítols. Ens va realment molt bé l'eina que avui ens has presentat, ho acabo de provar amb un vídeo que tenia en local i va perfecte. Moltes gràcies per compartir-ho!!
He passat Whisper al vídeo de constitució del Ple de Cartipàs, els subtítols generats els he penjat adjunts en aquest article (Puntweb no admet adjunts amb extensió SRT, l'he canviat per TXT).
Comentaris:
Els subtítols núm 1 i 2, tot un reguitzell de "No, no, no, ...." poden ser al·lucinacions de Whisper o proves de só enregistrades amb un volum tant baix que l'oida humana no és capaç de percebre (jo al menys no he pogut) però Whisper sí.
El subtítol núm. 5, és un exemple de canvi d'idioma, a castellà en aquest cas, que Whisper és capaç de gestionar amb tota naturalitat.
Finalment, el subtítol final, núm. 451 és una mostra de les al·lucinacions que ocasionalment pot patir Whisper:
451
00:21:29,000 --> 00:21:32,000
Subtítols per la comunitat Amara.org
Jo m'he trobat en vídeos nostres de la Gerència de Serveis de Biblioteques que s'ha inventat al final que pertanyen a algun Departament de la Generalitat.
Gràcies a tú Albert. No oblidis revisar sempre el resultat final, Whisper és germana de ChatGPT, i ocasionalment també al·lucina i s'inventa coses. Un truc per estalviar temps en la revisió de vídeos llargs un cop a l'editor de subtítols de YouTube és reproduir el vídeo a 1,5x o 2x mentre revises el text generat, requereix estar molt enfocat i lliure de distraccions però t'estalvia molt de temps. Un altre aspecte positiu de Whisper que no he comentat és que, a diferència d'altres no realitza una transcripció literal de tot el que es diu a l'àudio, sinó que aplica la intel·ligència artificial per eliminar moltes de les distorsions o elements superflus que acostumen a produir-se en la parla natural, del tipus de les pauses dubitatives (el típic "emmmmm") i similars, generant així unes transcripcions molt més netes. També, que és multiidioma, com ja he comentat, però a diferència del subtitolat automàtic de Youtube que, avui dia si més no, permet només un idioma, Whisper detecta prou bé els canvis d'idioma i segueix la trascripció en l'idioma detectat.
Molt interessant, Fernando, gràcies per compartir-ho!