Crystal, 203 194 187 186 184184 163 bytes
o=""
v=c=0
l=1
ARGV[0]ARGV[v=c=0].each_char{|a|r=/#{a}/
"aeiouy"=~r&&(v=x=1)||(c=v)
o += ao+=a if l>0||xc<2||x
o += c>0&&(x&&break||(o+=(i="pgtvkgbqrzdfs"=~r)?"bcdfgkpqrstvz"[i]: a if c*l>0
c>0&&(l=0)&&x&&break)}
p o+o[-2..-1]