You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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。

正确集成步骤

  1. 获取预编译文件:从FFmpeg-Kit官方仓库下载对应Android平台的AAR包(无需自行编译,直接取编译好的成品)
  2. 修正Python代码:使用FFmpeg-Kit官方的类路径,代码改为:
    from jnius import autoclass
    
    # 引入FFmpegKit核心类
    FFmpegKit = autoclass('com.arthenica.ffmpegkit.FFmpegKit')
    
  3. 调用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()}")
    
  4. 关联yt-dlp:要让yt-dlp使用集成的FFmpeg,可在yt-dlp的配置中指定通过FFmpegKit执行命令,而非调用系统ffmpeg。例如,自定义yt-dlp的ffmpeg路径为一个包装函数,内部调用FFmpegKit的execute方法。

内容的提问来源于stack exchange,提问作者NumeroSMG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 20:52:38