ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Data-Juicer 音频驱动视频字幕算子 video_captioning_from_audio_mapper:基于 Qwen-Audio 的实战指南

2026/10/6 1:48:07 拓冰建站 浏览量
Data-Juicer 音频驱动视频字幕算子 video_captioning_from_audio_mapper:基于 Qwen-Audio 的实战指南 人工智能大模型数据工程数据清洗数据增强数据质检【免费下载链接】data-juicerData processing for and with foundation models! ➡️ ➡️ 项目地址https://gitcode.com/gh_mirrors/da/data-juicer点击查看免费下载Data-Juicer 提供了丰富的多模态数据处理算子mapper其中video_captioning_from_audio_mapper专门负责依据视频中的音频流、基于 Qwen-Audio 模型为视频自动生成描述性字幕caption适用于语音密集型视频如人物讲话、课堂、会议、访谈类素材的标注与数据增强。读完本文你将掌握该算子的内部处理链路、参数配置方法、输入数据格式要求、单元测试场景以及接入 Data-Juicer 配置文件的完整方式。算子概览类型、标签与定位根据 video_captioning_from_audio_mapper.md 中的定义该算子的元信息如下算子类型Typemapper即对样本做一对多改写映射——保留或替换原始样本并追加一条带字幕的新样本。标签Tagsgpu, hf, multimodal表明它依赖 GPU 推理、使用 Hugging Face 模型仓库hf中的预训练权重并且处理的是包含视频与音频的多模态数据。功能定位根据视频的音频流生成字幕。底层模型为阿里的Qwen-Audio多模态大模型用于对音频内容进行理解与转述。在源码 video_captioning_from_audio_mapper.py 中算子通过OPERATORS.register_module(NAME)注册到全局算子注册表对应 registry.py 中的Registry.register_module类名为VideoCaptioningFromAudioMapper并声明了_accelerator cuda与_batched_op True两个类属性表示它运行在 CUDA 设备上、且以批量batched方式处理样本因而在批次内部还能做额外的并行优化。内部工作原理与处理链路从源码结构可以还原出该算子完整的数据流主要分为五个阶段1. 模型与提示词初始化构造函数__init__中完成三件关键事默认显存申请kwargs[memory] 30GB if kwargs.get(memory, 0) 0 else kwargs[memory]即不显式传memory参数时默认按 30GB 显存规格向执行器申请资源。依赖检查通过LazyLoader.check_packages校验transformers、transformers-stream-generator、einops、accelerate、tiktoken等包是否安装。模型准备调用 model_utils.py 中的prepare_model(model_typehuggingface, pretrained_model_name_or_pathQwen/Qwen-Audio, trust_remote_codeTrue)生成模型加载器推理时再由get_model按设备cuda:{rank}懒加载并缓存到全局MODEL_ZOO。同时算子内置了一套用于引导 Qwen-Audio 输出的转录提示词|startoftranscription||unknown||caption||unknown||notimestamps||wo_itn|这段提示词要求模型输出纯字幕文本caption、不附带时间戳notimestamps、不做逆文本正则化wo_itn并用正则re.compile(r\|.*?\|)在推理后剥离响应中残留的|...|标记。2. 按 chunk 切分样本文本样本的text字段以特殊 token|dj_eoc|即SpecialTokens.eoc分隔多个对话/内容块chunk。_process_single_sample按SpecialTokens.eoc切分文本对每个非空 chunk 统计其中video特殊 tokenSpecialTokens.video的出现次数从而得知该 chunk 内嵌了几段视频。3. 提取音频并推理对 chunk 内每个视频文件调用 mm_utils.py 中的extract_audio_from_video(video, video .mp3, stream_indexes[0])只提取第 0 号音频流stream_indexes[0]当前版本仅处理第一条音轨输出为与视频同名的.mp3文件形如video_0.mp3extract_audio_from_video目前只支持导出 mp3 格式若视频没有有效音频流返回的valid_indexes为空该视频被跳过不生成字幕。随后构造查询串audio{提取出的mp3路径}/audio{提示词}经processor.process_audio(query)解析音频信息后processor(query, return_tensorspt, audio_infoaudio_info)完成特征编码在torch.no_grad()下调用model.generate(**inputs, audio_infoaudio_info, use_cacheFalse)生成字幕代码注释特别说明较新的 transformers 需要use_cacheFalse否则会报错最后processor.decode还原文本。4. 响应清理与失败兜底生成的响应会依次做三类后处理移除响应中出现的音频路径占位符与audio//audio标签用正则删除所有|...|内部标记若清理后响应为空生成失败跳过该视频并删除临时 mp3。成功后字幕被组织为video 字幕文本的形式追加到captioned_text_list同时记录该视频到left_video_keys并立即os.remove(extracted_audio_path)清理临时音频文件避免磁盘占用。5. 组装输出样本所有 chunk 处理完后字幕文本按|dj_eoc|重新拼接成captioned_sample[self.text_key]videos字段替换为实际生成成功的视频列表left_video_keys生成失败、无音轨的视频会从新样本中移除返回包含新样本的列表。参数配置详解原文档参数表给出的三个参数及其在源码中的真实语义如下参数名类型默认值说明keep_original_sampleboolTrue是否保留原始样本。为False时最终数据集只保留带字幕的新样本原始样本被移除默认True原始样本与字幕样本并存args-透传给Mapper基类的额外位置参数kwargs-透传给Mapper基类的额外关键字参数keep_original_sample的实际行为体现在process_batched中为True时原始样本先被加入结果列表再追加生成的样本为False时只保留生成样本。默认True意味着一条视频样本最终产出两条样本原样本 字幕样本这一点被单元测试反复验证见下文。另外需要注意两点易被忽略的隐性参数行为memory构造时若用户未指定memory会被自动置为30GB用于向调度器声明该算子的显存需求模型参数kwargs也会被保存为self.extra_args可携带如use_cuda之类的运行时控制项。在 config_all.yaml 中该算子被登记为- video_captioning_from_audio_mapper: # caption a video according to its audio streams based on Qwen-Audio model即无需任何必填参数即可加入处理流程需要调整行为时典型写法为process: - video_captioning_from_audio_mapper: keep_original_sample: false输入数据格式要求该算子对数据集 schema 有明确约定遵循 Data-Juicer 多模态数据的特殊 token 规范定义见 mm_utils.py 中的SpecialTokens类可通过环境变量覆盖默认格式默认video为dj_video、eoc为|dj_eoc|text字段文本中通过SpecialTokens.video默认dj_video标记视频出现位置多个内容块用SpecialTokens.eoc默认|dj_eoc|分隔videos字段与文本中dj_video标记一一对应的视频文件路径列表缺失处理若样本中不存在videos字段或字段为空_process_single_sample直接返回空列表该样本不被改写。例如一条合法的输入样本为{ text: dj_video 白色的小羊站在一旁讲话。旁边还有两只灰色猫咪。|dj_eoc|, videos: [/path/to/video1.mp4] }处理后得到的两条样本中新增样本的text会变为dj_video {Qwen-Audio生成的字幕}|dj_eoc|且videos只保留音频提取成功的视频。运行前提与依赖该算子属于重型 GPU 算子接入前需满足硬件CUDA GPU_accelerator cuda默认按 30GB 显存申请资源模型首次运行会自动从 Hugging Face 下载Qwen/Qwen-Audio权重trust_remote_codeTrue需保持网络可达Python 依赖transformers、transformers-stream-generator、einops、accelerate、tiktoken以及音频提取所依赖的 PyAVav由extract_audio_from_video使用音频格式extract_audio_from_video当前仅支持导出 mp3 音频文件。此外get_model在 Worker 进程中会通过setup_worker_threads(num_threads1)限制线程数防止num_proc 1多进程并行时线程过度订阅模型会按rank % cuda_device_count()分配到对应 GPU。单元测试覆盖的行为契约test_video_captioning_from_audio_mapper.py 用三个真实 mp4 样例tests/ops/data下的video1.mp4、video2.mp4、video3.mp4覆盖了五个核心场景可作为该算子的行为契约test_default_params默认参数下3 条样本处理后数据集变为 6 条原样本 字幕样本且每条样本中dj_video数量与生成字幕数量相等test_with_eoc文本以|dj_eoc|结尾时行为与默认一致test_no_original_sampleskeep_original_sampleFalse时3 条样本最终仍为 3 条只保留字幕样本test_multi_chunk_samples单个样本含多个 chunk、多个视频时逐 chunk 处理仍保证视频数与字幕数一致test_parallelnum_proc2多进程并行处理时结果与单进程一致。测试还通过辅助方法_count_generated_caption_num校验文本中每个dj_video标记都对应一条非空字幕这一不变量这直接对应源码中生成失败即跳过并移除视频的兜底逻辑。与相关视频字幕算子的区分Data-Juicer 的视频字幕家族见 config_all.yaml包括多个算子选用时需按数据特点区分video_captioning_from_audio_mapper本文主角只看音频流适合人声/语音信息主导的视频video_captioning_from_frames_mapper基于抽帧做图像到文本生成字幕来自多个帧的描述拼接video_captioning_from_video_mapper直接对视频整体生成字幕video_captioning_from_summarizer_mapper汇总视频/音频/帧等多种来源的字幕与标签后生成总结性字幕可通过vid_cap_from_vid_args、vid_cap_from_frm_args等参数组合底层算子video_captioning_from_human_tracks_mapper需在video_human_tracks_extraction_mapper之后使用聚焦视频中单人像的字幕生成。音频驱动方案的核心优势在于对画面信息弱、但语音信息丰富的素材讲话、旁白、访谈而言音频是比抽帧更直接、更完整的信息源。使用注意事项视频必须包含音轨否则valid_indexes为空、视频被静默跳过——对无声视频素材该算子不产生任何增益临时 mp3 文件生成后即被删除但若进程异常中断可能残留中间文件建议保证目标目录可写生成字幕的质量依赖 Qwen-Audio 的识别能力对多说话人、噪声、非普通话语音场景效果可能波动建议配合下游质量过滤算子如文本长度、语言分数过滤使用默认keep_original_sampleTrue会成倍扩大数据集若仅需字幕样本用于替换式标注应显式设置keep_original_sample: false。总而言之video_captioning_from_audio_mapper是一个开箱即用的音频→字幕映射算子理解其基于SpecialTokens的样本格式、keep_original_sample的样本产出语义、以及音频提取与失败兜底的内部链路后即可在 Data-Juicer 的process流程中通过一行 YAML 配置直接启用为语音类视频数据高效生成高质量字幕标注。赞分享人工智能大模型数据工程数据清洗数据增强数据质检【免费下载链接】data-juicerData processing for and with foundation models! ➡️ ➡️ 项目地址https://gitcode.com/gh_mirrors/da/data-juicer点击查看免费下载相关推荐Data-Juicer video_audio_ASR_mapper 算子全解析基于 SenseVoiceSmall 的视频语音自动识别实战Data Juicer video_audio_ASR_mapper 算子全解析基于 SenseVoiceSmall 的视频语音自动识别实战 导读 video人工智能大模型数据工程数据清洗数据增强数据质检Data-Juicer 的 video_motion_score_raft_filter基于 RAFT 光流的视频运动得分过滤算子实战指南Data Juicer 的 video_motion_score_raft_filter基于 RAFT 光流的视频运动得分过滤算子实战指南 本文围绕 Data人工智能大模型数据工程数据清洗数据增强数据质检data-juicer 视频字幕聚合生成算子 video_captioning_from_summarizer_mapper 深度解析data juicer 视频字幕聚合生成算子 video_captioning_from_summarizer_mapper 深度解析 本文以 data jui人工智能大模型数据工程数据清洗数据增强数据质检上一篇5个高效技巧掌握OCR文字识别Umi-OCR从入门到精通实战指南下一篇tweetable-polyglot-png终极指南如何在Twitter图片中隐藏3MB秘密数据创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考