ディレクトリ内のwavファイルをffmpegでまとめてflacに変換
NASの容量を圧迫していたwavファイルが結構あったのでそいつらをまとめてflacに変換したいなぁと思ったので、ディレクトリ内のwavファイルをffmpegでまとめてflacに変換する方法のメモ。
ffmpegのオプションを変えればflac以外の形式にもできます。
コマンド
find . -type f -name "*.wav" -exec bash -c 'ffmpeg -i "$0" -acodec flac -f flac -compression_level 12 "${0%.wav}".flac' {} ";"
コマンドの内容
ざっくりとコマンドの内容の解説です。
find
指定したディレクトリから条件に一致するファイルを列挙するコマンドです。
find . -type f -name "*.wav" -exec bash ... ";"
-type
オプションで列挙対象をファイルだけに限定しています。
-name
オプションで拡張子が .wav
のファイルだけを列挙するようにしています。
-exec
オプションで列挙したファイルに後続のコマンドを実行させるようにしています。今回の場合はbash
を実行させています。
{}
部分はそれぞれ列挙されたファイルに置き換えられます。
bash
いわゆるshell
の一種です。
拡張子を変更するときに変数展開の後方一致除去を使うために間にbash
を噛ませて$0
で引数を変数として使えるようにしています。
bash -c 'ffmpeg -i "$0" -acodec flac -f flac -compression_level 12 "${0%.wav}".flac' 引数
-c
オプションで実行するコマンドを指定しています。今回の場合はffmpeg
を実行するようにしています。
$0
で引数で与えられた値をそのまま展開します。""
で括っているのは空白が入っていても問題ないようにするためです。
${0%.wav}
で引数で与えられた値の後方の.wav
を除去したものを展開します。
ffmpeg
今回一番大事なファイルの変換コマンドです。
ffmpeg -i 入力ファイル -acodec flac -f flac -compression_level 12 出力ファイル名
-i
オプションで入力ファイルを指定しています。
-acodec
オプションでオーディオコーデックをflacに指定しています。
-f
オプションでファイルフォーマットをflacに指定しています。
-compression_level
オプションでflacの圧縮レベルを指定しています。
これらを組み合わせて冒頭のコマンドになりました。