[Navidrome] Can not use transcoding (opus)

What app is this about, and its version: Navidrome, 0.59.0~ynh1
What YunoHost version are you running: 12.1.39
What type of hardware are you using: Raspberry Pi 3, 4+

Describe your issue

Hello,

Because of poor internet connexion (Yunohost hosted at home), I would like to use transcoding in Navidrome.

On Navridrome web interface : Settings → Transcoding :

Name : opus
Target Format : opus
Bitrate : 96
Command : ffmpeg -i %i -map 0:a -c:a libopus -b:a %bk -vbr on -f opus -

When transcoding is selection, the music simply do not play. It can try to load for a long time then error about ffmpeg PATH.

Share relevant logs or error messages

anv. 29 11:09:28 navidrome[975]: time=“2026-01-29T11:09:28+01:00” level=error msg=“Error starting transcoder” error=“starting cmd: exec: "\"ffmpeg": executable file not found in $PATH” id=qnkoSLol4KC8j63dvkM6Fj requestId=HIDDEN_DOMAIN.fr/hex6DWlhXQ-000798
janv. 29 11:09:28 navidrome[975]: time=“2026-01-29T11:09:28+01:00” level=error msg=“Error accessing transcoding cache” error=“invalid argument” id=qnkoSLol4KC8j63dvkM6Fj requestId=HIDDEN_DOMAIN.fr/hex6DWlhXQ-000798
janv. 29 11:09:28 navidrome[975]: time=“2026-01-29T11:09:28+01:00” level=info msg=“Streaming file” artist=“Bijelo Dugme” bitRate=96 cached=false format=opus originalBitRate=977 originalFormat=flac requestId=HIDDEN_DOMAIN.fr/hex6DWlhXQ-000798 title=“Padaju zvijezde” transcoding=true user=jasmin
janv. 29 11:09:28 navidrome[975]: time=“2026-01-29T11:09:28+01:00” level=warning msg=“API: Failed response” endpoint=/navidrome/rest/stream error=0 message=“Internal Server Error: invalid argument” requestId=HIDDEN_DOMAIN.fr/hex6DWlhXQ-000798

For more details :

https://paaster.io/697d332cfa18535448cb122f#p4stbPc2SJo9IM20GA7DOL-wBUdAdzjTjnb2Wl7s76Q

Hi @Tiron,

Your error message tells us exactly what’s going on:

exec: "\"ffmpeg": executable file not found in $PATH

Navidrome needs ffmpeg to transcode, but the service can’t find it.

Step 1 — Check if ffmpeg is installed:

which ffmpeg

If it returns nothing, install it:

sudo apt update && sudo apt install ffmpeg

If it still doesn’t work → Go Step 2

Step 2 — Tell Navidrome where to find ffmpeg:

Even with ffmpeg installed, the systemd service may run in a restricted environment where /usr/bin isn’t in the PATH. You need to explicitly set the path in Navidrome’s config file:

sudo nano /home/yunohost.app/navidrome/navidrome.toml

Add or modify this line:

FFmpegPath = '/usr/bin/ffmpeg'

(You can verify the actual path with which ffmpeg — it’s usually /usr/bin/ffmpeg on Debian.)

Step 3 — Restart the service:

sudo systemctl restart navidrome

After that, your transcoding config (which looks correct by the way) should work fine.

The FFmpegPath option is documented here: Navidrome Configuration Options | Navidrome

Let us know if that solves it! :wink:

Hello @djez

Thank you for your time.
I you check the link I posted, you can see that I already checked this kind of stuff.

  • ffmpeg is installed
  • ffmpeg path is the same as in navridrome.toml file

However you gave me some idea.
I set Navidrome logs in DEBUG mode.
I also mounted my data disk on “/media/disque_dur/Musique” instead of “/home/user/media/disque_dur/Musique”

I now have this log with but I am not sur what I can do with it.
I only can confirm that when I run ffmpeg command on the specific music file, with the same transcoding command, it works fine !

error="/usr/bin/ffmpeg exited with non-zero status code: 1" 
Jan 31 10:51:04 HIDDEN_DOMAIN.fr navidrome[3389]: time="2026-01-31T10:51:04+01:00" level=debug msg="HTTP: GET http://HIDDEN_DOMAIN.fr/navidrome/rest/getCoverArt?u=jasmin&t=[REDACTED]&s=[REDACTED]&f=json&v=1.8.0&c=NavidromeUI&id=mf-YDB4W0KsuIEocY1ClXoz3X&_=2025-09-04T19%3A53%3A06%2B02%3A00&size=300" elapsedTime=120ms httpStatus=200 remoteAddr=192.168.1.1 requestId=HIDDEN_DOMAIN.fr/wgI3pDsVdr-000005 responseSize=17469 userAgent="Mozilla/5.0 (X11; Linux x86_64; rv:147.0) Gecko/20100101 Firefox/147.0"
Jan 31 10:51:05 HIDDEN_DOMAIN.fr navidrome[3389]: time="2026-01-31T10:51:05+01:00" level=error msg="Error sending transcoded file" error="/usr/bin/ffmpeg exited with non-zero status code: 1" id=YDB4W0KsuIEocY1ClXoz3X requestId=HIDDEN_DOMAIN.fr/wgI3pDsVdr-000006
Jan 31 10:51:05 HIDDEN_DOMAIN.fr navidrome[3389]: time="2026-01-31T10:51:05+01:00" level=debug msg="HTTP: GET http://HIDDEN_DOMAIN.fr/navidrome/rest/stream?u=jasmin&t=[REDACTED]&s=[REDACTED]&f=json&v=1.8.0&c=NavidromeUI&id=YDB4W0KsuIEocY1ClXoz3X&_=1769853086008" elapsedTime=548.7ms httpStatus=0 remoteAddr=192.168.1.1 requestId=HIDDEN_DOMAIN.fr/wgI3pDsVdr-000006 responseSize=0 userAgent="Mozilla/5.0 (X11; Linux x86_64; rv:147.0) Gecko/20100101 Firefox/147.0"

To debug further, could you check the DEBUG logs for the exact ffmpeg command Navidrome is trying to run? Look for a line like Executing ffmpeg command — that will show us exactly what’s being sent to ffmpeg.

I set the navridome’s debug mode on “trace” and have found something.

The “%i” in the transcoding command shoud be remplaced by the song but this is not the case.
I have searched but was not able to find any relevant command I can use instead the one a I shared above.

Jan 31 13:50:56 domaine.fr navidrome[14783]: %i: No such file or directory
Jan 31 13:50:56 domaine.fr navidrome[14783]: ffmpeg version 5.1.8-0+deb12u1+rpt1 Copyright (c) 2000-2025 the FFmpeg developers
Jan 31 13:50:56 domaine.fr navidrome[14783]:   built with gcc 12 (Debian 12.2.0-14+deb12u1)
Jan 31 13:50:56 domaine.fr navidrome[14783]:   configuration: --prefix=/usr --extra-version=0+deb12u1+rpt1 --toolchain=hardened --incdir=/usr/include/aarch64-linux-gnu --enable-gpl --disable-stripping --disable-mmal --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sand --enable-sdl2 --disable-sndio --enable-libjxl --enable-neon --enable-v4l2-request --enable-libudev --enable-epoxy --libdir=/usr/lib/aarch64-linux-gnu --arch=arm64 --enable-pocketsphinx --enable-librsvg --enable-libdc1394 --enable-libdrm --enable-vout-drm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared
Jan 31 13:50:56 domaine.fr navidrome[14783]:   libavutil      57. 28.100 / 57. 28.100
Jan 31 13:50:56 domaine.fr navidrome[14783]:   libavcodec     59. 37.100 / 59. 37.100
Jan 31 13:50:56 domaine.fr navidrome[14783]:   libavformat    59. 27.100 / 59. 27.100
Jan 31 13:50:56 domaine.fr navidrome[14783]:   libavdevice    59.  7.100 / 59.  7.100
Jan 31 13:50:56 domaine.fr navidrome[14783]:   libavfilter     8. 44.100 /  8. 44.100
Jan 31 13:50:56 domaine.fr navidrome[14783]:   libswscale      6.  7.100 /  6.  7.100
Jan 31 13:50:56 domaine.fr navidrome[14783]:   libswresample   4.  7.100 /  4.  7.100
Jan 31 13:50:56 domaine.fr navidrome[14783]:   libpostproc    56.  6.100 / 56.  6.100
Jan 31 13:50:56 domaine.fr navidrome[14783]: %i: No such file or directory
Jan 31 13:50:56 domaine.fr navidrome[13575]: time="2026-01-31T13:50:56+01:00" level=error msg="Error sending transcoded file" error="ffmpeg-wrapper exited with non-zero status code: 1" id=a2rtVR3w0L5ad7osRY6HY5 requestId=domaine.fr/RVwwCjg6MN-000255

FOUND IT !

The command was not correct. The variable is not “%i’ but '“%s” !

Wrong command :

ffmpeg -i %i -map 0:a -c:a libopus -b:a %bk -vbr on -f opus -

Correct command :

ffmpeg -i %s -map 0:0 -b:a %bk -c:a libopus -f opus -

Source :

The bitrate trancoding (here 96 opus) works fine :

Jan 31 14:15:21 domaine.fr navidrome[15433]: time="2026-01-31T14:15:21+01:00" level=info msg="Streaming file" artist="Pink Floyd" bitRate=96 cached=false format=aac originalBitRate=320 originalFormat=mp3 requestId=domaine.fr/7IFy6BrqQm-000090 title="Not Now John" transcoding=true user=jasmin

@djez Thank you for spending some precious time here trying to help.
Have a good day.

1 Like

This topic was automatically closed 15 days after the last reply. New replies are no longer allowed.