.wav形式の音楽セットがあり、neroAacEncを使用して.aac/.mp4に変換したいと思います。
どうすればいいですか?私はArch Linux x86_64とXtermを使用しています。
ベストアンサー1
端末に入力できるクイック行は次のとおりです。
find . -name "*.wav" -print0 | while read -d $'\0' file; do neroAacEnc -2pass -q 1 -if "$file" -of "${file%wav}m4a"; done
@slmが提案したようにffmpegを使用することもできます。
find . -name "*.wav" -print0 | while read -d $'\0' file; do ffmpeg -i "$file" -c:a libfdk_aac -vbr 3 output.m4a "${file%wav}m4a"; done
neroAacEncがffmpegとどのように比較されるかはよくわかりませんが、ffmpegが非常に進化しており、多くのLinuxユーザーに人気があることは知っています。
説明する
find
特定のファイル属性(この場合はファイル名)と一致するファイルパスを返すプログラム。現在のパスのサブディレクトリにどの.wavファイルがあるかを知りたい場合は、次のことができますfind . -name "*.wav"
。通常、これは各ファイルを新しい行に出力します。これ-print0
により、一致はヌル文字で区切られます。これにより、出力を次のコマンドに渡すときにスペースを含むファイル名を正しく処理できます。
この|
役割をコンジットと呼びます。これはシェルに左側のコマンドの出力を取得し、右側のコマンド(この場合はread
ループ内部コマンド)に入力として渡すように指示しますwhile
。
このread
コマンドは、出力を取得してfind
変数「file」に割り当てるために使用されます。通常、これは "file"の各単語に一度に値を割り当てますが、これは割り当てが-d $'\0'$
ヌル文字で区切られます(フラグをfind
使用してファイルを区切る-print0
方法と一致します)。
while ループを使用すると、read
「file」に一致する各ファイル名の値が繰り返し割り当てられます。 whileループの標準bash構文の一部do
です。done
while <something is true>; do
<run some commands>
done
この場合、「一部のコマンドの実行」はまたffmpeg
はですneroAacEnc
。それぞれの場合、入力ファイル(例$file
:)は私たちが割り当てた「file」変数として指定されread
、出力ファイル(例${file%wav}w4a
:)はこの変数に対する操作なので、ファイルに異なる名前を付けることができます。出力。通常$file
、または${file}
ファイル名を評価します。いくつかの曲。wav。%
右側の文字[1] %
(「wav」など)に一致するすべてのシーケンスが変数の右側で切り捨てられることを示します。それで、${file%wav}
次のように評価されます。数曲。すると、「m4a」がファイル名の新しい終わりになります。いくつかの曲。m4a。
[1] ここでは単純化のために「キャラクター」と言います。右側のシーケンスは%
正規表現です。たとえば、${file%w*v}
変数が次のようになるといくつかの曲。w1234vまた、以下のように評価されます。数曲。。