1
0

download_subtitles.sh 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #!/bin/bash
  2. # 从YouTube视频下载字幕
  3. # 用法: ./download_subtitles.sh <YouTube_URL> [输出目录]
  4. # 优先下载人工字幕,无人工字幕则下载自动生成字幕
  5. # 语言优先级:中文 > 英文 > 其他
  6. set -e
  7. URL="$1"
  8. OUTPUT_DIR="${2:-.}"
  9. if [ -z "$URL" ]; then
  10. echo "用法: ./download_subtitles.sh <YouTube_URL> [输出目录]"
  11. exit 1
  12. fi
  13. mkdir -p "$OUTPUT_DIR"
  14. echo ">>> 检查可用字幕..."
  15. yt-dlp --list-subs --no-download "$URL" 2>/dev/null | tail -20
  16. echo ""
  17. echo ">>> 尝试下载人工字幕(中文优先)..."
  18. # 尝试1: 人工中文字幕
  19. if yt-dlp --write-subs --sub-langs "zh-Hans,zh-Hant,zh,zh-CN,zh-TW" --sub-format srt --skip-download -o "$OUTPUT_DIR/%(title)s" "$URL" 2>/dev/null; then
  20. FOUND=$(find "$OUTPUT_DIR" -name "*.srt" -newer /tmp/.ytdlp_marker 2>/dev/null | head -1)
  21. if [ -n "$FOUND" ]; then
  22. echo "✅ 下载成功: $FOUND"
  23. exit 0
  24. fi
  25. fi
  26. # 尝试2: 人工英文字幕
  27. echo ">>> 无中文人工字幕,尝试英文..."
  28. if yt-dlp --write-subs --sub-langs "en,en-US,en-GB" --sub-format srt --skip-download -o "$OUTPUT_DIR/%(title)s" "$URL" 2>/dev/null; then
  29. FOUND=$(find "$OUTPUT_DIR" -name "*.srt" -mmin -1 2>/dev/null | head -1)
  30. if [ -n "$FOUND" ]; then
  31. echo "✅ 下载成功: $FOUND"
  32. exit 0
  33. fi
  34. fi
  35. # 尝试3: 自动生成字幕(中文优先)
  36. echo ">>> 无人工字幕,尝试自动生成字幕..."
  37. if yt-dlp --write-auto-subs --sub-langs "zh-Hans,zh,en" --sub-format srt --skip-download -o "$OUTPUT_DIR/%(title)s" "$URL" 2>/dev/null; then
  38. FOUND=$(find "$OUTPUT_DIR" -name "*.srt" -o -name "*.vtt" 2>/dev/null | head -1)
  39. if [ -n "$FOUND" ]; then
  40. echo "✅ 自动字幕下载成功: $FOUND"
  41. exit 0
  42. fi
  43. fi
  44. echo "❌ 未找到任何可用字幕"
  45. exit 1