Tenho algumas músicas em formato wav. Gostaria de convertê-los para flac (que também é sem perdas, mas tem compactação).
A solução precisa percorrer subdiretórios para localizar arquivos .wav ou .WAV (idealmente, sem distinção entre maiúsculas e minúsculas), convertê-los em .flac e enviar os arquivos .flac para uma árvore de diretório diferente. Os arquivos wav originais estão em ~/Music e os arquivos flac de saída podem ir para ~/Music_Flac.
Estou usando o Arch Linux x86_64 e tenho o ffmpeg da seguinte forma:
ffmpeg version 3.4.2 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 7.3.0 (GCC)
configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-avisynth --enable-avresample --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libass --enable-libbluray --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-shared --enable-version3 --enable-omx
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libavresample 3. 7. 0 / 3. 7. 0
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
libpostproc 54. 7.100 / 54. 7.100
Se você deseja substituir todos
wav
reclusivamente por suasflac
contrapartes, a maneira mais fácil que encontrei é usarflac
binários:find
+ffmpeg
solução:$0
- passado para o comando shell como um diretório de destino~/Music_Flac/
$1
- passado para o comando shell como um caminho de arquivo{}
bn=${1##*/}
- nome base do arquivo sem caminho do diretóriobn=${bn%.*}
- nome base do arquivo com extensão truncada-loglevel 16
- definir o nível de registro16
usado porffmpeg
Outra opção seria usar o globbing do bash para encontrar os arquivos wav e, em seguida, os recursos de expansão de parâmetros do shell para alterar a estrutura do diretório e os nomes dos arquivos:
Se os arquivos forem apenas ever
*.wav
e*.WAV
, você poderá pular oshopt nocaseglob
e, em vez disso, usarfor input in Music/**/*.wav Music/**/*.WAV
.Não sei quais opções você deseja usar para o ffmpeg, mas forneci um
echo
exemplo dos caminhos de arquivo de entrada e saída a partir dos quais você pode criar.Nesta árvore de diretórios de amostra:
a saída do comando de amostra é:
... junto com os
mkdir
comandos necessários ao longo do caminho.Além da resposta de @RomanPerekhrest, que selecionei como a resposta correta para a pergunta, existe uma solução GUI que também funciona bem:
GitHub - dfaust/soundkonverter: soundKonverter está em modo de manutenção, PRs são bem-vindos.
Está nos repositórios do Arch também:
Arch Linux - soundkonverter 3.0.1-1 (x86_64)