Cachitos 2022. Primera parte
Retomando la entrada de cachitos de la nochevieja de 2020
Actualizamos el script que se baja el vídeo, recorta y extrae los subtítulos.
Sea como sea, siempre ha dejado perlas como estas
Ejemplo:
El fotograma se obtiene usando mplayer y sacando uno de 200 fotogramas como imagen, luego se recorta la parte del súbtitulo, se invierten los colores y se usa tesseract
para el ocr
Y tesseract hace el trabajo de pasarlo a texto
Izquierda... Derecha... Como veis, tienen la postura tan
sólidamente definida como el gobierno respecto al Sahara.
Veamos las partes importantes de extract_subtitles.sh
Bajar el vídeo
#!/bin/bash
root_directory=/home/jose/proyecto_cachitos
mkdir -p $root_directory
cd $root_directory
echo "First arg: $1"
mkdir -p video
cd video
ANNO=$1
echo $ANNO
suffix_video="_cachitos.mp4"
suffix_jpg_dir="_jpg"
suffix_txt_dir="_txt"
video_file=$ANNO$suffix_video
echo $video_file
if [ "$ANNO" == "2022" ] ;
then
wget https://rtvehlsvodlote7.rtve.es/mediavodv2/resources/TE_SHIECRO/mp4/1/5/1672556504451.mp4
mv 1672556504451.mp4 $video_file
fi
Como se contaba en el post original hay que ir a la web de rtve play, ir a reproducir el cachitos correspondiente, y luego darle a inspeccionar código y ver de qué url está haciendo el request. Para 2021 por ejemplo estaba en https://lote5-vod-hls-geoblockurl.akamaized.net/resources/TE_GLUCA/mp4/4/0/1641020001504.mp4
. Cómo vemos, no hay mucha coherencia en dónde dejan los archivos.
Convertir a jpg , cambiar tamaño y extraer subtítulos.
Gracias a software de linux como mplayer
parallel
o magick
se puede hacer un montón de cosas con los vídeos e imágenes.
# Pasar a jpg uno de cada 200 fotogramas
mplayer -vf framestep=200 -framedrop -nosound $video_file -speed 100 -vo jpeg:outdir=$ANNO$suffix_jpg_dir
cd $ANNO$suffix_jpg_dir
# Convertir a formato más pequño
find . -name '*.jpg' | parallel -j 8 mogrify -resize 642x480 {}
# Seleccionar cacho dond están subtitulos
find . -name '*.jpg' | parallel -j 8 convert {} -crop 460x50+90+295 +repage -compress none -depth 8 {}.subtitulo.tif
# Poner en negativo para que el ocr funcione mejor
find . -name '*.tif' | parallel -j 8 convert {} -negate -fx '.8*r+.8*g+0*b' -compress none -depth 8 {}
- Con mplayer extraemso uno de cada 200 fotogramas y los guardamos como formato jpeg en la carpeta especificada.
- Con la utilidad
mogrify
demagick
reescalamos cada uno de los archivos anteriores a 642x480 píxeles. Conparallel
(sudo apt install parallel
si no lo tienes instalado) le decimos que haga esto en paralelo usando 8 hilos de ejecución - Con
convert
y opcióncrop
indicamos y recortamos la zona de la imagen dónde creemos que están los rótulos y creamos archivos tif que sólo tienen esa zona. - Con la opción
negate
deconvert
invertimos los colores de forma que sea más fácil paratesseract
hacer el reconomicimiento óptico de caracteres.
OCR.
Con tesseract simplemente pasamos los archivos tif generados y le indicamos que lo haga en paralelo usando 8 hilos y que como lenguaje utilizando el español -l spa
# Pasar el ocr con idioma en español
find . -name '*.tif' | parallel -j 8 tesseract -l spa {} {}
tesseract
creará tantos archivos txt
como fotogramas hayamos extraído (1302 ficheros para cachitos nochevieja de 2022), la mayoría estarán sin rótulos.
El nombre que hemos puesto a los archivos sigue este patrón 00000946.jpg.subtitulo.tif.txt
indicando el número de fotograma así como las diferentes extensiones, así será más fácil luego identificar un texto con la imagen de la que viene.
En la siguiente entrada veremos algo de limpieza de texto.