Bash для преобразования всех * flac в * .mp3 с FFmpeg?

Я хочу преобразовать все * .flac в * .mp3 в определенную папку.

Это то, что я пробовал, но не работает:

# change to the home directory cd ~/music # convert all *.flac files ffmpeg -i *.flac -acodec libmp3lame *.mp3 # (optional: check whether there are any errors printed on the terminal) sleep 60 

Как получить мою цель?

8 Solutions collect form web for “Bash для преобразования всех * flac в * .mp3 с FFmpeg?”

Попробуй это:

 for i in *.flac ; do ffmpeg -i "$i" -acodec libmp3lame $(basename "${i/.flac}").mp3 sleep 60 done 

Простое решение с 1 лайнером: find -name "*.flac" -exec ffmpeg -i {} -acodec libmp3lame -ab 128k {}.mp3 \;

http://lewisdiamond.blogspot.ca/2012/01/converting-flac-to-mp3.html

Обратите внимание, что это будет рекурсивно применяться в данном каталоге. Т.е. если вы запустите это из своей папки «Музыка», он преобразует все флаки из подпапок и создаст .mp3 рядом с ним. Вы также можете сделать это без ffmpeg, напрямую используя flac и lame (т. Е. Прочитать w / flac, pipe to lame, выводить в файл .mp3), как показано в ссылке.

Если в именах файлов есть пробелы:

 for a in *.flac; do f="${a[@]/%flac/mp3}" ffmpeg -i "$a" -qscale:a 0 "$f" done 

Я работал над ответом @ Ketan, используя avconv, так как ffmpeg здесь не работает.

 for i in *.flac ; do avconv -i "$i" "./mp3/$i".mp3 done 

Это конвертирует файлы flac в папку в mp3 файлы и перемещается затем в существующую папку «mp3». Файлы будут называться в модели «original_name.flac.mp3»

Параллельно FTW (нет сомнений, что у вас есть несколько ядер – почему бы не использовать их?):

 ls *flac | while read f; do ffmpeg -i "$f" -acodec libmp3lame $f.mp3 & done 
 find . -maxdepth 1 -type f -name '*.flac' | while IFS= read -rf; do ffmpeg -i "$f" -acodec libmp3lame "$( sed -e's/\.flac/.mp3/g' <<< $f )" done 

Например, если у вас несколько файлов avi:

 ls *.avi | xargs -I {} ffmpeg -i {} {}.mp3 

Если это может помочь … Я написал небольшой скрипт bash для этого … У вас должен быть установлен ffmpeg / flac.

Как это работает:

Требуется 2 аргумента:

  1. Папка вашей музыкальной библиотеки (flac / ogg / mp3 …)
  2. Целевая папка (вам нужно создать ее раньше).

Он производит:

  • Точная копия исходной папки в папку назначения с:
    • файлы non flac, скопированные в.
    • flac-файлы, преобразованные в mp3 (высокое качество VBR)
  • Файл run.sh с командами для преобразования flac-файлов (этот скрипт выполняется автоматически).
 #!/bin/bash FLAC_PATH=$1 CONV_PATH=$2 DEBUG=0; function usage { echo ""; echo " This script convert all flac files from a folder to mp3 files to a second folder"; echo ""; echo " Usage :"; echo " ./conv.sh {Source Folder} {Destination Folder}"; echo " note : booth folder must exist before starting this script"; echo " files other than flac are copied to the destination folder"; echo ""; } if [ ! -d "$2" ]; then echo ""; echo " ERROR : [$2] is not a directory."; usage exit 1 fi; if [ ! -d "$2" ]; then echo ""; echo " ERROR : [$2] is not a directory."; usage exit 1 fi; COMMANDS="run.sh" echo "" > run.sh echo " convert from $FLAC_PATH to $CONV_PATH "; find "${FLAC_PATH}" -type f |while read myFile; do SRC_DIR=${myFile%/*} SRC_FILE=${myFile##*/} DST_DIR=$CONV_PATH/$SRC_DIR mkdir -p "${DST_DIR}" # TEST if the file is a flac .... metaflac --show-md5sum "${myFile}" 2>/dev/null 1>/dev/null if [ $? -eq 0 ]; then echo -n " *** $myFile [FLAC !] : " DST_FILE=${myFile%.*} OUT_PATH="${DST_DIR}/$( echo $SRC_FILE | sed -e 's/.flac$/.mp3/')" if [ $DEBUG == 1 ]; then echo " SRC = $myFile"; echo " OUT = $OUT_PATH" fi; if [ -f "$OUT_PATH" ]; then echo " exist, do nothing !"; else echo " add to compress list !"; echo "ffmpeg -y -i \"${myFile}\" -codec:a libmp3lame -q:a 0 -map_metadata 0 -id3v2_version 3 \"${OUT_PATH}\" " >> $COMMANDS fi; else echo -n " *** $SRC_FILE [NOT FLAC] : " if [ -f "${CONV_PATH}/${myFile}" ]; then echo " exist, do nothing !" else echo " copy." cp "${myFile}" "${CONV_PATH}/${myFile}" fi fi done; echo " And now, CONVERT THE FLAC's!!! " sh run.sh 
  • Выполнение программы с различными параметрами (цикл)
  • как передать смесь аргументов в скрипт и только из них необязательный -аргумент
  • Как собрать имя файлов в каждом подкаталоге в текстовый файл в этом подкаталоге?
  • shell или perl-скрипт для проверки группы имеют права чтения
  • Ошибка фиксации сигнала 13 (SIGPIPE) для поиска и grep-конвейера
  • Почему тире расширяется \\\\ по-разному до bash?
  • Как создать новые процессы для новых экземпляров одного и того же сценария оболочки?
  • Лучший подход к созданию и добавлению содержимого в файлы
  • Как сделать svn искать, если есть обновление раз в минуту, и если есть вызов какого-то скрипта?
  • Добавить путь к $ PATH, если он еще не был в $ PATH
  • Сценарий Bash для scp-интерпретации тильды (~) слишком рано
  • Linux и Unix - лучшая ОС в мире.