Я использую LAME для конвертирования файлов.wav в.mp3 и хочу узнать, как я могу добавить переданные аргументы в командной строке для вывода имени.mp3?
Моя команда LAME в настоящее время:
lame -b 128 -m j -h -V 1 -B 256 -F *.wav mymp3.mp3
Подскажите измененную команду [или скрипт x.sh], чтобы мой вывод mp3 а именно mymp3.mp3
меняется на что-то вроде mymp3 [ -b 128 -m j -h -V 1 -B 256 -F ].mp3
Я не прошу lame -b 128 -m j -h -V 1 -B 256 -F *.wav mymp3 [ -b 128 -m j -h -V 1 -B 256 -F ].mp3
Я уже знаю, что будет работать с этим набором параметров, но для другого набора аргументов, какой будет команда [или скрипт x.sh]?
Мой вывод версии LAME дает:
LAME 64bit version 3.99.5 ( http://lame.sf.net/)`и я использую Ubuntu 16.04
У меня есть идея, что, возможно, мы можем отследить последнюю строку истории с: history | tail -n 1
и добавьте его как-нибудь к mp3- файлу, созданному в этой команде LAME.
РЕДАКТИРОВАТЬ:
Предположим, я использую, z.sh some_set_of_random_options x.wav
Скажи мне z.sh
так что выходной файл x_some_set_of_random_options.mp3
Например я использовал:
z.sh -b 128 x.wav
выходной файл: x_-b 128.mp3
z.sh -b 192 x.wav
выходной файл: x_-b 192.mp3
z.sh -B 256 x.wav
выходной файл: x_-B 256.mp3
РЕДАКТИРОВАТЬ 2:
Есть способ использовать несколько аргументов и добавить их в выходной файл, он выглядит примерно так:
./x.sh 128 j x 256
И в x.sh
использование $0
для замены первого аргумента, $1
, $2
а также $3
это то, что я собираюсь сделать лично для своей задачи.
ИЛИ ЖЕ
Перейдите по этой ссылке: https://linux.die.net/man/1/bash и научитесь использовать $*
или же $@
для замены нескольких аргументов, чтобы упростить вышеуказанный процесс. У ответа с зеленой галочкой есть пример использования этого метода.
1 ответ
Оригинальная версия
Я предлагаю вам использовать скрипт.
Используйте, например, имя
wav2mp3
Сохраните командную строку и всю другую соответствующую информацию в сценарии оболочки.
Я предлагаю вам избегать символов с особым значением (пробел
[
а также]
) в имени файла заменить на_
#!/bin/bash options="-b 128 -m j -h -V 1 -B 256 -F" OptInName=${options//\ /_} # only testing here, so making it an echo command line echo lame "$options" *.wav "mymp3_$OptInName.mp3"
Сделайте это исполняемым
chmod ugo+x wav2mp3
Запустите его (это "только" эхо здесь, показывая, как будет выглядеть реальная вещь),
$ ./wav2mp3 lame -b 128 -m j -h -V 1 -B 256 -F hello.wav hello world.wav mymp3_-b_128_-m_j_-h_-V_1_-B_256_-F.mp3
Версия с параметром
Если b-значение является единственной опцией, которую вы хотите изменить, вы можете использовать ее в качестве единственного параметра при вызове wav2mp3.
#!/bin/bash
if [ $# -ne 1 ]
then
echo "Usage: $0 <b-value>"
echo "Example: $0 128"
else
options="-b $1 -m j -h -V 1 -B 256 -F"
OptInName=${options//\ /_}
# only testing here, so making it an echo command line
echo lame "$options" *.wav "mymp3_$OptInName.mp3"
fi
Примеры:
$ ./wav2mp3 128
lame -b 128 -m j -h -V 1 -B 256 -F hello.wav hello world.wav mymp3_-b_128_-m_j_-h_-V_1_-B_256_-F.mp3
$ ./wav2mp3 256
lame -b 256 -m j -h -V 1 -B 256 -F hello.wav hello world.wav mymp3_-b_256_-m_j_-h_-V_1_-B_256_-F.mp3
Версия с произвольным количеством параметров
#!/bin/bash
if [ $# -eq 0 ]
then
echo "Usage: $0 <parameters>"
echo "Example: $0 -b 192 -m j -h -V 1 -B 256 -F"
else
options="$*"
OptInName=${options//\ /_}
# only testing here, so making it an echo command line
# When using parameters without white space (and this is the case here),
# you should use $* and when calling the program (in this case 'lame')
# I think you should *not* use quotes (") in order to get them separated.
# So $options, not "$options" in the line below.
echo lame $options *.wav "mymp3_$OptInName.mp3"
fi
Пример:
$ ./wav2mp3star -b 192 -m j -h -V 1 -B 256 -F
lame -b 192 -m j -h -V 1 -B 256 -F hello.wav hello world.wav mymp3_-b_192_-m_j_-h_-V_1_-B_256_-F.mp3