neroAacEncを使用してサブディレクトリ内のすべての.wavファイルを.aacに変換するには?

neroAacEncを使用してサブディレクトリ内のすべての.wavファイルを.aacに変換するには?

.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また、以下のように評価されます。数曲。

おすすめ記事