Mou*_*inX 5 audio conversion flac
我有一些 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
Run Code Online (Sandbox Code Playgroud)
如果您想用对应的内容替换所有wav隐含的flac内容,我发现最简单的方法是使用flac二进制文件:
find . -name '*.wav' -exec flac --best {} --delete-input-file \;
Run Code Online (Sandbox Code Playgroud)
以下是该命令不同部分的细分:
find .:该命令搜索当前目录及其所有子目录(以 表示.)中的文件。
-name '*.wav':该标志指定我们正在寻找具有.wav扩展名的文件。是*匹配任何字符或字符组的通配符,因此该标志将匹配任何以.wav.
-exec:此标志告诉命令find对匹配搜索条件的文件执行命令。
flac --best {} --delete-input-file:这是对匹配文件执行的命令。是{}一个占位符,表示命令正在处理的文件find。该flac命令使用标志指定的最高压缩级别将文件转换为 FLAC 格式--best。该--delete-input-file标志告诉命令在成功转换为 FLAC 格式后flac删除原始文件。.wav
\;:这是命令结束信号所必需的flac,以便-exec选项正常运行。
find+ffmpeg解决方案:
find ~/Music -type f -iname "*.wav" -exec sh -c \
'bn=${1##*/}; bn=${bn%.*}; ffmpeg -loglevel 16 -i "$1" "${0}${bn}.flac"' ~/Music_Flac/ {} \;
Run Code Online (Sandbox Code Playgroud)
$0- 作为目标目录传递到 shell 命令中~/Music_Flac/$1- 作为文件路径传递到 shell 命令中{}bn=${1##*/}- 不带目录路径的文件基名bn=${bn%.*}- 扩展名被截断的文件基名-loglevel 1616- 设置使用的日志记录级别ffmpeg| 归档时间: |
|
| 查看次数: |
8289 次 |
| 最近记录: |