Files
Video-Tree-TRM5/reference/scripts/build_trees_from_mp4.sh
T
iomgaa 6bdb802f01 chore: track claude skills, tools, templates, reference code and research-wiki
- Add all claude skills (brainstorming, commit, debugging, TDD, etc.)
- Add claude hooks (pre-commit-guard, post-edit-quality)
- Add research templates (experiment plan, research brief, etc.)
- Add claude tools (arxiv/semantic_scholar/openalex fetch, wiki, exa)
- Add TRM4 reference implementation as algorithm fidelity baseline
- Add research-wiki content (plans, index, graph, query_pack)
- Update .gitignore to exclude .graphify_version runtime state
2026-07-06 20:59:03 -04:00

88 lines
2.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# =============================================================================
# build_trees_from_mp4.sh — 从本地 MP4 批量建树(JSON 输出,无 embedding
#
# 用法:
# bash scripts/build_trees_from_mp4.sh
# bash scripts/build_trees_from_mp4.sh data/videomme/videos/TGom0uiW130.mp4 # 单文件
#
# 环境变量:
# VIDEO_DIR — MP4 目录(默认: <PROJECT_ROOT>/data/videomme/videos
# CONFIG — 配置文件(默认: config/videomme.yaml
# =============================================================================
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
VIDEO_DIR="${VIDEO_DIR:-${PROJECT_ROOT}/data/videomme/videos}"
CONFIG="${CONFIG:-${PROJECT_ROOT}/config/videomme.yaml}"
TREE_DIR="${PROJECT_ROOT}/data/videomme/trees"
LOG_DIR="${PROJECT_ROOT}/data/videomme/logs"
LOG="${LOG_DIR}/mp4_build_$(date +%Y%m%d_%H%M%S).log"
FAILED="${LOG_DIR}/failed_mp4_builds.txt"
mkdir -p "${TREE_DIR}" "${LOG_DIR}"
# 绕过代理
export NO_PROXY="${NO_PROXY:+${NO_PROXY},}100.83.164.94"
export no_proxy="${no_proxy:+${no_proxy},}100.83.164.94"
# 激活 conda 环境
CONDA_BASE="$(conda info --base 2>/dev/null || echo "${HOME}/miniconda3")"
# shellcheck source=/dev/null
source "${CONDA_BASE}/etc/profile.d/conda.sh"
conda activate Video-Tree-TRM
cd "${PROJECT_ROOT}"
# 确定待处理文件列表
if [[ $# -gt 0 ]]; then
MP4_FILES=("$@")
else
mapfile -t MP4_FILES < <(find "${VIDEO_DIR}" -name "*.mp4" | sort)
fi
TOTAL=${#MP4_FILES[@]}
BUILT=0; SKIP=0; FAIL=0
echo "[$(date)] ===== MP4 本地建树开始 =====" | tee "${LOG}"
echo "[$(date)] 待处理: ${TOTAL} 个视频" | tee -a "${LOG}"
echo "[$(date)] 配置: ${CONFIG}" | tee -a "${LOG}"
for MP4 in "${MP4_FILES[@]}"; do
[[ -z "${MP4}" ]] && continue
STEM="$(basename "${MP4}" .mp4)"
CACHE="${TREE_DIR}/${STEM}_video.json"
# 缓存命中跳过
if [[ -f "${CACHE}" ]]; then
SKIP=$((SKIP+1))
echo "[$(date)] [SKIP] ${STEM}" | tee -a "${LOG}"
continue
fi
echo "[$(date)] [BUILD] ${STEM} file=${MP4}" | tee -a "${LOG}"
if python -u main.py index \
--source "${MP4}" \
--modality video \
--config "${CONFIG}" \
>> "${LOG}" 2>&1; then
BUILT=$((BUILT+1))
echo "[$(date)] [OK] ${STEM}" | tee -a "${LOG}"
else
FAIL=$((FAIL+1))
echo "[$(date)] [FAIL] ${STEM}" | tee -a "${LOG}"
echo "${STEM} ${MP4}" >> "${FAILED}"
fi
done
TREE_COUNT=$(find "${TREE_DIR}" -name "*_video.json" 2>/dev/null | wc -l)
echo "" | tee -a "${LOG}"
echo "[$(date)] ===== 汇总 =====" | tee -a "${LOG}"
echo "[$(date)] 本次新建: ${BUILT} 跳过: ${SKIP} 失败: ${FAIL}" | tee -a "${LOG}"
echo "[$(date)] 树索引总数: ${TREE_COUNT}" | tee -a "${LOG}"
[[ ${FAIL} -gt 0 ]] && echo "[$(date)] 失败列表: ${FAILED}" | tee -a "${LOG}"
echo "[$(date)] 日志: ${LOG}" | tee -a "${LOG}"