久しぶりに MacBook Air を使っていて、なぜか「今聴いている音楽をカラオケ音源で聴きたいな」とか思ったのでやってみた。
ここで言う「カラオケ音源」とは ヘッドフォンのプラグが中途半端に抜けた状態のアレ のことである(何を言ってるのかわかると思うが)。
で、ffmpeg にそんなフィルターなかったかなーと man ffmpeg-filters
を見てみたけど載ってない。でも自分の記憶の中には何かを使って簡単にそんなことを出来た記憶が残っている。まぁマルチメディアファイルを弄ると言えば ffmpeg か VLC だろうということで VLC のオーディオフィルターを見てみると「カラオケ」というのがあった。そうそう、これこれ。
さて、これをコマンドラインから使うとなるとどうなるのか。簡単な話で transcode モジュールに afilter=karaoke
と書けばいいだけだ。
今回のスクリプトではストリームチェインを使わずにグローバルオプションを使うことにした(この2つは微妙に違いがある)。
使い方は以下のように引数にオーディオファイルを渡すだけ。例えば audio.wav
というファイルを渡せば audio_karaoke.wav
というファイルが出来上がる。
./gistfile1.sh audio.wav
Mac でバンドル版を使っているという場合は、恐らく vlc
にパスが通ってないので VLC
変数で指定することになるはず(うちはセルフビルド版と MacPorts 版なのでバンドル版のことは忘れたんじゃ)。
VLC=/Applications/VLC.app/Contents/MacOS/VLC ./gistfile1.sh audio.wav
たまにはこういうので聞いてみるのも面白い。
ffmpeg
ffmpeg のマニュアルを見返してみたら stereotools
フィルタで出来るらしい。mvel
の値は 0.015625
から 64
まで。
ffplay -i input.wav -af stereotools=mlev=0.015625
ffmpeg -i input.wav -af stereotools=mlev=0.015625 out.wav
mpv
libavfilter を使う。stereotools=mlev=0.015625
部分は libavfilter へ渡すパラメータとしてクオートをエスケープしておく必要がある。
mpv --af=lavfi=\"stereotools=mlev=0.015625\" input.wav