Como os dois diretórios contêm o mesmo número de arquivos, aqui está uma abordagem que salva nomes de arquivos em dois arrays e renomeia para cada índice na lista de índices de arrays (pois ambos os arrays têm o mesmo comprimento):
mp4paths=(dir1/*.mp4) # save mp4 file names in array
mp4names=("${mp4paths[@]##*/}") # remove leading path components
name=("${mp4names[@]%.*}") # remove extension
srt=(dir2/*.srt) # save srt file names in array
for i in "${!srt[@]}" # for each index in the list of array indices
do # do stuff here...
mv "${srt[$i]}" dir2/"${name[$i]}".srt
done
Isso deve funcionar com todos os tipos de nomes de arquivos.
Para uma "execução a seco", substitua mv
por printf '%s -> %s\n'
.