Estou usando o LAME para converter arquivos .wav em .mp3 e quero saber como acrescentar os argumentos transmitidos na linha de comando para gerar o nome .mp3?

2

Meu comando LAME atualmente é:

lame -b 128 -m j -h -V 1 -B 256 -F *.wav mymp3.mp3

Diga-me o comando modificado [ou script x.sh] para que minha saída mp3 , ou seja, mymp3.mp3 seja alterada para algo como mymp3 [ -b 128 -m j -h -V 1 -B 256 -F ].mp3

Eu não estou pedindo por lame -b 128 -m j -h -V 1 -B 256 -F *.wav mymp3 [ -b 128 -m j -h -V 1 -B 256 -F ].mp3 . Eu já sei que isso funcionará neste conjunto de opções, mas para um conjunto diferente de argumentos, qual será o comando [ou script x.sh]?

A saída da minha versão LAME dá:

LAME 64bits version 3.99.5 (http://lame.sf.net)' and I'm using Ubuntu 16.04

Eu tenho uma idéia que talvez possamos seguir a última linha do histórico com: history | tail -n 1 e acrescentar de alguma forma ao arquivo mp3 criado naquele comando LAME.

EDITAR:

Suponha que eu use, z.sh some_set_of_random_options x.wav Diga-me z.sh para que o arquivo de saída seja x_some_set_of_random_options.mp3 Por exemplo eu usei:

z.sh -b 128 x.wav arquivo de saída: x_-b 128.mp3

z.sh -b 192 x.wav arquivo de saída: x_-b 192.mp3

z.sh -B 256 x.wav arquivo de saída: x_-B 256.mp3

EDIT 2:

Existe uma maneira de usar vários argumentos e adicioná-los ao arquivo de saída, algo como:

./x.sh 128 j x 256 e em x.sh use $0 para substituição de primeiro argumento, $1 , $2 e $3 isso é o que eu pessoalmente farei em minha tarefa.

OR

Siga este link: link e aprenda a usar $* ou $@ para substituição de múltiplos argumentos para simplificar o processo acima. A resposta de carrapato verde tem um exemplo usando este método.

    
por Lucifer 07.10.2017 / 15:30

1 resposta

2

Versão original

Eu sugiro que você use um shellscript.

  • Use por exemplo o nome wav2mp3

  • Armazene a linha de comando e todas as outras informações relevantes no shellscript.

  • Sugiro que você evite caracteres com um significado especial (espaço [ e ] ) no nome do arquivo, substitua por _

    #!/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"
    
  • Torne-o executável

    chmod ugo+x wav2mp3
    
  • Execute (é 'apenas' ecoando aqui, mostrando como a coisa real se pareceria),

    $ ./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
    

Versão com um parâmetro

Se o valor b for a única opção, você quer mudar, você pode ter isso como o único parâmetro, quando você chama 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

Exemplos:

$ ./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

Versão com número arbitrário de parâmetros

#!/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

Exemplo:

$ ./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
    
por sudodus 07.10.2017 / 16:10