Resum de vídeos de JLCava
Contingut
Introducció
Com funciona cada pas
- Vídeo: fa servir yt-dlp i agafa l’últim vídeo del canal que encara no hagi processat. Guarda els ja fets a processats.json, així no repeteix res encara que l’executis dues vegades.
- Transcripció: fa servir faster-whisper si el tens instal·lat, i si no, openai-whisper, amb el model large-v3-turbo forçat a castellà. En acabar allibera la VRAM.
- Resum: crida l’API d’Ollama i després li demana que descarregui el model (keep_alive: 0). Així Whisper i el LLM no comparteixen mai els 16 GB. Si el vídeo és molt llarg, primer fa resums parcials per trossos i després els uneix en un de sol.
- TTS: fa servir Piper amb la veu es_ES-davefx-medium. Funciona amb CPU, és ràpid i té un castellà prou natural. Treu el format markdown abans de llegir el text.
- Correu: ja hi és, però està desactivat (ENVIAR_CORREU = False) -> ho canvio a True, i funciona.
El directori del projecte:
mkdir jlcava cd jlcava
ara bé, el whisper està en un altre directori, i en aquest directori del whisper hi ha un venv.
Ollama
pregunta: el ollama suposo que l'he de tenir encès en un altre terminal? Resposta: No cal, en principi. Normalment Ollama ja funciona com a servei en segon pla i el script s’hi connecta sol a http://localhost:11434. Linux: l’instal·lador oficial crea un servei systemd que s’engega sol. Pots comprovar-ho amb systemctl status ollama.
he de canviar el script per un model que tingui descarregat (ollama list). D'entrada, faré servir qwen3.5:9b
Whisper
He de tenir el whisper activat. I puc aprofitar aquest entorn venv per utilitzar el yt-dlp que em permet descarregar vídeos del youtube.
source model-whisper/whisper-env/bin/activate # Linux # source model-whisper/whisper-env/Scripts/activate # si és Windows amb Git Bash pip install -U yt-dlp piper-tts
pip list | grep -i whisper
- Si surt faster-whisper, el script fa servir el model large-v3-turbo.
- Si surt openai-whisper, fa servir turbo. -> aquest és el que faig servir
A l'executar el script *cava_resum.py* surt un error d'incompatibilitat de llibreries
La versió de faster-whisper que tens fa servir una opció de PyAV (la llibreria que llegeix l’àudio) que la versió de PyAV que tens instal·lada ja no accepta. Ho he arreglat al script: ara l’àudio el descodifica ffmpeg i a Whisper li arriba ja preparat, així que PyAV no hi intervé. Substitueix el teu cava_resum.py per la versió nova que t’he enviat.
L’avís de “JavaScript runtime”: Ara mateix no fa fallar res, però yt-dlp avisa que aviat necessitarà Deno per descarregar de YouTube. De moment no ho faig, però en el Claude ss'explica com fer-ho.
Un altre error: RuntimeError: Library libcublas.so.12 is not found or cannot be loaded
/home/joan/model-whisper/whisper-env/bin/pip install nvidia-cublas-cu12 "nvidia-cudnn-cu12==9.*"
veus (la part de TTS)
El resum ja s’ha fet. El trobaràs a sortida/2026-11-12_<id>/2026-11-12_Cava_resumen.md. Ara falla l’últim pas, el de generar l’àudio, perquè no tens descarregada la veu de Piper.
Cada veu de Piper són dos fitxers, el .onnx i el .onnx.json, i tots dos han d’estar a la carpeta veus/. Descarrega’ls així:
mkdir -p /home/joan/jlcava/veus && cd /home/joan/jlcava/veus wget https://huggingface.co/rhasspy/piper-voices/resolve/main/es/es_ES/davefx/medium/es_ES-davefx-medium.onnx wget https://huggingface.co/rhasspy/piper-voices/resolve/main/es/es_ES/davefx/medium/es_
Execució
Finalment ja funciona:
/home/joan/model-whisper/whisper-env/bin/python /home/joan/jlcava/cava_resum.py /home/joan/model-whisper/whisper-env/bin/python /home/joan/jlcava/cava_resum.py --url https://www.youtube.com/watch?v=1O5wZd1qBqI
És a dir, el directori del projecte és */home/joan/jlcava*, però necessito executar-ho amb la versió de python que hi ha en el projecte */home/joan/model-whisper*, on també he instal·lat la funcionalitat de descarregar vídeos del youtube.
Sortida:
/home/joan/model-whisper/whisper-env/bin/python /home/joan/jlcava/cava_resum.py --url https://www.youtube.com/watch?v=1O5wZd1qBqI WARNING: [youtube] No supported JavaScript runtime could be found. Only deno is enabled by default; to use another runtime add --js-runtimes RUNTIME[:PATH] to your command/config. YouTube extraction without a JS runtime has been deprecated, and some formats may be missing. See https://github.com/yt-dlp/yt-dlp/wiki/EJS for details on installing one [20:49:30] Vídeo: Bienvenidos a La CRISIS Demócrata. Así Nos Protegemos | José Luis Cava (2026-11-12) WARNING: [youtube] No supported JavaScript runtime could be found. Only deno is enabled by default; to use another runtime add --js-runtimes RUNTIME[:PATH] to your command/config. YouTube extraction without a JS runtime has been deprecated, and some formats may be missing. See https://github.com/yt-dlp/yt-dlp/wiki/EJS for details on installing one [20:49:32] Transcrivint amb faster-whisper (large-v3-turbo)... [20:49:52] Generant resum amb qwen3.5:9b... [20:51:09] Resum desat: /home/joan/jlcava/sortida/2026-11-12_1O5wZd1qBqI/2026-11-12_Cava_resumen.md [20:51:09] Generant àudio amb Piper... [20:51:14] Àudio desat: /home/joan/jlcava/sortida/2026-11-12_1O5wZd1qBqI/2026-11-12_Cava_resumen.mp3 [20:51:14] Fet!
Enviar mail (SMTP Gmail)
En el fitxer *smtp_password.txt* no s'ha de posar el password del Gmail, sinó un password d'aplicació (16 lletres). En el tutorial del Claude s'explica com fer-ho. Jo he creat un password d'aplicació que es diu *enviar_gmail*.
... [23:41:42] Àudio desat: /home/joan/jlcava/sortida/2026-11-12_1O5wZd1qBqI/2026-11-12_Cava_resumen.mp3 [23:41:42] SMTP smtp.gmail.com:465 — missatge de 1.4 MB [23:41:46] Correu enviat a joanqc@gmail.com (port 465) [23:41:46] Fet!
Per tal d'amagar el password, en comptes de tenir el fitxer *smtp_password.txt*, el copiem a una carpeta oculta, i la v4 del script accedeix a aquest fitxer.
mkdir -p ~/.config/cava mv /home/joan/jlcava/smtp_password.txt ~/.config/cava/smtp_password chmod 700 ~/.config/cava chmod 600 ~/.config/cava/smtp_password
creat per Joan Quintana Compte, novembre 2026