#!/bin/bash #appunti per scrittura testo dialogo su video # Bold BBlack='\e[1;30m' # Nero BRed='\e[1;31m' # Rosso BGreen='\e[1;32m' # Verde BYellow='\e[1;33m' # Giallo BBlue='\e[1;34m' # Blu BPurple='\e[1;35m' # Viola BCyan='\e[1;36m' # Ciano BWhite='\e[1;37m' # Bianco Color_Off='\e[0m' # Text Reset reset_console="\E[37;40m" #biancoBold echo -e $BRed'PROGRAMMA shell PER TRASFORMAZIONE file testo parlato in istruzioni drawtext per filter_complex ffmpeg (versione textfile)' if [[ "$1" == "" ]]; then echo -e $BWhite'Nome file contenente subtitoli '$BYellow read subtitoli else subtitoli=$1 fi if [[ "$2" == "" ]]; then echo -e $BWhite'Titolo video '$BYellow read titolo else titolo=$2 fi dur=$( ffprobe -i $titolo -show_entries format=duration -v quiet -of csv=p=0 ) echo -e $BYellow"Durata "$BWhite$titolo"= "$BGreen$dur #costruzione nome output titolipos=`expr index "${titolo}" "."` titolipos=$(( $titolipos-1 )) nuovoct=${titolo:0:$titolipos} estensione=${titolo:$titolipos} outputvideo=$nuovoct'subt'$estensione #----------------------- titolipos=`expr index "${subtitoli}" "."` titolipos=$(( $titolipos-1 )) nuovoct=${subtitoli:0:$titolipos} estensione=${subtitoli:$titolipos} outputdrawtwtext=$nuovoct'subt'$estensione outpututf8=$nuovoct'utf8'$estensione echo -e $BWhite"È necessario trasformare i sottotitoli"$BYellow" in UTF-8 a causa dei caratteri speciali"$BWhite" ( Y / N )?"$BYellow read convert if [[ "$convert" == "Y" ]] || [[ "$convert" == "y" ]]; then iconv -o $outpututf8 -f iso8859-1 -t utf8 $subtitoli rm $subtitoli mv $outpututf8 $subtitoli fi # titolipos=`expr index "${outpututf8}" "."` # titolipos=$(( $titolipos-1 )) # nuovoct=${outpututf8:0:$titolipos} # estensione=${outpututf8:$titolipos} # outputdrawtwtext=$nuovoct'subt'$estensione # echo -e $BWhite"Famiglia font carattere? "$BGreen"(Scegliere nella cartella /usr/share/fonts/TTF/) "$BWhite"(digitare solo il nome comprensivo di estensione .ttf) Il carattere numerico digitale si trova in 'ani.ttf'"$BYellow read fontfamily echo -e $BWhite"Grandezza carattere?"$BYellow read fsz bsz=$(( $fsz/4 )) bsz=${bsz%.*} echo -e $BWhite"Colore carattere? "$BGreen"(nomeminuscolo o esa-decimale)"$BYellow read fontcolor echo -e $BWhite"Colore sfondo? "$BGreen"(nomeminuscolo o esa-decimale)"$BYellow read boxcolor echo -e $BWhite"Indice intensità colore sfondo? (max = 1)"$BYellow read intensi echo -e $BWhite"Indice di traparenza?"$BYellow" (1 decimale)$BWhite Valori intermedi tra 0.0 (totale trasparenza) e 1.0 (totale opacità)"$BYellow read trasp echo -e $BWhite"Posizione verticale Y inizio scrittura counter (in senso orizzontale viene posto a metà video)?"$BYellow read y #----------------- linea=1 echo -e $BBlue"#--------------------------- "$linea")" #numFields="${#header[@]}" #credo che questa prima parte serva solo a conoscere n.righe while read line || [ -n "$line" ] ; do lungh=${#line} #lunghezza stringa di testo della linea letta echo -e $BWhite"Lunghezza stringa totale "$BYellow$lungh postesto=`expr index "${line}" "|"` echo -e $BWhite"Posizione testo "$BYellow$postesto testo=${line:$(($postesto)):$(($lungh-$postesto))} test[${linea}]=$testo echo -e $BWhite"Testo sottotitolo "$BYellow${test[$linea]} sinizio=${line:0:$(($postesto-1))} ini[${linea}]=$sinizio echo -e $BWhite"Inizio sottotitolo secondi "$BYellow${ini[$linea]} linea=$(($linea+1)) echo -e $BBlue"#--------------------------- "$linea")" done < $subtitoli #----------------- for (( i=1; i<$linea; i++ )) do if [[ "$i" > "1" ]];then prec=$(($i-1)) fin[${prec}]=${ini[$i]} fi done rm outputdrawtwtext echo "ffmpeg -i "$titolo" -filter_complex \"[0]" > $outputdrawtwtext stringaffmeg[0]="ffmpeg -i "$titolo" -filter_complex \"[0] " limite=$(($linea-1)) for (( i=1; i<$linea; i++ )) do sottotitolo=${test[$i]} nomefiletesto=${ini[$i]}".txt" echo $sottotitolo > $nomefiletesto #echo -e $BWhite$nomefiletesto #echo $sottotitolo #echo -e $BRed${test[$i]}$BWhite #echo -e $BWhite"Fine sottotitolo precedente secondi "$BYellow${fin[$i]} if [[ "$i" == "$limite" ]]; then fin[$i]=$((${ini[$i]}+6)) strdraw[$i]="drawtext=fontfile='/usr/share/fonts/TTF/"$fontfamily"' \: \ textfile="$nomefiletesto" :x=(w-text_w)/2:y="$y":fontsize="$fsz":alpha="$trasp":fontcolor="$fontcolor":box=1: \ boxcolor="$boxcolor"@"$intensi" :boxborderw="$bsz" \:enable='between=(t,"${ini[$i]}","${fin[$i]}")' " else strdraw[$i]="drawtext=fontfile='/usr/share/fonts/TTF/"$fontfamily"' \: \ textfile="$nomefiletesto" :x=(w-text_w)/2:y="$y":fontsize="$fsz":alpha="$trasp":fontcolor="$fontcolor":box=1: \ boxcolor="$boxcolor"@"$intensi" :boxborderw="$bsz" \:enable='between=(t,"${ini[$i]}","${fin[$i]}")', " fi echo "${strdraw[$i]}" >> $outputdrawtwtext stringaffmeg=$stringaffmeg${strdraw[$i]} done stringaffmeg=$stringaffmeg" [videotimer]\" -map \"[videotimer]\" -map 0:a? -movflags use_metadata_tags -map_metadata 0 "$outputvideo #--- echo " [videotimer]\" -map \"[videotimer]\" -map 0:a? -movflags use_metadata_tags -map_metadata 0 "$outputvideo >> $outputdrawtwtext #a questo punto domandare se eseguire il comando o dare il tempo per verificare il file di output echo -e $BRed"Attenzione!"$BWhite" Si desidera eseguire il comando generato dal programma? (Y / N)" read exec if [[ "$exec" == "Y" ]] || [[ "$exec" == "y" ]]; then eval "${stringaffmeg[@]}" echo -e $BWhite"Il video "$BYellow$outputvideo$BWhite" è stato elaborato con i sottotitoli" for (( i=1; i<$linea; i++ )) do #sottotitolo=${test[$i]} nomefiletesto=${ini[$i]}".txt" if [[ -f $nomefiletesto ]]; then #per evitare errore file not found rm $nomefiletesto fi done fi echo -e $BRed"ATTENZIONE!"$BYellow" Si desidera rimuovere i singoli file.txt utilizzati per i singoli sottotitoli? ( Y / N )" read rimozione if [[ "$rimozione" == "y" ]] || [[ "$rimozione" ]]; then for (( i=1; i<$linea; i++ )) do #sottotitolo=${test[$i]} nomefiletesto=${ini[$i]}".txt" if [[ -f $nomefiletesto ]]; then #per evitare errore file not found rm $nomefiletesto fi done fi exit 0