for 循环,用于对文件夹中的所有文件运行命令

for 循环,用于对文件夹中的所有文件运行命令

假设我有一个包含很多音频文件的文件夹。如何编写 for 循环,以便对于audioname.mp3文件夹中的每个文件运行这些命令:

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

相关内容