ops: 新增 course-toolkit(YouTube 课程下载+转写+成册工具,含踩坑记录)
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
#!/bin/bash
|
||||
# fetch_course.sh — 下载 YouTube 课程视频 + 本地转写 + 组装教程
|
||||
#
|
||||
# 用法:
|
||||
# ./fetch_course.sh <playlist_url或单个视频url> <输出目录>
|
||||
#
|
||||
# 环境变量(可选):
|
||||
# PROXY 代理,默认 socks5://192.168.27.96:1080
|
||||
# MODEL whisper 模型,默认 base.en(英文用 base.en/small.en,中文用 small)
|
||||
# LANG 语言,默认 en(中文用 zh)
|
||||
# JOBS 并行数,默认 4
|
||||
# FMT yt-dlp 格式,默认 18(360p 渐进式,含音轨;见 README 画质说明)
|
||||
set -uo pipefail
|
||||
URL="${1:?用法: ./fetch_course.sh <url> <输出目录>}"
|
||||
OUT="${2:?缺少输出目录}"
|
||||
PROXY="${PROXY:-socks5://192.168.27.96:1080}"
|
||||
MODEL="${MODEL:-base.en}"; LG="${LANG:-en}"; JOBS="${JOBS:-4}"; FMT="${FMT:-18}"
|
||||
HERE="$(cd "$(dirname "$0")" && pwd)"
|
||||
mkdir -p "$OUT/videos" "$OUT/transcripts" "$OUT/clean"
|
||||
|
||||
if [ ! -s "$OUT/manifest.txt" ]; then
|
||||
echo "[*] 枚举视频列表..."
|
||||
yt-dlp --proxy "$PROXY" --no-warnings --flat-playlist \
|
||||
--print "%(playlist_index)s|%(id)s|%(title)s" "$URL" > "$OUT/_raw.txt" || { echo "枚举失败"; exit 1; }
|
||||
python3 "$HERE/course_util.py" manifest "$OUT/_raw.txt" > "$OUT/manifest.txt"
|
||||
fi
|
||||
echo "[*] 待处理视频: $(grep -c . "$OUT/manifest.txt") 个 | 模型=$MODEL 并行=$JOBS"
|
||||
|
||||
export PROXY MODEL LANG="$LG" OUT HERE FMT
|
||||
grep -v '^[[:space:]]*$' "$OUT/manifest.txt" | xargs -P "$JOBS" -I{} "$HERE/worker.sh" "{}"
|
||||
|
||||
python3 "$HERE/course_util.py" clean "$OUT"
|
||||
echo "[*] 全部完成: $OUT"
|
||||
echo "[*] 下一步: 在 $OUT/guides/ 放中文导读(<NN>.txt)后运行 course_util.py build $OUT"
|
||||
Reference in New Issue
Block a user