Как преобразовать все файлы .wav в подкаталогах в .flac?

В Ubuntu, Mint и родственниках strlcpy и strlcat доступны в пакете libbsd-dev . Выполните

sudo apt-get install libbsd-dev

. Это установит библиотеки, файлы заголовков и страницы руководства.

Чтобы использовать функции из кода C, добавьте строку

#include 

в свои файлы и добавьте -lbsd или более переносимый $ (pkg-config --libs libbsd) в командную строку gcc , чтобы связать библиотеку.

3
04.03.2018, 11:28
4 ответа

find+ffmpegsolución:

find ~/Music -type f -iname "*.wav" -exec sh -c \
'bn=${1##*/}; bn=${bn%.*}; ffmpeg -loglevel 16 -i "$1" "${0}${bn}.flac"' ~/Music_Flac/ {} \;
  • $0-pasado al comando de shell como directorio de destino~/Music_Flac/
  • $1-pasó al comando de shell como una ruta de archivo{}
  • bn=${1##*/}-nombre base del archivo sin ruta de directorio
  • bn=${bn%.*}-nombre base del archivo con extensión truncada
  • -loglevel 16-establecer el nivel de registro 16utilizado porffmpeg
3
27.01.2020, 21:18

Además de la respuesta de @RomanPerekhrest, que seleccioné como la respuesta correcta a la pregunta, hay una solución GUI que también funciona bien:

GitHub -dfaust/soundkonverter :soundKonverter está en modo de mantenimiento, los PR son bienvenidos.

También está en los repositorios de Arch:

Arch Linux -soundkonverter 3.0.1 -1 (x86 _64)

0
27.01.2020, 21:18

Другим вариантом может быть использование подстановки bash для поиска wav-файлов, а затем функции расширения параметров оболочки для изменения структуры каталогов и имен файлов:

shopt -s globstar nocaseglob
for input in Music/**/*.wav
do
  indir=$(dirname "$input")
  outdir=${indir/#Music/Music_Flac}
  [ ! -d "$outdir" ] && mkdir -p "$outdir"
  infile=$(basename "$input")
  outfile=${infile%.???}.flac
  echo ffmpeg -i "$input" "${outdir}/${outfile}"
done

Если файлы всегда только *.wavи *.WAV, вы можете пропустить shopt nocaseglobи вместо этого использовать for input in Music/**/*.wav Music/**/*.WAV.

Я не знаю, какие параметры вы хотите использовать для ffmpeg, но я предоставил echoпример путей к входным и выходным файлам, из которых вы можете построить.

В этом примере дерева каталогов:

$ tree Music
Music
├── a.wav
├── b.WAV
├── c d.wav
└── subdir1
    ├── a.wav
    ├── b.WAV
    ├── c d.wav
    └── subdir2
        ├── a.wav
        ├── b.WAV
        └── c d.wav

пример вывода команды:

ffmpeg -i Music/a.wav Music_Flac/a.flac
ffmpeg -i Music/b.WAV Music_Flac/b.flac
ffmpeg -i Music/c d.wav Music_Flac/c d.flac
ffmpeg -i Music/subdir1/a.wav Music_Flac/subdir1/a.flac
ffmpeg -i Music/subdir1/b.WAV Music_Flac/subdir1/b.flac
ffmpeg -i Music/subdir1/c d.wav Music_Flac/subdir1/c d.flac
ffmpeg -i Music/subdir1/subdir2/a.wav Music_Flac/subdir1/subdir2/a.flac
ffmpeg -i Music/subdir1/subdir2/b.WAV Music_Flac/subdir1/subdir2/b.flac
ffmpeg -i Music/subdir1/subdir2/c d.wav Music_Flac/subdir1/subdir2/c d.flac

... вместе с необходимыми командами mkdirпо пути.

1
27.01.2020, 21:18

Если вы хотите заменить все wavотдельно их flacаналогами,самый простой способ, который я нашел, это использование flacдвоичных файлов:

find. -name '*.wav' -exec flac --best {} --delete-input-file \;
3
09.05.2021, 20:21

Теги

Похожие вопросы