폴더의 모든 파일에 대해 명령을 실행하는 for 루프

폴더의 모든 파일에 대해 명령을 실행하는 for 루프

많은 오디오 파일이 포함된 폴더가 있다고 가정해 보겠습니다. audioname.mp3폴더의 모든 파일에 대해 이러한 명령을 실행하기 위해 for 루프를 작성하는 방법 :

convert -size 300x200   xc:lightblue  -font Bookman-DemiItalic  -pointsize 40  -fill blue  -gravity center -draw "text 0,0 'audioname'" audioname.png
ffmpeg -i audioname.png -i audioname.mp3 audioname.flv

?

답변1

for file in ~/Main_dir/*.mp3; do
    convert -background lightblue -size 300x200 -fill blue  -pointsize 40 -gravity center label:"$(basename "$file" .mp3)" "${file%.*}.png";
    avconv -i "${file%.*}.png" -i "${file%.*}.mp3" "${file%.*}.flv";
done

첫 번째에 대한 설명변화명령 보기AskUbuntu에 대한 내 답변

설명하다 $(basename "$file" .mp3):

이 명령을 사용하여 $(basename "$file")확장자가 있는 파일 이름만 얻으려고 했고 $(basename "$file" .mp3)해당 확장자도 제거했습니다.

$ for file in ~/Main_dir/*.mp3; do echo $(basename "$file" .mp3);done
039 - Del Nevesht - noraei
Eluveitie - Meet The Enemy

$ for file in ~/Main_dir/*.mp3; do echo $(basename "$file");done
039 - Del Nevesht - noraei.mp3
Eluveitie - Meet The Enemy.mp3

설명하다 ${file%.*}:

확장자 없이 전체 파일 경로를 얻으려면 이것을 사용합니다.

$ for file in ~/Main_dir/*.mp3; do echo "${file%.*}" ;done
/home/username/Main_dir/039 - Del Nevesht - noraei
/home/username/Main_dir/Eluveitie - Meet The Enemy

스크립트의 다음 줄에서는 생성한 .png 태그를 .mp3 파일에 추가합니다.

노트:avconv대신 을 사용합니다 . 아직 패키지를 설치 ffmpeg하지 않은 경우 ffmpeg이것을 사용할 수 있습니다 .

데모 변환 보기

답변2

귀하의 질문에서 배운 내용을 바탕으로 bash 스크립트를 작성했습니다. 그것이 당신에게 효과가 있는지 확인할 수 있습니까?

#!/bin/bash    
DIR="/path/to/directory"
FILES=`ls -1 "$DIR" | grep mp3$`
for file in "$FILES"
do
    FILENAME=`echo "$file" | cut -d "." -f1`
    convert -size 300x200   xc:lightblue  -font Bookman-DemiItalic  -pointsize 40  -fill blue  -gravity center -draw "text 0,0 '${FILENAME}'" ${FILENAME}.png
    ffmpeg -i ${FILENAME}.png -i $file ${FILENAME}.flv
done

답변3

폴더의 모든 mp3 파일을 변환하려면 다음 코드를 사용할 수 있습니다. 한 폴더에 모든 파일을 넣지 않으려면 폴더 이름을 수정해야 할 수도 있습니다.

#!/bin/bash
SRCPATH="/home/user"
SRCEXT=".mp3"
SRCFILES="($SRCPATH/*$SRCEXT)"
cd $SRCPATH
for FILE in "${SRCFILES[@]}"; do
    SELECTION="$(basename $FILE $SRCEXT)"
    convert -size 300x200 xc:lightblue -font Bookman-DemiItalic -pointsize 40 -fill blue  -gravity center -draw "text 0,0 '$SELECTION'" $SELECTION.png
    ffmpeg -i $SELECTION.png -i $FILE $SELECTION.flv
done

관련 정보