Wednesday, April 19, 2017

mux lyric wav2dvd.sh

#!/bin/sh
# name of this script: wav2dvd.sh

DIRAS="~/Public"
DIRAS="/srv/vidas/Public"
DEBUG=""
function PARAMETRAI {
    echo "reikalingas parametras"
    echo "$0 0 - lyrikoje be pakeitimu"
    echo "$0 1 - iterpti priekyje eilute: failo pavadinimas"
    echo "$0 2 - pakeisti pirma eilute failo pavadinimu"
    echo "$0 3 - direktrija i prieki pries pirma eilute"
    echo "$0 4 - iterpti priekyje eilute: direktorija - failo pavadinimas"
#    exit 1
    DEBUG="yes"
    TITLE="4"
}

echo "currentDir/*.wav to $DIRAS"
echo
TITLE="$1"
if [ "$#" -ne 1 ]; then
    PARAMETRAI
fi

# patikriname ar yra visi lyric.txt
for wav in *.wav; do
 file=`basename "$wav" .wav`
 if [ ! -e "$file.txt" ]; then
    echo "nerastas $file".txt
    exit 1
 fi
done

# kopijuojame i DIRAS
for wav in *.wav; do
 file=`basename "$wav" .wav`

 # gale naikiname tuscias eilutes
 if [ "$TITLE" -eq "0" ]; then
    echo "0 - lyrikoje be pakeitimu"
    cat "$file".txt >$DIRAS/tmp.txt
 elif [ "$TITLE" -eq "1" ]; then
    echo "1 - iterpti priekyje eilute: failo pavadinimas"
    echo "$file" | cat - "$file.txt" >$DIRAS/tmp.txt
 elif [ "$TITLE" -eq "2" ]; then
    echo "2 - pakeisti pirma eilute failo pavadinimu"
    { echo "$file"; tail -n +2 "$file".txt; } >$DIRAS/tmp.txt
 elif [ "$TITLE" -eq "3" ]; then
    echo "3 - direktrija i prieki pries pirma eilute"
    echo "${PWD##*/} - " | tr -d '\n' | tr -d '\r' | cat - "$file.txt" >$DIRAS/tmp.txt
 elif [ "$TITLE" -eq "4" ]; then
    echo "4 - iterpti priekyje eilute: direktorija - failo pavadinimas"
    { echo "${PWD##*/} - " | tr -d '\n' | tr -d '\r'; echo "$file"; cat "$file".txt; } >$DIRAS/tmp.txt
 else
    PARAMETRAI
    exit
 fi

 # gal jau buvome suformave
 # if [ DEBUG -ne "yes" || ! -e "$DIRAS/$wav" ]; then
 #     echo sox "$wav" -r 48000 "$DIRAS/$wav"
 #     sox "$wav" -r 48000 "$DIRAS/$wav"
 if [ ! -e "$DIRAS/$wav" ]; then
    ln "$wav" "$DIRAS/$wav"
 fi
done

cd $DIRAS

for wav in *.wav; do

 file=`basename "$wav" .wav`

 # lines in screen (68 in line font=16)
 inscreen=29
 eiluciu=$(cat tmp.txt | wc -l)
 kadru=$((3*inscreen))
 if [ $eiluciu -le $kadru ]; then
    cat tmp.txt | expand | col -b | cat -s | sed '/^$/N;s/[\r\n]/  /g' | grep -v '^$' | fold -s -w68 >"$file".txt
 else #  stulpelis i ilga eilute
    { head -n 1 tmp.txt; tail -n +2 tmp.txt | expand | col -b | cat -s | sed '/^$/!s/^/>/' | sed '/^$/d; :loop y/\n/ /; N; /\n$/! b loop; s/   */ /g; s/^ //' | sed '/^$/!s/^/  /' | grep -v '^$' | fold -s -w68; } >"$file".txt
 fi
 eiluciu=$(cat "$file.txt" | wc -l)
 kadru=$((eiluciu-inscreen+1))

 num=1
 head -n $inscreen "$file.txt" >"$file"001.txt
 if [ $kadru -gt 0 ]; then
    while [ $kadru -gt $num ]; do
    ((num++))
    ext=$(printf "%03d" $num)
    { head -n 1 "$file".txt; head -n $((inscreen+num-1)) "$file".txt | tail -n $((inscreen-1)) - ; } >"$DIRAS/$file$ext".txt
    done
    ((num++))
    ext=$(printf "%03d" $num)
    { head -n 1 "$file".txt; tail -n $((inscreen-1)) "$file".txt; } >"$DIRAS/$file$ext".txt
 else
    kadru=1
 fi

 for ((i=1; i<=$num; i++)); do
    ext=$(printf "%03d" $i)
    { echo -n ">>>> "; head -n 1 "$file"$ext.txt; head -n $inscreen "$file"$ext.txt | tail -n $((inscreen-1)); } | convert -background black -size 700x576 -font Courier -pointsize 16 -weight Bold -fill white -splice 8x -gravity west caption:@- "$file"$ext.jpg
 done

 duration=$(ffmpeg -i "$wav" 2>&1 | grep "Duration" | cut -d ' ' -f4 | sed s/,//)
 if [ $num -eq 1 ]; then
    ffmpeg -loop 1 -i "$file"001.jpg -target pal-dvd -qscale:v 24 -pix_fmt yuv420p -g 100 -an -y -t $duration "$file".m2v
 else
    sekundziu=$(echo $duration | awk -F: '{ print ($1*3600)+($2*60)+$3 }'); sekundziu=${sekundziu%%.*}
  # kiek sekundziu skirsime vienai eilutei.
    num=$((sekundziu/eiluciu)); num=${num%%.*}
    if [ "$num" -le 1 ]; then
    num=1
    fi
  # prasukami ekranai
    ffmpeg -framerate $kadru/$((num*kadru)) -i "$file"%03d.jpg -target pal-dvd -qscale:v 24 -pix_fmt yuv420p -g 100 -an -y "$file"001.m2v
    sekundziu=$((sekundziu-(num*kadru)))
  # paskutinis ekranas trumpesnis, negu pirmas
    num=$((sekundziu/3)); num=${num%%.*}
    duration="00:""$(printf "%02d" $((num/60)))":"$(printf "%02d" $((num%60)))"
    ffmpeg -loop 1 -i "$file"$(printf "%03d" $kadru).jpg -target pal-dvd -qscale:v 24 -pix_fmt yuv420p -g 100 -an -y -t $duration "$file"999.m2v
  # likutis atitenka pirmam ekranui
    num=$((sekundziu-num))
    duration="00:""$(printf "%02d" $((num/60)))":"$(printf "%02d" $((num%60)))"."50"
    ffmpeg -loop 1 -i "$file"001.jpg -target pal-dvd -qscale:v 24 -pix_fmt yuv420p -g 100 -an -y -t $duration "$file"000.m2v
    ffmpeg -i "concat:${file}000.m2v|${file}001.m2v|${file}999.m2v" -f mpeg -c copy "$file".m2v
 fi
 mencoder "$file".m2v -audiofile "$wav" -oac copy -ovc lavc -o "$file".mpg

done

echo "baigta"
exit
# ffmpeg -t $duration -vcodec copy -acodec copy -i $input $output

No comments:

Post a Comment