Как конвертировать .mp3 в AAC?

Что ж, вы все еще не сказали, какой результат вы хотите получить от какого ввода, так что я пойду чтобы угадать. Думаю, вы хотите сделать что-то одно (например, вывести «Найдено») , если пользователь вводит Title = "Three Little Pigs" и Author = " Мэри Джейн ", или, если пользователь вводит Title =" Cinderella " и Author =" Paul Johnson " (или любой другой строка в файле) и что-то еще (например, вывод «Not Found»), если пользователь вводит что-нибудь еще (например, Title = "Three и Автор = "Мэри" , или Title = "Три поросенка" и Автор = "Пол Джонсон" ). Я предлагаю вам использовать ответ phk и выполнить

if grep "^\s*$Title\s*:\s*$Author\s*$" BookDB.txt > /dev/null
then
    echo "Found"
else
    echo "Not Found"
fi

, либо вы можете изменить первую строку на

if grep -x "\s*$Title\s*:\s*$Author\s*" BookDB.txt > /dev/null

. Примечания:

  • ^ представляет начало строки .
  • $ обозначает конец строки.
  • Следовательно, ^ образец $ представляет собой образец , занимающий всю строку.
  • grep -x " шаблон " также представляют устанавливает шаблон , занимающий всю строку. Если вы внимательно прочитаете Соответствие точной строке с помощью grep , вы увидите, что перепутали -w и -x .
  • \ s означает пробел. \ s * означает ноль или более пробелов.
  • Собираем все вместе: шаблон означает ноль или более пробелов в начале строки, , за которым следует заголовок, за которым следует ноль или более пробелов. , двоеточие, ноль или более пробелов, автор и ноль или более пробелов (и ничего больше в строке).
  • Используйте > / dev / null , чтобы соответствующие строки не отображались на выходе (т. Е. На экране). Как указывает giusti , вы также можете использовать -q (или - quiet или - -silent ) для этого.

Как указано в phk , вы можете получить неожиданные / нежелательные результаты , если название или имя автора включают двоеточие, или если пользователь вводит любой символ (s) , которые являются специальными в регулярных выражениях (например, ^ , $ , \ , * , [, ] , . , или иногда (, ) , {, } , ? и + ).

1
05.04.2017, 21:03
3 ответа

Вам нужно использовать цикл в оболочке для циклического перебора всех файлов MP3, поскольку ffmpeg обычно требует только один выходной файл за один запуск. В bash это будет выглядеть так:

for f in *.mp3; do
    ffmpeg -i "$f" "${f%.mp3}.aac"
done

Обратите внимание, что из соображений качества звука вы, вероятно, захотите дать ffmpeg некоторые параметры. В ffmpeg AAC Encoding Guide есть подробности, но в качестве быстрого примера средняя строка может выглядеть так:

ffmpeg -i "$f" -c:a libfdk_aac -vbr 3 "${f%.mp3}.aac"

(PS: несколько удивительно, что ваш телефон не поддерживает MP3, поддержка очень распространена, и она указана на спецификацию вашего телефона).

don_chrissti предлагает альтернативу, использующую GNU Parallel (которая должна быть быстрее на многоядерных процессорах, так как она будет запускать несколько кодировок одновременно):

parallel ffmpeg -i {} -c:a libfdk_aac -vbr 3 {.}.aac ::: *.mp3

Обратите внимание, что существует также версия параллельной программы moreutils, которая имеет совершенно другой синтаксис (и не будет работать в приведенном выше).

6
27.01.2020, 23:12

Я могу сделать для одного файла ffmpeg -i test.mp3 test.aac, но для многих файлов следующее не работает, если команда пытается перезаписать некоторые файлы .mp3 для некоторых причина. ffmpeg -i * .mp3 * .aac

Звездочка просто расширяется до всех файлов MP3 в вашем каталоге, поэтому первый в списке просто попытается перезаписать второй. Вам нужно написать цикл. Предполагая, что ваша оболочка - bash:

for mp3file in *.mp3; do
   ffmpeg -i $mp3file `basename $mp3file .mp3`.aac
done
2
27.01.2020, 23:12

Я действительно рекомендую ffmpeg конвертер формата командной строки.

Если вам нужен графический интерфейс, я рекомендую Qwinff , Qwinff также может легко конвертировать несколько файлов.

1
27.01.2020, 23:12

Теги

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