Primeiro, remova o caminho:
outf=${f##*/}
Em seguida, altere a extensão:
outf=${outf%.*}.mp4
(não necessariamente nessa ordem, claro.)
Estou tentando escrever um script para uso com o HandbrakeCli para converter arquivos .mkv em arquivos mp4 compatíveis com o XBOX 360.
#!/bin/bash
for f in "$@"
do
echo "$f"
HandbrakeCli -i "$f" -o ~/Movies/Handbrake/"${f%.*}.mp4" --preset "Normal" --mixdown "stereo" --subtitle "1" --width 720 --keep-display-aspect
done
O problema é que o nome do arquivo de destino (de acordo com a saída do HandbrakeCli) inclui o caminho completo para o arquivo de entrada. Naturalmente estou interessado apenas no nome do arquivo sem extensão desde que eu adicione .mp4.
Eu não estou acostumado a scripts de shell, então a ajuda é muito apreciada!
Como você conhece a extensão do seu arquivo de entrada, pode dizer
new=~/Movies/Handbrake/"$(basename "$f" .mkv)".mp4