YTDLnis 深度指南:基于 yt-dlp 的全功能 Android 音视频下载器 移动开发音视频【免费下载链接】ytdlnisFull-featured audio/video downloader for Android using yt-dlp项目地址https://gitcode.com/gh_mirrors/yt/ytdlnis点击查看免费下载YTDLnis 是一款免费开源的 Android 音视频下载器底层驱动为 yt-dlp支持 Android 7.0 及以上版本能够从超过 1000 个网站下载音频与视频。本文以仓库内的 README-zh_CN.md 为骨架结合 RuntimeManager.kt、DownloadWorker.kt、ShareActivity.kt 等核心源码系统讲解其功能体系、插件架构、后台下载机制、视频后处理能力与第三方应用集成方案读完即可掌握 YTDLnis 从日常使用到自动化集成的完整技术路径。项目概览与技术底座YTDLnis 由 Denis Çerri 创建采用MVVM 架构 WorkManager组织代码见 README-zh_CN.md 功能清单。从仓库结构看工程将代码划分为core运行时与组件管理、databaseRoom 数据库与 ViewModel、receiver分享与广播接收、services前台服务、ui界面、util工具、workWorkManager 任务七个核心包其中work目录下的 DownloadWorker.kt 承担实际下载任务core下的 RuntimeManager.kt 是整套 yt-dlp 运行时的管理中枢。主界面截图如下展示了下载队列与功能入口的整体布局在系统权限层面AndroidManifest.xml 声明了FOREGROUND_SERVICE、FOREGROUND_SERVICE_DATA_SYNC、SCHEDULE_EXACT_ALARM定时计划下载、POST_NOTIFICATIONS完成通知等关键权限配合largeHeaptrue为长时间的后台转码与下载提供资源保障。核心功能清单YTDLnis 围绕 yt-dlp 实现了大部分能力README 中明确列出的功能包括海量站点支持从超过 1000 个网站下载音频/视频能力继承自 yt-dlp 的 extractor 体系。播放列表处理支持将列表中每一项作为普通下载单独编辑可为所有条目统一选择格式下载视频时还支持选择多个音频格式可为所有条目设置统一下载路径、统一文件名模板支持一键批量切换下载类型音频/视频/自定义命令。队列与定时下载下载项可进入队列按日期时间计划执行也支持同时计划多个项目并支持同时并发下载多个项目。自定义命令与内置终端可使用自定义命令和模板调用 yt-dlp模板支持备份与恢复便于分享还内置了交互式终端。Cookie 支持使用账户登录并下载私密或无法访问的视频解锁高级格式。视频切割基于时间戳和视频章节切割视频实验性 yt-dlp 功能支持无限次分割。SponsorBlock 集成从已下载项目中移除 SponsorBlock 元素也可将其作为章节嵌入视频。元数据与章节嵌入字幕/元数据/章节修改元数据标题、作者根据章节将项目分割成单独文件。分享菜单直达无需打开应用直接从分享菜单底部卡片发起下载支持创建 txt 文件每行一个链接/播放列表/搜索查询应用自动处理。应用内搜索支持从应用内搜索或插入链接可堆叠多个搜索同时处理。下载日志与重试记录下载日志便于排查已取消或失败的下载可通过手势左滑重新下载、右滑删除长按详情表中的重新下载按钮可展开完整下载卡片。隐私模式Incognito不保存下载历史与日志。快速下载模式无需等待数据处理即可立即下载关闭底部卡片后即刻开始。通知直达直接从完成通知中打开/分享已下载文件。界面与主题Material You 设计、主题选项、备份恢复功能。上述能力在源码中均有对应实现播放列表批量配置对应 DownloadMultipleViewModel 系列批量下载类型切换对应 DownloadType.kt 中定义的auto, audio, video, command四种枚举搜索堆叠、历史记录、日志记录分别由ResultViewModel、HistoryViewModel、LogRepository支撑。插件化组件体系Python / JS 运行时 / FFmpeg / Aria2cYTDLnis 的一大设计特色是插件编排yt-dlp 所需的运行时组件均可独立升级或降级包括Pythonyt-dlp 的默认解释器JS 运行时NodeJS、Deno用于 YouTube 等站点的 JS challenge 求解FFmpeg音视频合并、转码、章节切割的依赖Aria2c外部下载加速器用户可以从应用内的更新页面安装组件包仓库内的 RuntimeManager.kt 明确定义了组件清单val packages: ListPackageItem listOf( PackageItem(Python, Python), PackageItem(FFmpeg, FFmpeg), PackageItem(NodeJS, NodeJS), PackageItem(Deno, Deno), PackageItem(Aria2c, Aria2c) )每个组件在core/packages/下都有独立实现Python.kt、FFmpeg.kt、NodeJS.kt、Deno.kt、Aria2c.kt、QuickJS.kt统一继承 PackageBase.kt 抽象基类。从该基类可见每个组件具备binDir、ldDir、executable字段并区分isDownloaded用户下载的组件包与isBundled应用内置两种来源从而实现自由升级或降级。组件的关键作用在 RuntimeManager.kt 的buildYTDLCommand中得到印证——真正执行 yt-dlp 时若 FFmpeg 可用追加--ffmpeg-location executable若 NodeJS / Deno / QuickJS 可用分别追加--js-runtimes node:...、--js-runtimes deno:...、--js-runtimes quickjs:...若命令中包含 aria2c则追加--external-downloader-args aria2c:--ca-certificate...并传入 TLS 证书路径最终以python yt-dlp二进制路径 构建出的参数列表形式启动进程。运行时初始化时RuntimeManager.init应用会把内置的yt-dlp二进制释放到内部存储的ytdlnis/yt-dlp/yt-dlp并构建完整的进程环境变量LD_LIBRARY_PATH、SSL_CERT_FILE、PATH、PYTHONHOME、TMPDIR等见 RuntimeManager.kt保证各组件的动态库与证书能被正确加载。同时app/src/main/assets/yt_dlp_plugins/中内置了burnsubs、compatiblerecoder、lyrics、sectionmerge四个 yt-dlp 后处理插件初始化时会被拷贝到插件目录提供烧录字幕、兼容重编码、歌词与章节合并等增强能力。后台下载机制WorkManager 前台服务README 声明项目基于 MVVM 架构与 WorkManager下载任务的实际调度在work包中实现。所有下载 Worker 继承自 YTDLPCoroutineWorker.kt该类在doWork()中统一处理可选的 BgUtil PoToken 服务端预热然后委托子类执行runWork()。DownloadWorker.kt 通过getForegroundInfo()返回前台通知与FOREGROUND_SERVICE_TYPE_DATA_SYNC类型确保下载在后台持续运行任务内部从DBManager获取downloadDao、historyDao、commandTemplateDao等数据源并借助 YTDLPUtil.kt 把下载配置翻译成 yt-dlp 命令行参数。值得关注的是进程生命周期管理RuntimeManager维护idProcessMap通过 runKillable 与destroyProcessTree实现协程取消即杀进程树保证取消下载时 Python 及其派生的 FFmpeg、Aria2c 子进程一并终止避免残留进程占用资源。播放列表与批量下载实战处理播放列表是 YTDLnis 的高频场景README 给出了完整的批量操作能力列表中每一项可像普通下载一样单独编辑为所有项选择统一格式下载视频时可为所有项选择多个音频格式为所有项设定统一下载路径为所有项选择统一文件名模板一键批量更新所有项的下载类型音频/视频/自定义命令。对应的批量处理界面与配置逻辑分布在ui/downloadcard、ui/downloads目录及DownloadViewModel、DownloadMultipleViewModel中。批量下载时每个子项在数据库中仍以独立下载记录存在可由 WorkManager 并发调度这正是同时下载多个项目与同时计划多个项目的实现基础。定时计划通过SCHEDULE_EXACT_ALARM权限与ScheduleAlarmReceiver、CancelScheduleAlarmReceiver见 AndroidManifest.xml驱动。视频后处理切割、SponsorBlock、章节与元数据README 中列出的视频处理功能在 YTDLPUtil.kt 中均有对应参数生成逻辑按时间戳/章节切割downloadSections非空时将配置的多个切割段按;拆分为每段追加--download-sections *起点 终点实现无限次分割同时由于切割段依赖精确关键帧会配合--force-keyframes-at-cuts见 YTDLPUtil.kt。源码注释特别说明使用切割段时不能使用 info.json 缓存见 YTDLPUtil.kt。SponsorBlock默认开启use_sponsorblock按用户勾选的分类追加--sponsorblock-remove filters如 sponsor、intro、outro、selfpromo 等并支持自定义--sponsorblock-api服务端若选择作为章节嵌入则使用--sponsorblock-mark all--embed-chapters见 YTDLPUtil.kt。按章节拆分文件音频下载开启splitByChapters时追加--split-chapters并用-o chapter:%(section_number)d - %(section_title)s.%(ext)s命名分章输出见 YTDLPUtil.kt。元数据修改通过--replace-in-metadata与--parse-metadata组合修改标题、作者uploader/artist等字段对 YouTube 链接还会按artists,artist,creators的优先级解析歌手标签见 YTDLPUtil.kt。嵌入与附加文件支持--write-thumbnail--convert-thumbnails封面、--write-description描述、--embed-metadata元数据嵌入、字幕写入与嵌入、章节嵌入等见 YTDLPUtil.kt。此外格式选择基于 yt-dlp 的-f语法支持按分辨率、编码、码率排序如abr:音频码率排序下载路径通过-P指定文件名通过-o模板控制--trim-filenames用于防止路径过长见 YTDLPUtil.kt。自定义命令、模板与内置终端对于高级用户YTDLnis 允许绕过图形化配置直接编写 yt-dlp 自定义命令并保存为可复用模板支持备份与恢复、与朋友分享。应用内置终端由TerminalActivityAndroidManifest.xml承载配合TerminalSessionService前台服务类型为specialUse提供交互式 shell 会话终端环境通过RuntimeManager.getEnvironmentForTerminal()构造将HOME指向用户终端目录其余环境变量与下载任务一致。这一设计意味着用户既能以图形方式下载也能像桌面端一样手工敲击 yt-dlp 命令。分享菜单直达与快速下载YTDLnis 无需打开主应用即可接收系统分享的链接。其入口是 ShareActivity.ktAndroidManifest.xml 中为该 Activity 声明了大量 intent-filterACTION_SENDtext/plain接收系统分享的文本链接ACTION_VIEWhttp/https作为浏览器处理 YouTube、Twitter/X、SoundCloud、Facebook、Instagram、TikTok、Bilibili、Twitch、Reddit、Pinterest、VK、Rutube 等站点的视频链接ACTION_VIEWapplication/txt通过Default等 activity-alias接收 txt 文件文件内每行一个链接/播放列表/搜索查询应用自动批量处理。分享卡片在授权显示在其他应用上层后会以悬浮底部卡片形式出现ShareActivity.kt无需切换应用即可发起下载。快速下载模式Quick Download对应quickDownloadShareAlias其 meta-dataquick_run_backgroundtrue见 AndroidManifest.xml配合快速下载偏好可立即下载、无需等待数据处理、关闭底部卡片即刻开始。隐私模式与下载日志隐私模式Incognito适用于不想保存下载历史或日志的场景相关的WebViewActivityIncognito以独立进程:incognito_process运行AndroidManifest.xml从进程隔离层面避免敏感痕迹落入主进程。下载日志每次下载产生的日志写入LogItem由LogRepository管理用户可在失败时查看完整 yt-dlp 输出排查问题日志也支持重新下载已取消或失败的下载配合左滑重下、右滑删除的手势交互。使用 Intent 与第三方应用集成含 Tasker 示例README 提供了明确的自动化集成协议可以通过 Intent 向应用推送命令无需用户交互即可运行下载。接受的变量变量取值说明TYPEaudio、video、command指定下载类型BACKGROUNDtrue、false为true时应用在后台运行下载不显示下载卡片源码侧ShareActivity.kt 正是通过intent.getStringExtra(TYPE)与intent.getBooleanExtra(BACKGROUND, ...)读取这两个变量其中BACKGROUND的默认值取自quick_run_backgroundmeta-data——这解释了为何快速下载别名可直接实现后台下载。使用 Tasker 在后台下载音频的示例按以下步骤创建 Tasker 任务创建 Send Intent 任务Actionandroid.intent.action.SENDCatDefaultMime Typetext/*Extraandroid.intent.extra.TEXT:url将url替换为要下载的视频 URLExtraTYPE:audioExtraBACKGROUND:true。除 Tasker 外任何能发送ACTION_SEND的自动化工具如 MacroDroid、Automate 等均可复用同一协议若想推送自定义 yt-dlp 命令将TYPE设为command即可。注意系统级ACTION_SEND已默认支持text/plain因此应用内直接分享到 YTDLnis与第三方 Intent 走的是同一条处理链路。包名、签名验证与安全提示包名com.deniscerri.ytdl第三方应用可据此与 YTDLnis 连接例如queries中识别的com.deniscerri.ytdl.python、com.deniscerri.ytdl.ffmpeg、com.deniscerri.ytdl.nodejs、com.deniscerri.ytdl.deno、com.deniscerri.ytdl.aria2c组件包见 AndroidManifest.xml。签名验证官方构建应包含以下签名GitHub workflow action 与各发行版基于该签名保证可复现构建若签名不一致说明第三方分发方修改过应用应改用原始签名版本Signer #1 certificate DN: CNDenis Cerri, OUPersonal, OPersonal, LAlbania, STAlbania, CAL Signer #1 certificate SHA-256 digest: 263645cb5272eb290759fe1f59149ae24df6ce171e9f6666eead981d3fc64c95 Signer #1 certificate SHA-1 digest: 2fec9c2fcef68d29a60857e185c795fec5f56fb6 Signer #1 certificate MD5 digest: 429d0c6315d2f99650f66cc44cf5a794许可与品牌源码遵循 GNU GPL v3.0见 LICENSE除 GPLv3 许可的源码外禁止其他任何方以下载器应用的名义使用YTDLnis名称其衍生产品包括 fork 与非官方构建同样受限。获取方式与更多资源官方发行渠道包括 GitHub Releases、F-Droid、IzzyOnDroid 与 UptodownREADME 中强调仅官方渠道列出的来源可信其他地方的版本与作者无关。参与贡献请阅读 CONTRIBUTING.MD界面截图全集见 fastlane/metadata/android/en-US/images/phoneScreenshots 目录。技术栈总结MVVM Roomdatabase包含 20 版本的 DBManager schema 迁移记录 WorkManagerwork包 Kotlin 协程 前台服务插件化运行时由core包统一编排形成了一套图形界面 自定义命令 外部 Intent 自动化三合一的完整下载解决方案。赞分享移动开发音视频【免费下载链接】ytdlnisFull-featured audio/video downloader for Android using yt-dlp项目地址https://gitcode.com/gh_mirrors/yt/ytdlnis点击查看免费下载相关推荐YTDLnis 深度解析基于 yt-dlp 的 Android 全功能视频/音频下载器YTDLnis 深度解析基于 yt dlp 的 Android 全功能视频/音频下载器 YTDLnis 是一款面向 Android 7.0 及以上系统的免费开移动开发音视频YTDLnis 完整技术指南基于 yt-dlp 的 Android 全能音视频下载器深度解析YTDLnis 完整技术指南基于 yt dlp 的 Android 全能音视频下载器深度解析 YTDLnis 是一款面向 Android 7.0 及以上系统的移动开发音视频YTDLnis基于 yt-dlp 的 Android 音视频下载器功能全景与第三方 Intent 集成指南YTDLnis基于 yt dlp 的 Android 音视频下载器功能全景与第三方 Intent 集成指南 本文以 YTDLnis 仓库中的项目说明文档为核心移动开发音视频上一篇老Mac投影多屏输出OpenCore Legacy Patcher 完整实战教程下一篇foobox-cn foobar2000 皮肤3 步装好深浅色随心切换创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考