для цикла для выполнения команды для всех файлов в папке

Или Вы могли пропустить $? в целом. Если Ваша команда cmd, следующее должно работать:

function foo {
   (cd $FOOBAR;
   if cmd
   then
      echo "OK!"
   else
      echo "Nope!"
   fi
   )
}
2
14.11.2014, 06:25
3 ответа

Наконец-то я закончил с этим сценарием. Также работает, если в ваших .mp3-файлах есть пробелы в именах файлов и без дополнительных расширений в новых созданных файлах.

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

для описания первой команды convert смотрите мой ответ на AskUbuntu

Explanation $(basename "$file" . mp3):

Командой $(имя базиса "$file") я пытался получить только имя файла с расширением, а командой $(имя базиса "$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/KasiyA/Main_dir/039 - Del Nevesht - noraei
/home/KasiyA/Main_dir/Eluveitie - Meet The Enemy

И со следующей строкой в скрипте вы добавите созданную .png метку в ваши .mp3 файлы.

Примечание: Я использовал avconv вместо ffmpeg. Вы можете использовать его, если у вас не установлен пакет ffmpeg.

смотрите демо-конвертацию

3
27.01.2020, 21:57

Из того, что я понял с вашего вопроса, я написал сценарий 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
2
27.01.2020, 21:57

Для преобразования всех файлов 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
0
27.01.2020, 21:57

Теги

Похожие вопросы