ops: 新增 course-toolkit(YouTube 课程下载+转写+成册工具,含踩坑记录)
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
# worker.sh — 处理单个视频:下载 → 抽音频 → 转写(由 fetch_course.sh 调用)
|
||||
set -uo pipefail
|
||||
HERE="$(cd "$(dirname "$0")" && pwd)"
|
||||
line="$1"
|
||||
NN=$(echo "$line"|cut -d'|' -f1); ID=$(echo "$line"|cut -d'|' -f2); SLUG=$(echo "$line"|cut -d'|' -f3)
|
||||
VID="$OUT/videos/${NN}-${SLUG}.mp4"; TXT="$OUT/transcripts/${NN}-${SLUG}.${LANG}.txt"
|
||||
LOG="$OUT/build.log"
|
||||
log(){ echo "[$(date '+%F %T')] [$NN] $*" >> "$LOG"; }
|
||||
[ -f "$TXT" ] && { log "skip(done)"; exit 0; }
|
||||
if [ ! -f "$VID" ]; then
|
||||
for a in 1 2 3; do
|
||||
yt-dlp --proxy "$PROXY" --no-warnings --no-part \
|
||||
--extractor-args "youtube:player_client=android" -f "$FMT" \
|
||||
-o "$VID" "https://www.youtube.com/watch?v=$ID" >>"$LOG" 2>&1 && break
|
||||
log "retry-dl $a"; sleep 8
|
||||
done
|
||||
fi
|
||||
[ -f "$VID" ] || { log "FAIL download"; exit 1; }
|
||||
ffmpeg -y -hide_banner -loglevel error -i "$VID" -ar 16000 -ac 1 -c:a pcm_s16le "$OUT/_${NN}.wav" 2>>"$LOG" || { log "FAIL audio"; exit 1; }
|
||||
MODEL="$MODEL" LANG="$LANG" THREADS=1 python3 "$HERE/course_util.py" transcribe "$OUT/_${NN}.wav" "$TXT" >>"$LOG" 2>&1 || { log "FAIL transcribe"; exit 1; }
|
||||
rm -f "$OUT/_${NN}.wav"
|
||||
log "ok $(du -h "$VID"|cut -f1)"
|
||||
Reference in New Issue
Block a user