You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动