Skip to content

feat: add automatic audio extraction for video downloads - #944

Open
Lcos-000 wants to merge 1 commit into
NanmiCoder:mainfrom
Lcos-000:feature/auto-audio-extraction
Open

feat: add automatic audio extraction for video downloads#944
Lcos-000 wants to merge 1 commit into
NanmiCoder:mainfrom
Lcos-000:feature/auto-audio-extraction

Conversation

@Lcos-000

Copy link
Copy Markdown

功能简介

为已支持视频下载的平台增加可选的自动音频提取能力。开启后,爬虫在下载视频的同时会自动把音频抽离成 .mp3 / .aac 文件,方便后续直接做 ASR 转文字。

设计原则:零侵入、与主干无关、完全可选

  • 默认关闭:所有新增配置默认均为 False,不开启时现有代码路径与主干完全一致。
  • 仅追加逻辑:不改动任何现有爬取、登录、存储、评论流程,只在视频保存成功后增加一个可选的音频提取步骤。
  • 开关隔离:通过 ENABLE_GET_AUDIO 单独控制,与 ENABLE_GET_MEIDAS 解耦。即使开启视频下载,也可以只下视频不下音频。
  • 无新增运行时依赖:音频提取基于系统 ffmpeg;代码内做了 PATH 自动查找 + 常见 Windows 安装路径 fallback,未引入新的 Python 包依赖。
  • 新增抽象基类AbstractStoreAudio 与既有 AbstractStoreVideo 平行,保持架构一致性,不破坏现有 store 层设计。

配置项

# 是否开启音频提取,默认 False
ENABLE_GET_AUDIO = False

# 音频输出格式,支持 mp3 / aac
AUDIO_FORMAT = "mp3"

# 提取音频后是否保留原视频,默认 True
KEEP_ORIGINAL_VIDEO = True

已接入平台

平台 视频下载 音频提取 音频保存路径
小红书(xhs) data/xhs/audios/{note_id}/audio.{fmt}
抖音(dy) data/douyin/audios/{aweme_id}/audio.{fmt}
B 站(bili) data/bili/audios/{aid}/audio.{fmt}
微博 / 快手 / 知乎 / 贴吧 未实现视频下载 -

使用示例

PLATFORM = "xhs"
KEYWORDS = "装修"
CRAWLER_TYPE = "search"

# 下载视频并提取音频
ENABLE_GET_MEIDAS = True
ENABLE_GET_AUDIO = True
AUDIO_FORMAT = "mp3"
KEEP_ORIGINAL_VIDEO = False   # 只保留音频,节省空间

主要改动

  • config/base_config.py:新增 3 个音频相关配置项
  • base/base_crawler.py:新增 AbstractStoreAudio 抽象类
  • tools/media_util.py:新增异步 ffmpeg 音频提取工具,含 ffmpeg 自动查找
  • store/{xhs,douyin,bilibili}/:各新增 {platform}_store_audio.py,并注册到 __init__.py
  • media_platform/{xhs,douyin,bilibili}/core.py:在视频保存后,条件触发音频提取

验证

  • uv run python -m py_compile 语法检查通过
  • uv run python main.py --help 正常
  • 已实测小红书音频提取成功

- Add ENABLE_GET_AUDIO, AUDIO_FORMAT, KEEP_ORIGINAL_VIDEO configs
- Add AbstractStoreAudio base class
- Add media_util.extract_audio_from_video using ffmpeg
- Integrate audio extraction into xhs, douyin, and bilibili crawlers
- Audio files saved to data/{platform}/audios/{id}/audio.{fmt}
@Lcos-000
Lcos-000 requested a review from NanmiCoder as a code owner July 27, 2026 06:35
@dosubot dosubot Bot added size:L This PR changes 100-499 lines, ignoring generated files. enhancement New feature or request labels Jul 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant