하위 디렉터리의 모든 .wav 파일을 .flac로 변환하는 방법은 무엇입니까?

하위 디렉터리의 모든 .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

답변1

네가 원한다면바꾸다wav내가 찾은 가장 쉬운 방법 은 바이너리를 flac사용하는 것입니다 .flac

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

다음은 명령의 다양한 부분에 대한 분석입니다.

  • find .: 이 명령은 현재 디렉터리와 모든 하위 디렉터리( 로 표시 ) .에서 파일을 검색합니다.

  • -name '*.wav'.wav: 이 플래그는 확장자를 가진 파일을 찾고 있음을 지정합니다 . *는 모든 문자 또는 문자 그룹과 일치하는 와일드카드이므로 이 플래그는 로 시작하는 모든 항목과 일치 합니다 .wav.

  • -exec: 이 플래그는 find검색 기준과 일치하는 파일에 대해 명령을 실행하도록 명령에 지시합니다.

  • flac --best {} --delete-input-file: 일치하는 파일에 대해 실행되는 명령입니다. {}명령이 처리 중인 파일에 대한 자리 표시자 입니다 find. 이 flac명령은 플래그에 지정된 가장 높은 압축 수준을 사용하여 파일을 FLAC 형식으로 변환합니다 --best. 이 --delete-input-file플래그는 FLAC 형식으로 성공적으로 변환한 후 원본 파일을 삭제하라는 명령을 지시합니다 flac..wav

  • \;: 옵션이 제대로 작동 flac하려면 명령 종료 신호에 필요합니다 .-exec

답변2

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- 쉘 명령에 대상 디렉토리로 전달됩니다.~/Music_Flac/
  • $1- 쉘 명령에 파일 경로로 전달됩니다.{}
  • bn=${1##*/}- 디렉토리 경로가 없는 파일 기본 이름
  • bn=${bn%.*}- 확장자가 잘린 파일 기본 이름
  • -loglevel 1616- 사용되는 로깅 수준을 설정합니다.ffmpeg

답변3

또 다른 옵션은 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 nocaseglobfor 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그 과정에서 필요한 명령도 있습니다.

답변4

질문에 대한 정답으로 선택한 @RomanPerekhrest의 답변 외에도 매우 잘 작동하는 GUI 솔루션이 있습니다.

soundkonverter, soundKonverter가 유지 관리 모드에 있습니다. PR을 환영합니다. soundkonverter_GitHub_kutu의 소스 코드를 다운로드하세요.

Arch 저장소에도 있습니다:

아치 리눅스 - soundkonverter 3.0.1-1 (x86_64)

관련 정보