久しぶりに 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