У меня есть папка с названием Music, в которой есть подпапки разных исполнителей, содержащие множество файлов .flac. Я пытаюсь преобразовать все из них в формат файла .wav, а затем преобразовать их в Apple Alac, потому что прямое преобразование не работает правильно, но суть в том, что я преобразовал некоторые из них раньше, но не все из них ,

Моя папка выглядит в основном так:

Музыка /ArtistX /Song1.flac

Musik /ArtistX /Song1.m4a

Musik /ArtistX /Song2.flac

Musik / Артисты /Song1.flac

Musik / Артисты /Song1.m4a

В основном я хочу команду, которая позволяет мне преобразовывать только файлы .flac, у которых нет соответствующего файла .m4a рядом с ними. В прошлом я просто снова конвертировал их все, запустив этот сырой цикл for:

for f in ./**/*.flac; do ffmpeg -i "$f" "${f%.*}.wav"; done && for f in ./**/*.wav; do ffmpeg -n -i "$f" -acodec alac "${f%.*}.m4a"; done && find . -type f -name '*.wav' -delete

Но это очень неэффективно для моей текущей настройки.

PS: если это вообще возможно, я бы предпочел использовать ffmpeg.

1 ответ1

0

Почему бы не просто выполнить поиск файлов flac, проверить существующие файлы m4a и выполнить преобразование, если файл m4a не существует? Просто маленький пример:

for i in $(find $PWD -name "*.flac")
do
    # check if file was already converted and therefore a m4a file exists
    if [ ! -e $(dirname ${i})/$(basename ${i} .flac).m4a ]
    then
       # convert your file... File including path is in ${i}
       echo "Need to convert input file ${i} now..."
       WAV=$(dirname ${i})/$(basename ${i} .flac).wav
       M4A=$(dirname ${i})/$(basename ${i} .flac).m4a
       ffmpeg -i ${i} ${WAV}
       ffmpeg -n -i ${WAV} -acodec alac ${M4A}
       rm ${WAV}
    fi
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .