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

C++ не ответственен за ширину. Мне ввели более длительный ответ, но действительно стало ненужным, когда я сделал тест...

В основном использовать tabs (часть ncurses5 пакета)..., например.

zsh> tabs 4 # 4 space width tabs
zsh> ./a.out

Это отформатирует к Вашей ширине, которую Вы хотите автоматически. Никакая потребность передать по каналу (который не помогает, если у Вас есть интерактивная работа).

28
13.02.2014, 01:08
13 ответов

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

for i in *.flac ; do 
    ffmpeg -i "$i" -acodec libmp3lame "$(basename "${i/.flac}")".mp3
    sleep 60
done
37
27.01.2020, 19:38
  • 1
    Это не работает с файлами, содержащими пространство. Как я могу изменить $(basename "${i/.flac}") обработать пробелы? –  ppr 03.01.2016, 17:39
  • 2
    @ppr, помещая эту строку незадолго до for цикл: $ IFS= '\n' –  mkc 03.01.2016, 21:14
  • 3
    я решил проблему пространства путем изменения $(basename "${i/.flac}").mp3 кому: "$(basename "${i/.flac}").mp3" (помещающие кавычки вокруг этого) –  MalcolmOcean 17.09.2016, 23:02
find . -maxdepth 1 -type f -name '*.flac' | while IFS= read -r f; do
  ffmpeg -i  "$f" -acodec libmp3lame "$( sed -e's/\.flac/.mp3/g' <<< $f )"
done
1
27.01.2020, 19:38

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

http://lewisdiamond.blogspot.ca/2012/01/Convering-flac -Вто-mp3.html

Обратите внимание, что это будет применено рекурсивно в данном каталоге. Я Если вы запустите это из вашей музыкальной папки, он преобразует все фламы из подпапок и дает .mp3 рядом с ним. Вы также можете сделать это без FFMPEG непосредственно с помощью FLAC и LAME (I.E. ЧИТАТЬ W / FLAC, Труба к хромам, выводя в файл .mp3), как показано на ссылке.

51
27.01.2020, 19:38

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

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

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

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

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

1
27.01.2020, 19:38

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

ls *flac | while read f; do ffmpeg -i "$f" -acodec libmp3lame $f.mp3 & done
0
27.01.2020, 19:38

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

ls *.avi | xargs -I {} ffmpeg -i {} {}.mp3
0
27.01.2020, 19:38

Para convertir recursivamente en mp3 todos los archivos flac o wav en carpetas anidadas, usé este comando:

find '~/Music/' -iname '*.flac', -iname '*.wav' -exec bash -c 'D=$(dirname "{}"); B=$(basename "{}"); mkdir "$D/mp3/"; ffmpeg -i "{}" -ab 320k -map_metadata 0 -id3v2_version 3 -acodec libmp3lame "$D/mp3/${B%.*}.mp3"' \;

Creará una carpeta llamada "mp3" dentro de la carpeta con archivos flac o wav y, dentro de la carpeta mp3, guardará archivos mp3 relativos con una tasa de bits de 320 kbps, sin mantener la extensión del archivo anterior en el nombre.

0
27.01.2020, 19:38

GNU Parallel está hecho para este tipo de tareas:

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

Ejecutará los trabajos en paralelo (un trabajo por núcleo de CPU )y se asegurará de que la salida en el terminal no se mezcle.

Para obtener más información, dedique 15 minutos a leer el capítulo 1+2:https://zenodo.org/record/1146014

2
27.01.2020, 19:38

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

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

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

  1. Папка вашей фонотеки (flac/ogg/mp3...)
  2. Папку назначения (нужно создать до ).

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

  • Точная копия из исходной папки в папку назначения с :
    • в которые скопированы не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

0
27.01.2020, 19:38

Я понимаю, что это происходит довольно поздно, но на память посмотрите мой скрипт "batchaudiocvt" на sourceforge. Это (довольно большой )сценарий оболочки, разработанный для эффективного массового преобразования аудиофайлов между многими форматами. В частности, он старается конвертировать обычные теги.

-2
27.01.2020, 19:38

Имя файла "wav2mp3"

#!/bin/sh
# put the script to /usr/local/sbin
EXT_IN=$1
QUALITY=$2

if [ "${EXT_IN}" = "" -o "${QUALITY}" = "" ]; then
    printf "Usage: wav2mp3 \<in_file_ext\> \<quality\> \ne.g. wav2mp3 wav 2\n"
    exit 1
fi

#String delimeter
SAVEIFS=${IFS}
IFS='
'
# List of the files in directory lower than current to array
FILES_LIST=`find. -type f  -name "*.${EXT_IN}"`
for FILE in ${FILES_LIST}; do
    echo $FILE
    PREFIX=`echo $FILE | awk -F \. 'OFS="."{ $NF="" }1' | sed 's/.$//'`
    echo $PREFIX
    ffmpeg -i $FILE -codec:a libmp3lame -qscale:a $QUALITY $PREFIX.mp3
done
0
27.01.2020, 19:38

Следующая команда оболочки будет рекурсивно просматривать все подпапки, начиная с текущей папки, и конвертировать все файлы.flac в формат.mp3, сохраняя имена файлов и исходную структуру каталогов.

Если вы хотите преобразовать все ваши файлы.flac в.mp3, но сохранить исходные файлы.flac, используйте:

find. -type f -name "*.flac" -exec bash -c 'FILE="$1"; ffmpeg -i "${FILE}" -vn -c:a libmp3lame -ab 320k -y "${FILE%.flac}.mp3";' _ '{}' \;

-ab— желаемая скорость передачи аудиосигнала для выходных mp3-файлов (, обычно в диапазоне от 128 до 320 КБ, где выше — лучшее качество, но больше размер файла ).

Если есть проблема или вы хотите повторно преобразовать ваши файлы.flac с более высокой скоростью передачи данных, исходные файлы.flac будут сохранены, а повторение вышеуказанной команды перезапишет ваши ранее созданные файлы.mp3 с помощью новые (флаг -yуказывает ffmpegперезаписывать предыдущие выходные файлы с тем же именем без запроса подтверждения ).

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

find. -type f -name "*.flac" -exec bash -c 'FILE="$1"; rm "${FILE}";' _ '{}' \;

Кроме того, вы можете рекурсивно преобразовать все файлы.flac в.mp3 и удалить исходные файлы.flac за один раз с помощью одной строки скрипта, но используйте это с осторожностью, так как исходные файлы будут удалены:

find. -type f -name "*.flac" -exec bash -c 'FILE="$1"; ffmpeg -i "${FILE}" -vn -c:a libmp3lame -ab 320k -y "${FILE%.flac}.mp3" && rm "${FILE}";' _ '{}' \;

Если вы хотите рекурсивно конвертировать аудиофайлы из форматов, отличных от.flac, в.mp3, отредактируйте приведенные выше сценарии, заменив «.flac» соответствующим расширением входного файла (, например. «.wav», «.wma» и т. д.)

0
27.01.2020, 19:38

Теги

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