
Rimando qui https://it.m.wikipedia.org/wiki/SubRip su che cosa sono i subrip, ma sostanzialmente sono formati da un numero progressivo, da codici temporali che indicano quando si visualizza un sottotitolo e quando deve scomparire, e il testo che deve essere visualizzato. Il mio script deve essere usato solo quando i sub forzati non sono in un file a parte, e serve solo a individuare ed estrarre dai sub principali i sottotitoli forzati in maiuscolo, quelle scritte tipicamente inglesi che appaiono nei film e tradotte in italiano, come ad esempio FARM -> FATTORIA, HOSPITAL -> OSPEDALE, e così via.
Posto quindi lo script estraesub.sh, sicuramente migliorabile, magari potrà servire ad altri. Lo script come mio solito quando li faccio è sempre con spiegazioni.
Codice: Seleziona tutto
#!/bin/bash
# script che estrae dai sub principali i sub forzati e li salva in un file .srt a parte
# eseguire lo script con ./estraesub.sh sub_principali.srt
# Con il ciclo while si leggono tutte le righe del file dei sub principali.
# Gli if..fi servono a controllare se le righe contengono almeno una parola in lettere maiuscole,
# e se è così li scrive nel file creato, insieme ai suoi codici temporali, e al suo nuovo numero
# progressivo di sottotitolo.
# N è la variabile del nuovo numero progressivo di ogni sottotitolo forzato estratto.
# RIGA_PRECEDENTE è la variabile che contiene la riga letta precedentemente, serve per controllare
# in seguito una volta trovata una riga con parole in lettere maiuscole, se la riga prima contiene
# i codici temporali, quindi numerici. Prima di una riga con parole possono esserci solo i codici
# temporali o altre parole.
while IFS= read -r RIGA; do
if [[ $RIGA =~ [[:upper:]]{2,} ]]; then
if [[ $RIGA_PRECEDENTE =~ [[:digit:]][^a-z] ]]; then
N=$((N+1))
echo -e "\n$N\n$RIGA_PRECEDENTE\n$RIGA" >> sub_forzati.srt
else
echo "$RIGA" >> sub_forzati.srt
fi
fi
RIGA_PRECEDENTE=$RIGA
done < "$1"
sed -i '1d' sub_forzati.srt # elimina la prima riga del file
