R.   Codice
1#!/bin/bash
2#appunti per scrittura testo dialogo su video
3# Bold
4BBlack='e[1;30m' # Nero
5BRed='e[1;31m' # Rosso
6BGreen='e[1;32m' # Verde
7BYellow='e[1;33m' # Giallo
8BBlue='e[1;34m' # Blu
9BPurple='e[1;35m' # Viola
10BCyan='e[1;36m' # Ciano
11BWhite='e[1;37m' # Bianco
12
13Color_Off='e[0m' # Text Reset
14reset_console="E[37;40m" #biancoBold
15echo -e $BRed'PROGRAMMA shell PER TRASFORMAZIONE file testo parlato
16in istruzioni drawtext per filter_complex ffmpeg'
17if [[ "$1" == "" ]]; then
18echo -e $BWhite'Nome file contenente subtitoli '$BYellow
19read subtitoli
20else
21subtitoli=$1
22fi
23
24if [[ "$2" == "" ]]; then
25echo -e $BWhite'Titolo video '$BYellow
26read titolo
27else
28titolo=$2
29fi
30dur=$( ffprobe -i $titolo -show_entries format=duration -v quiet -of csv=p=0 )
31echo -e $BYellow"Durata "$BWhite$titolo"= "$BGreen$dur
32#costruzione nome output
33titolipos=`expr index "${titolo}" "."`
34titolipos=$(( $titolipos-1 ))
35nuovoct=${titolo:0:$titolipos}
36estensione=${titolo:$titolipos}
37outputvideo=$nuovoct'subt'$estensione
38#-----------------------
39titolipos=`expr index "${subtitoli}" "."`
40titolipos=$(( $titolipos-1 ))
41nuovoct=${subtitoli:0:$titolipos}
42estensione=${subtitoli:$titolipos}
43outputdrawtwtext=$nuovoct'subt'$estensione
44outpututf8=$nuovoct'utf8'$estensione
45echo -e $BWhite"È necessario trasformare i sottotitoli"$BYellow"
46in UTF-8 a causa dei caratteri speciali"$BWhite" ( Y / N )?"$BYellow
47read convert
48if [[ "$convert" == "Y" ]] || [[ "$convert" == "y" ]]; then
49iconv -o $outpututf8 -f iso8859-1 -t utf8 $subtitoli
50titolipos=`expr index "${outpututf8}" "."`
51titolipos=$(( $titolipos-1 ))
52nuovoct=${outpututf8:0:$titolipos}
53estensione=${outpututf8:$titolipos}
54outputdrawtwtext=$nuovoct'subt'$estensione
55fi
56#
57echo -e $BWhite"Famiglia font carattere?
58 "$BGreen"(Scegliere nella cartella /usr/share/fonts/TTF/)
59 "$BWhite"(digitare solo il nome comprensivo di estensione .ttf)
60 Il carattere numerico digitale si trova in 'ani.ttf'"$BYellow
61read fontfamily
62echo -e $BWhite"Grandezza carattere?"$BYellow
63read fsz
64bsz=$(( $fsz/4 ))
65bsz=${bsz%.*}
66echo -e $BWhite"Colore carattere?
67 "$BGreen"(nomeminuscolo o esa-decimale)"$BYellow
68read fontcolor
69echo -e $BWhite"Colore sfondo?
70 "$BGreen"(nomeminuscolo o esa-decimale)"$BYellow
71read boxcolor
72echo -e $BWhite"Indice di traparenza?"$BYellow" (1 decimale)$BWhite
73Valori intermedi tra 0.0 (totale trasparenza) e
741.0 (totale opacità)"$BYellow
75read trasp
76echo -e $BWhite"Posizione verticale Y inizio scrittura counter
77 (in senso orizzontale viene posto a metà video)?"$BYellow
78read y
79
80#-----------------
81linea=1
82echo -e $BBlue"#---------------------------
83"$linea")"
84
85#numFields="${#header[@]}" #credo che questa prima parte serva solo a conoscere n.righe
86while read line || [ -n "$line" ] ; do
87lungh=${#line} #lunghezza stringa di testo della linea letta
88echo -e $BWhite"Lunghezza stringa totale "$BYellow$lungh
89postesto=`expr index "${line}" "|"`
90echo -e $BWhite"Posizione testo "$BYellow$postesto
91testo=${line:$(($postesto)):$(($lungh-$postesto))}
92test[${linea}]=$testo
93echo -e $BWhite"Testo sottotitolo "$BYellow${test[$linea]}
94sinizio=${line:0:$(($postesto-1))}
95ini[${linea}]=$sinizio
96echo -e $BWhite"Inizio sottotitolo secondi "$BYellow${ini[$linea]}
97
98linea=$(($linea+1))
99echo -e $BBlue"#---------------------------
100"$linea")"
101
102done < $subtitoli
103#-----------------
104for (( i=1; i<$linea; i++ ))
105do
106if [[ "$i" > "1" ]];then
107prec=$(($i-1))
108fin[${prec}]=${ini[$i]}
109fi
110done
111rm outputdrawtwtext
112echo "ffmpeg -i "$titolo" -filter_complex "[0]" > $outputdrawtwtext
113stringaffmeg[0]="ffmpeg -i "$titolo" -filter_complex "[0] "
114limite=$(($linea-1))
115for (( i=1; i<$linea; i++ ))
116do
117sottotitolo=${test[$i]}
118echo $sottotitolo
119#echo -e $BRed${test[$i]}$BWhite
120#echo -e $BWhite"Fine sottotitolo precedente secondi "$BYellow${fin[$i]}
121if [[ "$i" == "$limite" ]]; then
122fin[$i]=$((${ini[$i]}+6))
123strdraw[$i]="drawtext=fontfile='/usr/share/fonts/TTF/"$fontfamily"' :
124'text="$sottotitolo" :x=(w-text_w)/2:y="$y":fontsize="$fsz":alpha="$trasp":fontcolor="$fontcolor":box=1:
125 boxcolor="$boxcolor"@0.8:boxborderw="$bsz"' :enable='between=(t,"${ini[$i]}","${fin[$i]}")' "
126else
127strdraw[$i]="drawtext=fontfile='/usr/share/fonts/TTF/"$fontfamily"' :
128'text="$sottotitolo" :x=(w-text_w)/2:y="$y":fontsize="$fsz":alpha="$trasp":fontcolor="$fontcolor":box=1:
129 boxcolor="$boxcolor"@0.8:boxborderw="$bsz"' :enable='between=(t,"${ini[$i]}","${fin[$i]}")', "
130fi
131echo "${strdraw[$i]}" >> $outputdrawtwtext
132stringaffmeg=$stringaffmeg${strdraw[$i]}
133done
134stringaffmeg=$stringaffmeg" [videotimer]" -map "[videotimer]" -map 0:a? -movflags use_metadata_tags -map_metadata 0 "$outputvideo
135#---
136echo " [videotimer]" -map "[videotimer]" -map 0:a? -movflags use_metadata_tags -map_metadata 0 "$outputvideo >> $outputdrawtwtext
137#a questo punto domandare se eseguire il comando o dare il tempo per verificare il file di output
138echo -e $BRed"Attenzione!"$BWhite"
139 Si desidera eseguire il comando generato dal programma? (Y / N)"
140read exec
141if [[ "$exec" == "Y" ]] || [[ "$exec" == "y" ]]; then
142eval "${stringaffmeg[@]}"
143echo -e $BWhite"Il video "$BYellow$outputvideo$BWhite" è stato elaborato con i sottotitoli"
144else
145exit 0
146fi
147exit 0
148
149
150