FFMPEG 权限被拒绝尝试隐藏视频

Wes*_*ork 5 permissions ffmpeg

这个问题是在 18.04 开始出现的,当时我尝试修复它,但没有成功。我最近在新硬件上升级到 21.04,但问题仍然存在。

我从 Ubuntu 软件应用程序安装了 ffmpeg 4.3.1 我还安装了 Ubuntu 受限附加功能 下面是失败的命令示例。但即使是之前有效的 BASH 脚本也会失败并出现相同的错误。

~$ ffmpeg -i /mnt/Data/Videos/192.168.1.2_Street_main_20210522141323_141716-5fnd662.avi -ss 1 -t 95 /mnt/Data/Videos/192.168.1.2_Street_main_20210522141323_141716-5fnd662.mp4

/usr/share/libdrm/amdgpu.ids: No such file or directory
ffmpeg version n4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
  configuration: --prefix= --prefix=/usr --disable-debug --disable-doc --disable-static --enable-cuda --enable-cuda-sdk --enable-cuvid --enable-libdrm --enable-ffplay --enable-gnutls --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libmp3lame --enable-libnpp --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. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
/mnt/Data/Videos/192.168.1.2_Street_main_20210522141323_141716-5fnd662.avi: **Permission denied**
Run Code Online (Sandbox Code Playgroud)

dia*_*tic 6

如果文件权限看起来正常,但运行 ffmpeg 时仍然遇到权限被拒绝的情况,您还应该通过执行以下命令来检查系统上 ffmpeg 的安装位置:

which ffmpeg
Run Code Online (Sandbox Code Playgroud)

如果你看到

/snap/bin/ffmpeg
Run Code Online (Sandbox Code Playgroud)

这意味着 ffmpeg 是使用 snap 包管理器安装的,这可能会导致权限被拒绝错误。

如果是这种情况,您可以通过运行(请参阅链接)授予 ffmpeg 正确的快照资源权限来纠正这种情况:

sudo snap connect ffmpeg:removable-media
Run Code Online (Sandbox Code Playgroud)

注意:这是由于snap 包管理器的安全功能造成的。

对于那些不想使用 snap 的人来说,另一个解决方法是使用 apt 包管理器安装 ffmpeg:

sudo apt install ffmpeg
Run Code Online (Sandbox Code Playgroud)

并确保您运行由 apt 软件包管理器安装的 ffmpeg((apt 将安装到 /usr/bin/ 中)而不是由 snap 安装的 ffmpeg(snap 安装到 /snap/bin 中),即通过执行:

/usr/bin/ffmpeg -i input.avi output.mp3
Run Code Online (Sandbox Code Playgroud)

如果您选择使用 apt 包管理器安装和使用 ffmpeg,您可能还想删除通过 snap 安装的 ffmpeg:

sudo snap remove ffmpeg
Run Code Online (Sandbox Code Playgroud)

这样您以后就不会对系统上安装的两个 ffmpeg 感到困惑。


mch*_*hid 2

首先,运行以下命令来修复找不到文件的错误:

sudo apt update
sudo apt install libdrm-common
Run Code Online (Sandbox Code Playgroud)

每当出现文件未找到错误时,您可以尝试apt-file找到提供所需文件的包。

sudo apt update
sudo apt install apt-file
sudo apt-file update
apt-file search /usr/share/libdrm/amdgpu.ids
Run Code Online (Sandbox Code Playgroud)

可能需要一段时间,但它应该返回以下内容:

libdrm-common: /usr/share/libdrm/amdgpu.ids
Run Code Online (Sandbox Code Playgroud)

这就是我确定要安装哪个软件包的方法。


接下来,您似乎没有对安装目录的写入权限。

您可以使用写入权限重新挂载已挂载的文件系统,也可以在执行之前将.avi文件复制到用户的目录中。$HOMEffmpeg

例如,您可以将该文件复制到用户的桌面目录:

cp /mnt/Data/Videos/192.168.1.2_Street_main_20210522141323_141716-5fnd662.avi $HOME/Desktop
Run Code Online (Sandbox Code Playgroud)

然后ffmpeg从那里运行:

ffmpeg -i ~/Desktop/192.168.1.2_Street_main_20210522141323_141716-5fnd662.avi -ss 1 -t 95 ~/Desktop/192.168.1.2_Street_main_20210522141323_141716-5fnd662.mp4
Run Code Online (Sandbox Code Playgroud)

如果您仍然收到权限被拒绝错误,您可以更改文件的所有权:

sudo chown $USER:$USER ~/Desktop/192.168.1.2_Street_main_20210522141323_141716-5fnd662.avi
Run Code Online (Sandbox Code Playgroud)

然后再试一次:

ffmpeg -i ~/Desktop/192.168.1.2_Street_main_20210522141323_141716-5fnd662.avi -ss 1 -t 95 ~/Desktop/192.168.1.2_Street_main_20210522141323_141716-5fnd662.mp4
Run Code Online (Sandbox Code Playgroud)