FFmpeg权限被拒问题求助:Java调用FFmpeg遇Permission denied错误
解决Java调用FFmpeg时的Permission Denied错误
这是典型的文件权限问题——你的Java进程没有执行指定FFmpeg二进制文件的权限。下面是一步步的排查和解决方案:
第一步:检查FFmpeg文件的权限
先通过终端命令查看目标FFmpeg文件的权限详情:
ls -l /home/dijo/ffmpeg_sources/ffmpeg
输出会类似这样:
-rw-r--r-- 1 dijo dijo 1234567 Aug 10 10:00 /home/dijo/ffmpeg_sources/ffmpeg
注意开头的权限位,-rw-r--r--表示只有所有者有读写权限,没有执行权限(缺少x位),这就是问题核心。
第二步:添加执行权限
给FFmpeg文件添加执行权限,根据你的需求选择以下命令之一:
- 仅给文件所有者添加执行权限(最安全的方式):
chmod u+x /home/dijo/ffmpeg_sources/ffmpeg - 给所有用户添加执行权限(如果需要其他用户也能运行):
chmod a+x /home/dijo/ffmpeg_sources/ffmpeg
第三步:检查父目录的访问权限
如果添加执行权限后还是报错,要确认Java进程的运行用户能访问FFmpeg所在的父目录:
查看父目录权限:
ls -ld /home/dijo/ffmpeg_sources/
确保权限位包含rx(比如drwxr-xr-x),如果缺少,用chmod命令补充:
chmod o+rx /home/dijo/ffmpeg_sources/
(o+rx表示给其他用户添加读和进入目录的权限,可根据实际运行用户调整参数)
第四步:确认Java进程的运行用户
有时候Java是通过服务(比如Tomcat、Spring Boot服务)运行的,要确认服务的运行用户有FFmpeg的执行权限:
查看Java进程的运行用户:
ps aux | grep java
找到对应Java进程的用户列,然后确保该用户对FFmpeg文件有执行权限——可以把该用户加入FFmpeg文件的用户组,或者调整文件权限适配。
可选优化:将FFmpeg加入系统路径
如果你不想每次都写绝对路径,可以把FFmpeg复制到系统默认的可执行路径,比如/usr/local/bin/:
cp /home/dijo/ffmpeg_sources/ffmpeg /usr/local/bin/ chmod a+x /usr/local/bin/ffmpeg
之后Java代码里直接写new FFmpeg("ffmpeg")即可调用。
内容的提问来源于stack exchange,提问作者dijo francis




