Ffmpeg error occurs when trying to save animations

I am using Matplotlib 3.5.2, and I am trying to test the animation saving function using a modified version of one of the examples in the matplotlib documentation:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import matplotlib as mpl

fig, ax = plt.subplots()


def f(x, y):
    return np.sin(x) + np.cos(y)

x = np.linspace(0, 2 * np.pi, 120)
y = np.linspace(0, 2 * np.pi, 100).reshape(-1, 1)

# ims is a list of lists, each row is a list of artists to draw in the
# current frame; here we are just animating one artist, the image, in
# each frame
ims = []
for i in range(60):
    x += np.pi / 15.
    y += np.pi / 20.
    im = ax.imshow(f(x, y), animated=True)
    if i == 0:
        ax.imshow(f(x, y))  # show an initial one first
    ims.append([im])

ani = animation.ArtistAnimation(fig, ims, interval=50, blit=True,
                                repeat_delay=1000)

# To save the animation, use e.g.
#
# ani.save("movie.mp4")
#
# or
#
mpl.rcParams['animation.codec'] = 'rawvideo'
writer = animation.FFMpegWriter(fps=15, metadata=dict(artist='Me'), bitrate=1800)
ani.save("movie.mp4", writer=writer)

When I run the code, I get the following result:

MovieWriter stderr:
Unknown encoder 'h264'

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/matplotlib/animation.py", line 234, in saving
    yield self
  File "/usr/local/lib/python3.8/dist-packages/matplotlib/animation.py", line 1093, in save
    writer.grab_frame(**savefig_kwargs)
  File "/usr/local/lib/python3.8/dist-packages/matplotlib/animation.py", line 351, in grab_frame
    self.fig.savefig(self._proc.stdin, format=self.frame_format,
  File "/usr/local/lib/python3.8/dist-packages/matplotlib/figure.py", line 3046, in savefig
    self.canvas.print_figure(fname, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/matplotlib/backend_bases.py", line 2319, in print_figure
    result = print_method(
  File "/usr/local/lib/python3.8/dist-packages/matplotlib/backend_bases.py", line 1648, in wrapper
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/matplotlib/_api/deprecation.py", line 415, in wrapper
    return func(*inner_args, **inner_kwargs)
  File "/usr/local/lib/python3.8/dist-packages/matplotlib/backends/backend_agg.py", line 486, in print_raw
    fh.write(renderer.buffer_rgba())
BrokenPipeError: [Errno 32] Broken pipe

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/justin/animation_test.py", line 36, in <module>
    ani.save("movie.mp4", writer=writer)
  File "/usr/local/lib/python3.8/dist-packages/matplotlib/animation.py", line 1093, in save
    writer.grab_frame(**savefig_kwargs)
  File "/usr/lib/python3.8/contextlib.py", line 131, in __exit__
    self.gen.throw(type, value, traceback)
  File "/usr/local/lib/python3.8/dist-packages/matplotlib/animation.py", line 236, in saving
    self.finish()
  File "/usr/local/lib/python3.8/dist-packages/matplotlib/animation.py", line 342, in finish
    self._cleanup()  # Inline _cleanup() once cleanup() is removed.
  File "/usr/local/lib/python3.8/dist-packages/matplotlib/animation.py", line 373, in _cleanup
    raise subprocess.CalledProcessError(
subprocess.CalledProcessError: Command '['ffmpeg', '-f', 'rawvideo', '-vcodec', 'rawvideo', '-s', '640x480', '-pix_fmt', 'rgba', '-r', '15', '-loglevel', 'error', '-i', 'pipe:', '-vcodec', 'h264', '-pix_fmt', 'yuv420p', '-b', '1800k', '-metadata', 'artist=Me', '-metadata', 'codec=rawvideo', '-y', 'movie.mp4']' returned non-zero exit status 1.

This does not make sense, since, when I run ffmpeg -codecs, it shows h264 among the list of installed encoders:

I am not knowledgable about ffmpeg, so any help is much appreciated.

The entry for ffmpeg displays “D.V.LS” so E (encoder) support is missing.