Я использую 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 64bits версия 3.99.5 (http://lame.sf.net) `и я использую Ubuntu 16.04

У меня есть что, возможно, мы можем связать последнюю строку истории с: history | tail -n 1 и добавить ее как-нибудь в файл mp3 , созданный в этой команде LAME.

EDIT:

Предположим, что я использую z.sh some_set_of_random_options x.wav. Скажите мне z.sh, чтобы выходной файл был x_some_set_of_random_options.mp3. Например, я использовал:

z.sh -b 128 x.wav output-file: x_-b 128.mp3

z.sh -b 192 x.wav output-file: x_-b 192.mp3

z.sh -B 256 x.wav output-file: x_-B 256.mp3

EDIT:

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

./x.sh 128 j x 256 и в x.sh используйте $0 для замены первого аргумента, $1, $2 и $3, это то, что я лично сделаю для своей задачи.

OR

Следуйте по этой ссылке: https://linux.die.net/man/1/bash и научитесь использовать $* или $@ для замены с несколькими аргументами, чтобы упростить описанный выше процесс. В этом примере используется ответ зеленого тика.

2
задан 10 October 2017 в 10:46

3 ответа

Оригинальная версия

Я предлагаю вам использовать shellscript.

Используйте, например, имя wav2mp3 Сохраните командную строку и всю другую соответствующую информацию в shellscript. Я предлагаю вам избегать символов со специальным значением (пробел [ и ]) в имени файла, заменить на _
#!/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
2
ответ дан 22 May 2018 в 17:46
  • 1
    возможно, я могу использовать ./x.sh 128 j x 256 и иметь $0, $1, $2, $3. В моем сценарии с эхом при запуске показывается, какой порядок эти переменные должны быть переданы и какое значение они по умолчанию (будут делать значения по умолчанию с if ... fi тоже). Итак, вы второй ответ достаточно хорош для моей задачи. – Lucifer 10 October 2017 в 10:03
  • 2
    @Himanshuxd, Да, неплохо добавить некоторые параметры. $0 - это команда, вызывающая скрипт, $1 - это первый параметр, $2 второй параметр и т. д. Если вы хотите произвольное количество параметров, вы можете использовать $* или $@, как описано в руководство bash, linux.die.net/man/1/bash – sudodus 10 October 2017 в 10:13
  • 3
    @Himanshuxd, я добавил версию скрипта с произвольным количеством параметров, используя $*, который я считаю лучшим в этом случае. – sudodus 10 October 2017 в 10:45
  • 4
    да, это то, что я искал в первую очередь. Обновлен мой вопрос, чтобы отразить ваши ответы. – Lucifer 10 October 2017 в 10:47
  • 5
    @Himanshuxd, я рад, что наконец понял ваши намерения. Удачи вам в конвертации файлов :-) – sudodus 10 October 2017 в 10:51

Оригинальная версия

Я предлагаю вам использовать shellscript.

Используйте, например, имя wav2mp3 Сохраните командную строку и всю другую соответствующую информацию в shellscript. Я предлагаю вам избегать символов со специальным значением (пробел [ и ]) в имени файла, заменить на _ #!/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
2
ответ дан 18 July 2018 в 05:38

Оригинальная версия

Я предлагаю вам использовать shellscript.

Используйте, например, имя wav2mp3 Сохраните командную строку и всю другую соответствующую информацию в shellscript. Я предлагаю вам избегать символов со специальным значением (пробел [ и ]) в имени файла, заменить на _ #!/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
2
ответ дан 24 July 2018 в 18:23

Другие вопросы по тегам:

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