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

Android环境下集成FFmpegKit后yt-dlp仍提示FFmpeg未安装的问题求助

Android环境下集成FFmpegKit后yt-dlp仍提示FFmpeg未安装的问题求助

嗨,我来帮你拆解下这个问题的核心,再给你具体的解决思路~

问题本质

你遇到的卡点其实是Chaquopy的Python运行环境和Android Java层是相互隔离的:FFmpegKit是部署在Java/Kotlin环境里的,而yt-dlp运行在Chaquopy提供的Python沙箱中——yt-dlp默认会在系统PATH里找FFmpeg二进制文件,但Android系统本身不带FFmpeg,且FFmpegKit的FFmpeg二进制不在Python的可访问路径范围内,所以yt-dlp完全找不到它。

解决办法:给yt-dlp指定FFmpeg的实际路径

既然FFmpegKit已经把FFmpeg打包到你的APP私有目录里了,我们只需要把这个路径明确告诉yt-dlp就行,分两步修改代码:

1. 修改Java层代码,传递FFmpeg路径给Python脚本

在调用Python下载函数前,先通过FFmpegKit获取到FFmpeg二进制的真实路径,再把这个路径作为参数传给Python脚本:

// java code
import com.arthenica.ffmpegkit.FFmpegKitConfig; // 记得添加这个导包

public static void downloadVideo(String video_url, String output_path)
{
    Python py = Python.getInstance();
    PyObject pyObj = py.getModule("yt_dlp_script"); // Import yt-dlp
    try {
        // 获取FFmpegKit提供的FFmpeg二进制文件路径
        String ffmpegBinaryPath = FFmpegKitConfig.getFFmpegBinary();
        // 新增传递FFmpeg路径参数
        pyObj.callAttr("download", video_url, output_path, ffmpegBinaryPath);
        Log.i("VideoDownloader", "Video downloaded successfully!");
    } catch (Exception e) {
        Log.e("VideoDownloader", "Error downloading video: " + e.getMessage());
    }
}

2. 修改Python脚本,配置yt-dlp使用指定的FFmpeg

在yt-dlp的配置选项里加上ffmpeg_location,把Java层传过来的路径填进去:

# python script
import yt_dlp

def download(video_url, output_path, ffmpeg_path):
    ydl_opts = {
        'outtmpl': output_path,  # specify the output file path
        'merge_output_format': 'mp4',
        'ffmpeg_location': ffmpeg_path,  # 关键配置:指定FFmpeg的实际路径
    }

    with yt_dlp.YoutubeDL(ydl_opts) as ydl:
        ydl.download([video_url])  # Download the video 

额外提醒

  • 确保你已经在代码中申请了必要的存储权限(比如Android 12及以下的WRITE_EXTERNAL_STORAGE,或者Android 13+的媒体访问权限),不然可能会出现下载成功但文件无法写入的问题;
  • 你的Chaquopy配置里buildPython同时指定了3.13和3.8两个版本,建议统一成一个兼容的版本(比如保留3.8,因为你后面指定了-3.8参数),避免潜在的版本冲突。

这样修改后,yt-dlp就能正确调用FFmpeg处理格式合并了,你可以试试~

备注:内容来源于stack exchange,提问作者Pastori

火山引擎 最新活动