you-get 中的媒体处理子系统负责媒体文件的下载后操作。这包括合并多个视频片段、连接单独的音频和视频流、格式转换以及处理各种媒体特定处理需求。该组件主要利用 FFmpeg 进行媒体操作。
有关下载文件的信息,请参阅 下载系统。有关 URL 如何被解析并路由到相应提取器,请参阅 URL 路由。
you-get 在系统初始化期间自动检测 FFmpeg 的可用性,并相应地调整其功能。
来源: src/you_get/processor/ffmpeg.py10-40
系统首先尝试检测 ffmpeg,如果需要,则回退到 avconv。它将可执行文件路径和版本信息存储在全局变量 FFMPEG、FFPROBE 和 FFMPEG_VERSION 中,供整个应用程序使用。
函数 has_ffmpeg_installed() 为其他组件提供了简单的 API 来检查 FFmpeg 功能是否可用。
这使系统能够就处理能力做出运行时决策。
来源: src/you_get/processor/ffmpeg.py42-43
you-get 根据输入格式和 FFmpeg 的可用性确定输出格式。
来源: src/you_get/common.py959-973
| 格式 | 扩展 | 处理支持 |
|---|---|---|
| MP4 | .mp4 | 完整(合并、连接) |
| FLV | .flv, .f4v | 如果 FFmpeg 可用,则转换为 MP4 |
| TS | .ts | 如果 FFmpeg 可用,则转换为 MKV |
| MP3 | .mp3 | 音频连接 |
| Matroska | .mkv | TS 转换的输出格式 |
| 多种格式 | 各种 | 音视频同步 |
来源: src/you_get/common.py959-973 src/you_get/processor/ffmpeg.py57-301
you-get 为不同媒体类型提供特定格式的合并功能。
来源: src/you_get/common.py1062-1124 src/you_get/processor/ffmpeg.py57-238
对于支持 FFmpeg concat demuxer 的格式,you-get 会生成一个 concat 列表文件。
来源: src/you_get/processor/ffmpeg.py47-55
一些提取器单独下载音频和视频,需要进行合并操作。
来源: src/you_get/processor/ffmpeg.py285-300
系统根据 FFmpeg 的版本,通过两种方法处理 MP4 文件合并。
来源: src/you_get/processor/ffmpeg.py200-238
Coub 提取器展示了复杂的音视频同步处理。
来源: src/you_get/extractors/coub.py10-38 src/you_get/processor/ffmpeg.py285-300
you-get 根据处理需求、格式和版本兼容性构建 FFmpeg 命令。
来源: src/you_get/processor/ffmpeg.py57-301
媒体处理工作流在 common 模块中与下载流程集成。
来源: src/you_get/common.py985-1124
当 FFmpeg 不可用时,you-get 会为某些格式提供替代处理方法。
| 格式 | 主要方法(有 FFmpeg) | 备用方法(无 FFmpeg) |
|---|---|---|
| FLV | ffmpeg_concat_flv_to_mp4 | concat_flv (内置) |
| MP4 | ffmpeg_concat_mp4_to_mp4 | concat_mp4 (内置) |
| TS | ffmpeg_concat_ts_to_mkv | concat_ts (内置) |
| MP3 | ffmpeg_concat_mp3_to_mp3 | 无(需要 FFmpeg) |
| AV | ffmpeg_concat_av | 无(需要 FFmpeg) |
来源: src/you_get/common.py1066-1123
这种方法确保了即使在未安装 FFmpeg 的情况下,系统也能处理基本处理,同时在安装了 FFmpeg 时提供增强的功能。