Audio

如何將子目錄中的所有 .wav 文件轉換為 .flac?

  • May 9, 2021

我有一些 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

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/ {} \;
  • $0- 作為目標目錄傳遞給 shell 命令~/Music_Flac/
  • $1- 作為文件路徑傳遞給 shell 命令{}
  • bn=${1##*/}- 沒有目錄路徑的文件基名
  • bn=${bn%.*}- 副檔名被截斷的文件基名
  • -loglevel 16``16- 設置使用的日誌級別ffmpeg

如果你想用它們的對應物隱蔽地替換所有,我發現最簡單的方法是使用二進製文件:wav``flac``flac

find . -name '*.wav' -exec flac --best {} --delete-input-file \;

引用自:https://unix.stackexchange.com/questions/428018