So I went to watch a video on YouTube:

And about a minute in, I noticed some strange high frequency in both audio channels. Here’s a sample:


Not sure what this is, I decided to download it to investigate further:

$ youtube-dl -F ''

One of the output lines is:

140          m4a        audio only tiny  129k , m4a_dash container, mp4a.40.2@129k (44100Hz), 84.38MiB


$ youtube-dl -f 140 ''
$ ffmpeg -i '【GAMABOOKS_コラボ企画】星空古本市開催!【新人VTuber】-7fSq0_Ljb_s.m4a' -ss 02:00 -t 30 gamabooks_cut.wav
$ octave-cli
octave:1> [y, Fs] = audioread('gamabooks_cut.wav');
octave:2> Y = fft(y);
octave:3> plot(abs(Y));

fft spectrum

Here’s our high frequency. Now zoom in to find the FFT index number:

fft zoomed

The peak is at index 338543. Convert it to hertz (and note the 1-index):

octave:4> (338543-1) / length(y) * Fs
ans =    1.1285e+04

So now we just need a way to suppress this frequency. Searching “mpv audio filter” online tells us that mpv --af=help will list all audio filters available. Looking through the list, I found:

bandreject       Apply a two-pole Butterworth band-reject filter.

So I just need to find out how to configure this filter. Searching online, I eventually came across some scripts that referenced the FFmpeg manual, specifically, the “equalizer” filter: (emphasis mine)

Apply a two-pole peaking equalisation (EQ) filter. With this filter, the signal-level at and around a selected frequency can be increased or decreased, whilst (unlike bandpass and bandreject filters) that at all other frequencies is unchanged.

Sounds like what I want. So to try it, with reference to the manual (the bandwidth and attenuation factor were determined by trial-and-error):

$ mpv --af=equalizer=f=11285:t=h:width=5:g=-100 gamabooks_cut.wav

Sounds a lot better. Now download the video:

$ youtube-dl -f 136 ''

And play it:

$ mpv 【GAMABOOKS_コラボ企画】星空古本市開催!【新人VTuber】-7fSq0_Ljb_s.mp4 --audio-file=【GAMABOOKS_コラボ企画】星空古本市開催!【新人VTuber】-7fSq0_Ljb_s.m4a --af=equalizer=f=11285:t=h:width=5:g=-100