Files
quanxiel/ops/course-toolkit/worker.sh
T

24 lines
1.2 KiB
Bash

#!/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)"