#!/bin/sh usage () { echo " Usage: $0 --name \"TTS-TNM@1\" --voice-kr Yuna --voice-en Susan -rate 155 " >&2; exit 1 } while [ $# -gt 0 ]; do case "$1" in --name) NAME="$2"; shift;; --voice-kr) VOICEkr="$2"; shift;; --voice-en) VOICEen="$2"; shift;; --rate) RATE="$2"; shift;; --) shift; break;; -*) usage ;; *) break ;; esac; shift done [ "$NAME" = "" ] && usage [ "$VOICEkr" = "" ] && VOICEkr=Yuna [ "$VOICEen" = "" ] && VOICEen=Susan [ "$VOICE" = "" ] && VOICE=$VOICEkr [ "$RATE" = "" ] && RATE=155 NAMEPOXIS=$(echo "$NAME" | sed 's/ /\\ /g') cmd="say -v Yuna -r $RATE -o \"$NAME.aiff\" -f \"$NAME.txt\"" echo $cmd #eval $cmd MF=$2; N=0; FS=""; cat "${NAME}.txt" | sed \ -e 's/[.][ ]*$/\./g' -e $'s/[.][ ]*/\.\\\n/g' -e $'s/[?][ ]*/\?\\\n/g' \ -e 's/–/-/g' \ > ${NAME}_tts.txt while read line; do L=$(echo "${line}" | sed -e 's/^[[:space:]]*//') han=$(echo $L | grep -E '[ㄱ-힣]') [ ! -z "$han" ] && VOICE=$VOICEkr || VOICE=$VOICEen if [ ! -z "$L" ]; then echo $L N=$((N+1)) SN=$( printf "%05d" $N ) cmd="say -v $VOICE -r $RATE -o \"$NAME-$SN.aiff\" \"$L\"" echo $cmd; eval $cmd; fi done < "${NAME}_tts.txt" #sleep 10 N=0; FS=""; MF="$NAME-all.aiff"; MAP=""; GAP="" NAMEPOXIS=$(echo "$NAME" | sed 's/ /\\ /g') cmd="find -f ${NAMEPOXIS}*.aiff" AIFFS=$(eval $cmd) echo $AIFFS IFS=' ' set -f for f in $AIFFS; do #echo $f FS="$FS -i \"$f\" " MAP="${MAP}[${N}][g${N}]" N=$((N+1)) done NG=$(($N*2)) G=$(($N-1)) for (( i=0; i<$N; i++ )); do GAP="${GAP}[$N]atrim=duration=1[g${i}];" done cmd="ffmpeg -y \ $FS \ -f lavfi -i anullsrc \ -filter_complex '${GAP}${MAP}concat=n=$NG:v=0:a=1[a]' -map '[a]' \ \"$MF\"" echo $cmd eval $cmd cmd="lame \"${NAME}-all.aiff\" \"${NAME}-all.mp3\"" echo $cmd; eval $cmd