我有一些 wav 格式的歌曲。我想将它们转换为flac(这也是无损的,但有压缩)。
该解决方案需要通过子目录递归查找 .wav 或 .WAV 文件(最好不区分大小写),将它们转换为 .flac 并将 .flac 文件输出到不同的目录树。原始 wav 文件在 ~/Music 中,输出的 flac 文件可以进入 ~/Music_Flac。
我正在使用 Arch Linux x86_64,并且我的 ffmpeg 如下:
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
如果你想用它们的对应物隐蔽地替换所有,我发现最简单的方法是使用二进制文件:
wav
flac
flac
find
+ffmpeg
解决方案:$0
- 作为目标目录传递给 shell 命令~/Music_Flac/
$1
- 作为文件路径传递给 shell 命令{}
bn=${1##*/}
- 没有目录路径的文件基名bn=${bn%.*}
- 扩展名被截断的文件基名-loglevel 16
16
- 设置使用的日志级别ffmpeg
另一种选择是使用 bash 的 globbing 来查找 wav 文件,然后使用 shell 参数扩展功能来更改目录结构和文件名:
如果文件只是 ever
*.wav
and*.WAV
,您可以跳过shopt nocaseglob
and 而使用for input in Music/**/*.wav Music/**/*.WAV
.我不知道您想为 ffmpeg 使用哪些选项,但我提供了一个
echo
您可以从中构建的输入和输出文件路径的示例。在此示例目录树上:
示例命令输出为:
...以及沿途所需的
mkdir
命令。除了 @RomanPerekhrest 的答案(我选择它作为问题的正确答案)之外,还有一个 GUI 解决方案也很有效:
soundkonverter,soundKonverter 处于维护模式,欢迎 PRs,下载soundkonverter的源码_GitHub_帮酷
它也在 Arch 存储库中:
Arch Linux - soundkonverter 3.0.1-1 (x86_64)