ffmpeg를 사용하여 flac를 ogg로 일괄 변환

ffmpeg를 사용하여 flac를 ogg로 일괄 변환

전체 디렉토리를 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.zshrun을 실행 chmod 755 /path/to/massconvert.zsh하여 실행 가능하게 만든 다음 flac 컬렉션이 포함된 폴더에서 실행합니다.

cd /home/utemost/flacs
/path/to/massconvert.zsh /home/utemost/oggs

그게 다야!

관련 정보