Ffmpeg permission denied on /dev/video0

~$ snap install ffmpeg
ffmpeg 4.1 from Snapcrafters installed

ffmpeg instatted as a snap but getting an issue accessing /dev/video0 - a USB webcam that is mounted correctly

admin@5X8YM42:~$ ffmpeg -list_devices true -i /dev/video0
Error: unable to open display
ffmpeg version n4.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 20160609
  configuration: --prefix= --prefix=/usr --disable-debug --disable-doc --disable-static --enable-avisynth --enable-cuda --enable-cuvid --enable-libdrm --enable-ffplay --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopus --enable-libpulse --enable-sdl2 --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-nonfree --enable-nvenc --enable-omx --enable-openal --enable-opencl --enable-runtime-cpudetect --enable-shared --enable-vaapi --enable-vdpau --enable-version3 --enable-xlib
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
[video4linux2,v4l2 @ 0x1c238c0] Cannot open video device /dev/video0: Permission denied
/dev/video0: Permission denied

sudo makes no difference

$ ls -l /dev/video0
crw-rw---- 1 root video 81, 0 Apr 17 13:28 /dev/video0

I’ve seen some posts about adding the user to the video group but cannot do this on ubuntu core due to read-only file system

I’m wondering if it’s an interfaces issue with the snap?

OS is ubuntu core so
Any help would be appreciated

snap connect ffmpeg:camera should sort that out.

Perfect! That worked a treat. Still having permission issues writing the file out to certain directories but that should be easily solved. Thanks again!

Actually perhaps you might know quickly the answer to that…

sudo ffmpeg -i /dev/video0 /home/admin/output.mp4
Error: unable to open display
ffmpeg version n4.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 20160609
  configuration: --prefix= --prefix=/usr --disable-debug --disable-doc --disable-static --enable-avisynth --enable-cuda --enable-cuvid --enable-libdrm --enable-ffplay --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopus --enable-libpulse --enable-sdl2 --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-nonfree --enable-nvenc --enable-omx --enable-openal --enable-opencl --enable-runtime-cpudetect --enable-shared --enable-vaapi --enable-vdpau --enable-version3 --enable-xlib
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
Input #0, video4linux2,v4l2, from '/dev/video0':
  Duration: N/A, start: 1910.514725, bitrate: 147456 kb/s
    Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 640x480, 147456 kb/s, 30 fps, 30 tbr, 1000k tbn, 1000k tbc
/writable/user-data/admin/output.mp4: Permission denied

Is there an interfaces connect that can give the ffmpeg permission to write to home?

What’s the reason for using sudo? Can you not just ffmpeg -i /dev/video0 ~/output.mp4?

Without sudo:

$ ffmpeg -i /dev/video0 ~/output.mp4
Error: unable to open display
ffmpeg version n4.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 20160609
  configuration: --prefix= --prefix=/usr --disable-debug --disable-doc --disable-static --enable-avisynth --enable-cuda --enable-cuvid --enable-libdrm --enable-ffplay --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopus --enable-libpulse --enable-sdl2 --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-nonfree --enable-nvenc --enable-omx --enable-openal --enable-opencl --enable-runtime-cpudetect --enable-shared --enable-vaapi --enable-vdpau --enable-version3 --enable-xlib
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
[video4linux2,v4l2 @ 0x9d3800] Cannot open video device /dev/video0: Permission denied
/dev/video0: Permission denied

With sudo

$ sudo ffmpeg -i /dev/video0 ~/output.mp4
Error: unable to open display
ffmpeg version n4.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 20160609
  configuration: --prefix= --prefix=/usr --disable-debug --disable-doc --disable-static --enable-avisynth --enable-cuda --enable-cuvid --enable-libdrm --enable-ffplay --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopus --enable-libpulse --enable-sdl2 --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-nonfree --enable-nvenc --enable-omx --enable-openal --enable-opencl --enable-runtime-cpudetect --enable-shared --enable-vaapi --enable-vdpau --enable-version3 --enable-xlib
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
Input #0, video4linux2,v4l2, from '/dev/video0':
  Duration: N/A, start: 5655.457521, bitrate: 147456 kb/s
    Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 640x480, 147456 kb/s, 30 fps, 30 tbr, 1000k tbn, 1000k tbc
/home/admin/output.mp4: Permission denied

Ah! I missed the detail that you’re using Ubuntu Core, sorry.

Error: unable to open display

There’s no X11 on Core, and I suspect ffmpeg is built to require it (possibly via pulseaudio). Perhaps @Wimpress can confirm.

I’ve gotten it recording to output to /tmp/output.mkv without issue, including that display message coming up. I’m running it on a displayless Dell Edge Gateway device.

Command:
sudo ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video0 /tmp/output.mkv

File goes to /tmp/snap.1000_ffmpeg_jburLN/tmp but I can copy it off (with sudo) and it plays fine.
Next steps is to get it writing to a nicer area of my file system so that’s the last basic problem I need to solve.

Looks like a file create issue rather than file write. Because if I touch a ~/output.mkv file and run ffmpeg it asks be if I want to overwrite and works fine.

Installing ffmpeg with devmode works. Not completely ideal though. Would welcome any thoughts though.

note that the home interface does never get auto-connected on core installs for security reasons, you need to manually call snap connect ffmpeg:home to give it write access to a home dir …

you might also want to look for other interfaces you want to connect with the snap interfaces ffmpeg or the new snap connections ffmpeg commands…

1 Like