在Android的Pydroid中使用FFmpeg库遇权限及路径问题求助
解决Pydroid3在未root Android11上调用FFmpeg的权限与找不到文件问题
问题分析
- FileNotFoundError:你通过pip安装的
ffmpeg-python等库只是Python绑定工具,并非FFmpeg可执行文件本身,Pydroid3默认环境里没有FFmpeg二进制程序,因此会提示找不到文件。 - PermissionError:Android11的应用沙箱机制禁止跨应用访问私有数据目录,Pydroid3无法读取Termux的
/data/data/com.termux/私有目录下的文件,所以出现权限被拒绝的错误。
可行解决方案
方案一:直接在Pydroid3环境安装FFmpeg
这是最简便的方法,Pydroid3自带包管理器可直接安装FFmpeg:
- 打开Pydroid3,点击顶部菜单栏的「Terminal」(终端)选项。
- 在终端中执行命令:
pkg install ffmpeg - 安装完成后,原代码无需修改,直接使用
'ffmpeg'即可调用——Pydroid会自动将安装路径加入环境变量。
方案二:使用公共存储目录的独立FFmpeg二进制
如果Pydroid的包管理器安装失败,可手动下载FFmpeg到公共目录:
- 下载对应你设备架构(arm64-v8a)的Android版FFmpeg二进制文件。
- 将下载的
ffmpeg文件放到手机公共存储目录,比如/storage/emulated/0/Download/。 - 给文件添加可执行权限:
- 打开Pydroid3的终端,执行:
chmod +x /storage/emulated/0/Download/ffmpeg
- 打开Pydroid3的终端,执行:
- 修改Python代码,指定FFmpeg的绝对路径:
import subprocess video_path = '/storage/emulated/0/Download/video.mp4' srt_path = '/storage/emulated/0/Download/subtitles.srt' subprocess.run(['/storage/emulated/0/Download/ffmpeg', '-i', video_path, '-map', '0:s:0', srt_path])
方案三:利用Termux复制FFmpeg到公共目录
如果你已经在Termux安装了FFmpeg,可将其复制到公共存储供Pydroid3使用:
- 打开Termux,执行
termux-setup-storage获取存储访问权限(按提示完成授权)。 - 复制FFmpeg到公共Download目录:
cp /data/data/com.termux/files/usr/bin/ffmpeg /storage/emulated/0/Download/ - 给文件添加可执行权限:
chmod +x /storage/emulated/0/Download/ffmpeg - 之后在Pydroid3中使用方案二的代码即可调用。
额外注意事项
- 确保Pydroid3已在手机设置中开启「存储访问权限」,否则无法读写Download目录的文件。
- 确认你的
video.mp4文件确实包含字幕轨道,否则-map 0:s:0会导致FFmpeg报错(此为独立问题,与当前权限/路径问题无关)。
内容的提问来源于stack exchange,提问作者Cristina T.
相关产品推荐
相关产品推荐

