저는 오늘과 어제 해결책을 찾으려고 연구해 왔지만 지금까지 그 어느 것도 제게 도움이 되지 않았습니다.
예를 들어:https://stackoverflow.com/questions/5784661/how-do-you-convert-an-entire-directory-with-ffmpeg
/Music/
폴더(예 : )의 모든 파일을 반복하고, 로 끝나는 모든 디렉터리나 하위 디렉터리에서 파일을 찾은 .flac
다음 다음을 사용하여 해당 flac 파일을 alac 파일로 변환할 수 있기를 원합니다 .
ffmpeg -i "$i" -c copy -acodec alac "${i%.*}.m4a"
$i 변수는 for 루프에 있는 파일의 "이름"입니다. ${i%.*}
.flac 부분이 아닌 이름만 반환되어야 합니다.
어쨌든, 이 명령을 실행한 후 저장된 모든 .m4a alac 파일을 "새 라이브러리"로 전송하고 싶습니다... IE: /Music/
라이브러리가 두 개 있습니다.
하나는 모든 flac 파일을 보유합니다.
하나에는 모든 alac(m4a) 파일이 있습니다.
가능합니까?
이것은 지금까지 내가 가지고 있는 명령인데 전혀 작동하지 않으며, 작동하더라도 내가 원하는 대로 새 라이브러리를 생성하지 않습니다.for i in *.flac; do ffmpeg -i "$i" -c copy -acodec alac "${i%.*}.m4a"; done
현재 명령에서 오류가 발생합니다 *.flac: No such file or directory
. 이는 하위 디렉터리를 검색하지 않기 때문이라고 가정합니까? ...
답변1
#!/bin/bash
shopt -s globstar
src_dir="Music"
dest_dir="Music_new"
for orig_path in "${src_dir}"/**/*.flac; do
#Change first directory in the path
new_path=${orig_path/$src_dir/$dest_dir}
#Remove filename from new path. Only directories are left.
#They are needed for mkdir
dir_hier=${new_path%/*}
#Remove extension .flac from path, thus we have original path with first directory
#changed and file extension removed.
#Original path: "Music/one/two/song.flac"
#New path: "Music_new/one/two/song"
new_path=${new_path%.*}
echo mkdir -p "$dir_hier"
#New path with extension: "Music_new/one/two/song.m4a"
#ffmpeg should create new file by this path, necessary directories
#already created by mkdir
echo ffmpeg -i "$orig_path" -c copy -acodec alac "${new_path}.m4a"
done
echo
검사 전 mkdir
, ffmpeg
검사 후 삭제해야 합니다.