2013-07-01 1 views
3

나는 모든 m4as를 mp3로 변환하기 위해 엄청난 양의 음악을 처리하는 간단한 스크립트를 작성하고 있습니다. 그들 대부분은 이미 mp3이지만, 나는 그들 모두를 mp3로하고 싶다. 내가 재귀 적으로 그것을 할 수있는 find 명령으로이 ffmpeg 통합 어떻게,디렉토리를 통한 반복 및 음악 변환

for f in *.m4a; do ffmpeg -i "$f" -acodec libmp3lame -ab 320 "${f%.m4a}.mp3"; done 

한 수준을합니까 : 여기에 지금까지 가지고 무엇인가?

도움 주셔서 감사합니다.

+0

[이 스레드를보십시오 (http://stackoverflow.com/a/15930451/828193). 'find' 명령에서 파일 이름을 걸러 내기 위해서는'-name '* .m4a'' 옵션을 사용하십시오 – user000001

답변

7

당신은 또한 하위 폴더 루프, 당신은 globstar 쉘 옵션 동작을 사용하려면 Pattern Matching section of the reference manual하고 그래서 Shopt Builtin section of the reference manual 참조 : 당신은을 사용하고 있기 때문에이 조금 복잡합니다 find를 사용

shopt -s globstar 
for f in **/*.m4a; do ffmpeg -i "$f" -acodec libmp3lame -ab 320 "${f%.m4a}.mp3"; done 

Shell Parameter Expansion. 여기에 자신의 이름에 공백이나 다른 재미 기호 파일에 대한 100 % 안전합니다 가능성이있다 :

find . -name '*.m4a' -type f -exec bash -c 'ffmpeg -i "$0" -acodec libmp3lame -ab 320 "${0%.m4a}.mp3"' {} \; 

당신이 파일의 거대한 숫자가있는 경우 대체 (globbing)는 것으로 알려져 있기 때문에이 두 번째 가능성, 빠른 수 있습니다 엄청나게 많은 파일에 대해서는 꽤 느립니다. find-exec 문에서


, 나는 bash -c '...'을 사용하고 있습니다. 이 경우, 위치 매개 변수로 설정됩니다 실행될 수있는 문자열 뒤에 주어진 모든 매개 변수는, 따라서, 0에서 코드

ffmpeg -i "$0" -acodec libmp3lame -ab 320 "${0%.m4a}.mp3" 

이 도움이 희망에 나타나는 $0 색인!

+0

당신이 제안한 "find"를 사용했고 효과가있었습니다! 감사! –

+1

@OsmiumUSA 최고의 선택이었습니다! 그러나 이봐, 당신의 질문은 좋았고, 당신은 약간의 연구를 보여주었습니다. "pleez me teh codez"와 같은 질문이 아니기 때문에 좋은 대답을 할 자격이 있습니다. –