mattintosh note

どこかのエンジニアモドキの備忘録

カラオケメーカー by VLC/ffmpeg/mpv

久しぶりに MacBook Air を使っていて、なぜか「今聴いている音楽をカラオケ音源で聴きたいな」とか思ったのでやってみた。

ここで言う「カラオケ音源」とは ヘッドフォンのプラグが中途半端に抜けた状態のアレ のことである(何を言ってるのかわかると思うが)。

で、ffmpeg にそんなフィルターなかったかなーと man ffmpeg-filters を見てみたけど載ってない。でも自分の記憶の中には何かを使って簡単にそんなことを出来た記憶が残っている。まぁマルチメディアファイルを弄ると言えば ffmpegVLC だろうということで 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