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