24 lines
1.2 KiB
Bash
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)"
|