フォルダ内のすべてのファイルに対してコマンドを実行する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ファイルを変換するには、次のコードを使用できます。 1つのフォルダにすべてのファイルを入れたくない場合は、フォルダ名を変更する必要があります。

#!/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

関連情報