전체 디렉토리를 flac에서 ogg로 변환하기 위해 이 명령을 변환하려고 합니다.
ffmpeg -i musicfile.flac musicfile.ogg
맨 페이지를 읽었습니다. 하지만 솔직히 말해서 그것은 나보다 조금 벗어났습니다. 사운드 변환기(또는 GUI 프로그램)를 사용하고 싶지 않습니다. 그래서 나는 당신에게 의지합니다.
나는 opensuse 회전초를 사용합니다. 그리고 내가 사용하는 fish
것은 bash
. 모든 것이 최신 상태입니다.
정확히 내가 원하는 것은 flac 폴더를 별도의 ogg 폴더로 변환하는 것입니다. 물론 품질은 q5와 똑같습니다. hi.flac 파일을 에 넣었다고 가정하고 ~/flac/hi folder
파일 폴더 구조와 이름을 유지하면서 ogg 폴더로 출력하고 싶습니다. ~/ogg/hi folder
.
가능합니까? 아니면 내가 너무 많은 것을 요구하고 있는 걸까?
나는 그것을 사용해 왔고 flac2all
, 속도가 점점 느려지는 것을 제외하고는 방금 설명한 것과 정확히 동일하게 작동합니다. 그래서 이 명령을 사용하는 것이 더 빠른지 확인하고 싶습니다 ffmpeg
. 검색했는데 누군가 작은 bash 스크립트를 게시했지만 나에게는 작동하지 않습니다. 그래서 다시. 나는 당신에게 의지합니다.
읽어 주셔서 감사합니다.
답변1
어쩌면 다음과 같은 것일 수도 있습니다.
apt install parallel
find /music -type d | xargs -i mkdir -p "/out_music/{}"
find /music -type f -name "*.flac" | parallel -j8 ffmpeg -i '{}' -ar 44100 -vn -codec:a libvorbis -qscale:a 7 -y '/out_music/{}.oga'
이렇게 하면 비슷한 이름의 파일이 생성되지만 .flac.oga
개인적으로는 아무런 문제도 발생하지 않았습니다.
답변2
나는 Page의 접근 방식을 좋아하지만 나 자신은 다르게 하고 싶습니다. 쉘이 다음과 같이 지정됩니다.아니요bash이므로 쉘을 실행하기 위해 다른 쉘을 사용하는 것이 괜찮을 것이라고 가정합니다 zsh
. fish
이 목적으로도 사용할 수 있을 것 같지만 거의 사용하지 않습니다 fish
.
#!/usr/bin/zsh
targetfolder="$1" # save argument to this shell script in
# variable $targetfolder
for infile in **/*.flac ; do
# ^ ^ ^^
# | | |
# \-------------------- we have a loop variable $infile…
# \------------- which we set to a new value from the following list:
# \--------- recursively (**) list all files ending in .flac (*.flac)
mkdir -p "${targetfolder}/${infile:h}"
# ^ ^ ^ ^----^^
# | | | | |
# | | | | /
# | | | | |
# \------------------------------------ make a new directory
# | | | |
# \----------------------------- making necessary parent directories on the way,
# | | ignoring all errors
# | | |
# \------------------------ expands to the argument passed to this script
# | |
# \------- expands to the current found file name,
# | but modified:
# |
# \-- removes the trailing path component, i.e.
# gets the directory containing the file
ffmpeg -i "${infile}" "${targetfolder}/${infile%.flac}.ogg"
# ^----^
# |
# remove the trailing ".flac" from the file name --/
done
또는 간단히 말해 모든 댓글을 삭제합니다.
#!/usr/bin/zsh
targetfolder="$1"
for infile in **/*.flac ; do
mkdir -p "${targetfolder}/${infile:h}"
ffmpeg -i "${infile}" "${targetfolder}/${infile%.flac}.ogg"
done
스크립트를 파일에 저장하여 사용할 수 있습니다. 예를 들어 massconvert.zsh
run을 실행 chmod 755 /path/to/massconvert.zsh
하여 실행 가능하게 만든 다음 flac 컬렉션이 포함된 폴더에서 실행합니다.
cd /home/utemost/flacs
/path/to/massconvert.zsh /home/utemost/oggs
그게 다야!