Short Video Multimodal Analysis Toolkit
本项目是一套用于短视频内容多模态分析的 Python 工具集,涵盖数据抽样、文本 NLP 分析、视觉符号识别与统计三大模块。适用于城市形象传播、旅游短视频、社交媒体内容分析等研究场景。
- 分层抽样:基于多维度分层变量的科学抽样
- 文本分析:LDA 主题建模 + SnowNLP 情感分析
- 视觉分析:视频下载 → 关键帧提取 → VLM 视觉符号识别 → 统计分析
shortvideo_multimodal_analysis/
│
├── sampling/ # 数据抽样模块
│ └── stratified_sampler.py # 分层随机抽样工具
│
├── text_nlp_analytics/ # 文本NLP分析模块
│ ├── lda_topic_analysis.py # LDA主题分析
│ ├── sentiment_analysis.py # SnowNLP情感分析
│ └── stopwords.txt # 中文停用词表
│
└── visual_symbol_analysis/ # 视觉符号分析模块
│
├── shortvideo_frame_extraction/ # 视频采集与切帧
│ ├── 1_video_downloader.py # 短视频批量下载
│ ├── 2_video_quality_checker.py # 下载质量检测
│ └── 3_frame_extractor.py # 视频批量切帧
│
├── visual_symbol_recognition/ # 视觉符号识别
│ ├── 1_frame_sampler.py # 帧图片分层抽样
│ ├── 2_vlm_open_coding.py # VLM开放式视觉编码
│ └── 3_vlm_batch_recognition.py # VLM批量符号识别
│
└── visual_symbol_stats/ # 视觉符号统计
├── 1_level1_symbol_distribution.py # 一级符号宏观分布
├── 2_level2_symbol_statistics.py # 二级符号细粒度统计
└── 3_symbol_structure_analysis.py # 符号结构与共现分析
- Python 3.8+
# 数据处理
pandas
numpy
openpyxl
# 文本分析
jieba
gensim
snownlp
pyLDAvis
# 视觉分析
opencv-python
requests
tqdm
openai # 用于调用 VLM API
# 可视化
matplotlibpip install pandas numpy openpyxl jieba gensim snownlp pyLDAvis opencv-python requests tqdm openai matplotlib- ffmpeg:视频切帧需要(请自行安装并配置路径)
功能:从母体数据中按多个分层变量进行分层随机抽样,确保样本结构与母体一致。
特性:
- 支持自定义抽样比例(默认 20%)
- 自动调整各层样本量,保证总数精确
- 固定随机种子,结果可复现
- 输出分层统计报告
使用方法:
# 修改配置区的文件路径
INPUT_FILE = "your_data.xlsx"
OUTPUT_FILE = "sampled_data.xlsx"
COL_QUARTER = "发布季度" # 分层变量1
COL_LIKETIER = "点赞档位" # 分层变量2
SAMPLE_RATIO = 0.20 # 抽样比例
# 运行脚本
python stratified_sampler.py功能:对短视频文案/描述进行主题建模,自动发现文本主题结构。
流程:
- 文本清洗(去URL、去话题标签、去特殊字符)
- jieba 分词 + 停用词过滤
- 在 K 范围内训练多个 LDA 模型
- 基于 Topic Coherence 自动选择最优主题数
- 导出主题关键词、文档主题分布、pyLDAvis 可视化
输出文件:
lda_topics_keywords.csv:各主题 Top 关键词output_with_topics.xlsx:带主题分布的原始数据lda_vis_bestK.html:pyLDAvis 交互式可视化coherence_k4_10.png:Coherence 曲线图
功能:基于 SnowNLP 计算文本情感得分,划分情感倾向标签。
输出:
- 情感得分(0-1,越接近1越正向)
- 情感标签(正向/中性/负向)
- 整体情感分布统计
- 按主题分组的情感分布
| 脚本 | 功能 |
|---|---|
1_video_downloader.py |
从 Excel 读取分享链接,调用解析 API 批量下载视频 |
2_video_quality_checker.py |
检测下载视频质量,识别异常/损坏文件 |
3_frame_extractor.py |
使用 ffmpeg 对视频按 1fps 抽帧 |
视频下载特性:
- 自动识别链接列
- 优先下载 720p 高清
- 断点续传(跳过已下载)
- 失败自动重试 + 记录失败原因
| 脚本 | 功能 |
|---|---|
1_frame_sampler.py |
从帧图片中随机抽样,用于开放式编码 |
2_vlm_open_coding.py |
调用 VLM 进行开放式视觉编码(探索性) |
3_vlm_batch_recognition.py |
基于预定义符号体系的批量多标签分类 |
VLM 批量识别特性:
- 多线程并发处理(可配置线程数)
- 断点续跑(中断后自动从上次位置继续)
- 内置重试机制 + 优雅退出处理
- 定期写盘,防止数据丢失
API 配置:
# 设置环境变量(使用阿里云 DashScope)
export DASHSCOPE_API_KEY="your_api_key"| 脚本 | 功能 |
|---|---|
1_level1_symbol_distribution.py |
一级符号帧级分布 + 视频覆盖率统计 |
2_level2_symbol_statistics.py |
二级符号 TopN + 集中度 + 代表性物象 |
3_symbol_structure_analysis.py |
视频级主导符号 + 符号共现分析 |
统计输出示例:
- 符号出现频次与占比
- 符号分布集中度(Top1/3/5/10/20 累计占比)
- 视频覆盖率(至少出现一次的视频比例)
- 符号共现关系(哪些符号经常同时出现)
1. 数据准备
└── 准备包含视频链接/文本的 Excel 文件
2. 抽样(可选)
└── sampling/stratified_sampler.py
3. 文本分析
├── text_nlp_analytics/lda_topic_analysis.py
└── text_nlp_analytics/sentiment_analysis.py
4. 视觉分析
├── 下载视频 → 1_video_downloader.py
├── 质量检测 → 2_video_quality_checker.py
├── 视频切帧 → 3_frame_extractor.py
├── VLM识别 → 3_vlm_batch_recognition.py
└── 统计分析 → visual_symbol_stats/*.py
- API 密钥:视觉符号识别模块需要配置 VLM API 密钥(如阿里云 DashScope)
- ffmpeg 路径:视频切帧前请确保 ffmpeg 已安装并正确配置路径
- 文件路径:各脚本配置区的文件路径需根据实际情况修改
- 视频下载:需要配置第三方视频解析 API
MIT License
欢迎提交 Issue 和 Pull Request!