Primeiro, você precisará replicar a estrutura de diretórios no novo diretório principal. Dentro do diretório original que contém os arquivos .mp4, execute find . -type d >dirs.txt . Isso armazenará todos os diretórios e seus caminhos em dirs.txt . Em seguida, altere o diretório para o novo diretório superior e execute xargs mkdir -p <dirs.txt . Isso criará a mesma estrutura de diretórios que o original.
Para alterar o formato e armazenar os arquivos em um diretório diferente, execute o seguinte comando dentro do diretório superior original.
find . -name "*.mp4" -exec bash -c 'var=${1%.mp4}; var=${var#*/};ffmpeg -i "${1#*/}" -vn -acodec libmp3lame -ac 2 -qscale:a 4 -ar 48000 "~/PATH/to/NewTopDIr/$var".mp3' - '{}' \;
Explicação
find . -name "*.mp4" localiza todos os arquivos do tipo .mp4. -exec bash -c executa o comando bash fornecido na sequência subsequente para cada arquivo encontrado. Ele também passa o nome do arquivo como variável , que pode ser usado no comando bash.
Neste ponto, contém algo como ./path/file.mp4 . Para remover o tipo de arquivo *.mp4 , usamos var=${1%.mp4} , que armazena ./path/file a $var . Agora, removemos o ./ precedente com var=${var#*/} , portanto, o valor de $var é path/file .
No comando ffmpeg , obtemos o nome do arquivo atual com ${var#*/} , que dá caminho / arquivo.mp4 e obtemos o arquivo de saída com ~/PATH/to/NewTopDIr/$var".mp3 , em que $var tem o valor path/file , conforme explicado acima.