web-dev-qa-db-ja.com

LAMEを使用して.wavファイルを.mp3に変換していますが、コマンドラインで渡された引数を.mp3名に出力する方法を知りたいですか?

私のLAMEコマンドは現在:

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

私の出力mp3つまりmymp3.mp3mymp3 [ -b 128 -m j -h -V 1 -B 256 -F ].mp3のようなものに変更されるように、変更されたコマンド[またはスクリプトx.sh]を教えてください

私は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でテールし、そのLAMEコマンドで作成されたmp3ファイルに何らかの方法で追加できるかもしれないという考えがあります。

編集:

出力ファイルが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

EDIT 2:

複数の引数を使用して出力ファイルに追加する方法があり、次のようになります。

./x.sh 128 j x 256およびx.shでは、最初の引数の置換に$0を使用します。$1$2、および$3私の仕事のために。

または

このリンクをたどってください: https://linux.die.net/man/1/bash そして、上記のプロセスを簡素化するために、複数の引数の置換に$*または$@を使用することを学ぶ。緑色のチェックの答えには、この方法を使用した例があります。

2
Lucifer

元のバージョン

シェルスクリプトを使用することをお勧めします。

  • たとえば、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
2
sudodus