Python Kivy Android应用集成FFmpeg遇阻,求SDK/NDK配置及代码指导
Python3.12 + Kivy Android应用集成FFmpeg以支持yt-dlp视频转换
问题背景
用Python3.12+Kivy开发Android应用时,yt-dlp无法直接调用FFmpeg进行视频转换,需将FFmpeg打包进应用。尝试使用FFmpeg-Kit-Python但因不熟悉Java无法完成集成,同时遇到类找不到的报错。
1. SDK/NDK安装步骤
- 下载安装Android Studio,安装过程中勾选Android SDK和Android NDK选项;若已安装,可通过顶部菜单栏
Tools > SDK Manager打开管理界面 - 在
SDK Platforms标签页,选择目标设备对应的Android API级别(推荐API 33及以上),点击"Apply"安装 - 切换到
SDK Tools标签页,勾选NDK (Side by side)和CMake,点击"Apply"完成安装 - 配置系统环境变量:
- 新增
ANDROID_HOME,值为SDK安装路径(示例:C:\Users\<你的用户名>\AppData\Local\Android\Sdk) - 新增
ANDROID_NDK_HOME,值为NDK安装路径(示例:C:\Users\<你的用户名>\AppData\Local\Android\Sdk\ndk\25.2.9519653) - 将
%ANDROID_HOME%\platform-tools和%ANDROID_NDK_HOME%添加到系统PATH变量中
- 新增
2. Buildozer.spec修改方法
针对集成FFmpeg和yt-dlp的需求,修改项目根目录下的buildozer.spec文件:
- 更新
requirements字段,加入必要依赖:requirements = python3,kivy,yt-dlp,jnius - 添加FFmpeg-Kit的AAR包:下载FFmpeg-Kit官方预编译的AAR文件(推荐full版本),放到项目根目录,然后在spec中添加:
注:替换android.add_aars = ffmpeg-kit-full-5.1.0.LTS.aar<版本号>为你下载的AAR实际版本 - 配置应用权限:
android.permissions = INTERNET,WRITE_EXTERNAL_STORAGE,READ_EXTERNAL_STORAGE - 指定NDK版本(需与你安装的NDK版本一致):
android.ndk = 25.2.9519653
3. FFmpeg-Kit-Python集成与报错解决
报错原因
你代码中引用的com.sahib.pyff.ffpy并非FFmpeg-Kit的官方类路径,导致JVM无法找到对应类,抛出java.lang.NoClassDefFoundError。
正确集成步骤
- 获取预编译文件:从FFmpeg-Kit官方仓库下载对应Android平台的AAR包(无需自行编译,直接取编译好的成品)
- 修正Python代码:使用FFmpeg-Kit官方的类路径,代码改为:
from jnius import autoclass # 引入FFmpegKit核心类 FFmpegKit = autoclass('com.arthenica.ffmpegkit.FFmpegKit') - 调用FFmpeg命令示例:
# 执行视频转换命令(示例:将input.mp4转为output.mp3) session = FFmpegKit.execute("-i input.mp4 -vn output.mp3") # 处理执行结果 return_code = session.getReturnCode() if return_code.isValueSuccess(): print("转换完成") elif return_code.isValueCancel(): print("任务被取消") else: print(f"转换失败:{session.getFailStackTrace()}") - 关联yt-dlp:要让yt-dlp使用集成的FFmpeg,可在yt-dlp的配置中指定通过FFmpegKit执行命令,而非调用系统ffmpeg。例如,自定义yt-dlp的ffmpeg路径为一个包装函数,内部调用FFmpegKit的execute方法。
内容的提问来源于stack exchange,提问作者NumeroSMG
相关产品推荐
相关产品推荐

