Audio
如何將子目錄中的所有 .wav 文件轉換為 .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
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 \;