В Ubuntu, Mint и родственниках strlcpy
и strlcat
доступны в пакете libbsd-dev
. Выполните
sudo apt-get install libbsd-dev
. Это установит библиотеки, файлы заголовков и страницы руководства.
Чтобы использовать функции из кода C, добавьте строку
#include
в свои файлы и добавьте -lbsd
или более переносимый $ (pkg-config --libs libbsd)
в командную строку gcc
, чтобы связать библиотеку.
find
+ffmpeg
solució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 16
utilizado porffmpeg
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:
Другим вариантом может быть использование подстановки 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
по пути.
Если вы хотите заменить все wav
отдельно их flac
аналогами,самый простой способ, который я нашел, это использование flac
двоичных файлов:
find. -name '*.wav' -exec flac --best {} --delete-input-file \;